From df985dad02caba2954035ae0378154b3c615e865 Mon Sep 17 00:00:00 2001 From: rozetko Date: Fri, 25 May 2018 16:31:36 +0300 Subject: [PATCH] Update dist --- server/dist/server.js | 25858 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 24828 insertions(+), 1030 deletions(-) diff --git a/server/dist/server.js b/server/dist/server.js index 220e5cf..01d5e7e 100644 --- a/server/dist/server.js +++ b/server/dist/server.js @@ -20,7 +20,7 @@ /******/ /******/ /******/ var hotApplyOnUpdate = true; -/******/ var hotCurrentHash = "c9fd12c9ae939f59622b"; // eslint-disable-line no-unused-vars +/******/ var hotCurrentHash = "ae1021282c37272eafc7"; // eslint-disable-line no-unused-vars /******/ var hotRequestTimeout = 10000; /******/ var hotCurrentModuleData = {}; /******/ var hotCurrentChildModule; // eslint-disable-line no-unused-vars @@ -681,1237 +681,24580 @@ /******/ __webpack_require__.h = function() { return hotCurrentHash; }; /******/ /******/ // Load entry module and return exports -/******/ return hotCreateRequire(15)(__webpack_require__.s = 15); +/******/ return hotCreateRequire(118)(__webpack_require__.s = 118); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports) { -module.exports = require('path'); +module.exports = require("path"); /***/ }), /* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; +/***/ (function(module, exports) { +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef -Object.defineProperty(exports, "__esModule", { value: true }); -var path = __webpack_require__(0); -var DATA_PATH = path.join(__dirname, '../data'); -exports.DATA_PATH = DATA_PATH; -var ANALYTICS_PATH = path.join(__dirname, '../../src'); -exports.ANALYTICS_PATH = ANALYTICS_PATH; -var ANOMALIES_PATH = path.join(ANALYTICS_PATH, 'anomalies'); -exports.ANOMALIES_PATH = ANOMALIES_PATH; -var SEGMENTS_PATH = path.join(ANALYTICS_PATH, 'segments'); -exports.SEGMENTS_PATH = SEGMENTS_PATH; -var METRICS_PATH = path.join(ANALYTICS_PATH, 'metrics'); -exports.METRICS_PATH = METRICS_PATH; /***/ }), /* 2 */ /***/ (function(module, exports) { -module.exports = require('babel-runtime/core-js/json/stringify'); +module.exports = require("buffer"); /***/ }), /* 3 */ -/***/ (function(module, exports) { +/***/ (function(module, exports, __webpack_require__) { + +var store = __webpack_require__(102)('wks'); +var uid = __webpack_require__(62); +var Symbol = __webpack_require__(1).Symbol; +var USE_SYMBOL = typeof Symbol == 'function'; + +var $exports = module.exports = function (name) { + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; + +$exports.store = store; -module.exports = require('babel-runtime/regenerator'); /***/ }), /* 4 */ -/***/ (function(module, exports) { +/***/ (function(module, exports, __webpack_require__) { + +/** + * Detect Electron renderer process, which is node, but we should + * treat as a browser. + */ + +if (typeof process !== 'undefined' && process.type === 'renderer') { + module.exports = __webpack_require__(125); +} else { + module.exports = __webpack_require__(126); +} -module.exports = require('babel-runtime/core-js/promise'); /***/ }), /* 5 */ -/***/ (function(module, exports, __webpack_require__) { +/***/ (function(module, exports) { -"use strict"; +module.exports = require("stream"); +/***/ }), +/* 6 */ +/***/ (function(module, exports) { + +var core = module.exports = { version: '2.5.6' }; +if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef -Object.defineProperty(exports, "__esModule", { value: true }); -var path = __webpack_require__(0); -var json_1 = __webpack_require__(6); -var config_1 = __webpack_require__(1); -var fs = __webpack_require__(9); -var crypto = __webpack_require__(12); -var anomaliesNameToIdMap = {}; -function loadAnomaliesMap() { - var filename = path.join(config_1.ANOMALIES_PATH, "all_anomalies.json"); - anomaliesNameToIdMap = json_1.getJsonDataSync(filename); -} -function saveAnomaliesMap() { - var filename = path.join(config_1.ANOMALIES_PATH, "all_anomalies.json"); - json_1.writeJsonDataSync(filename, anomaliesNameToIdMap); -} -function getAnomalyIdByName(anomalyName) { - loadAnomaliesMap(); - anomalyName = anomalyName.toLowerCase(); - if (anomalyName in anomaliesNameToIdMap) { - return anomaliesNameToIdMap[anomalyName]; - } - return anomalyName; -} -exports.getAnomalyIdByName = getAnomalyIdByName; -function insertAnomaly(anomaly) { - var hashString = anomaly.name + new Date().toString(); - var anomalyId = crypto.createHash('md5').update(hashString).digest('hex'); - anomaliesNameToIdMap[anomaly.name] = anomalyId; - saveAnomaliesMap(); - // return anomalyId - // const anomalyId:AnomalyId = anomaly.name; - var filename = path.join(config_1.ANOMALIES_PATH, anomalyId + ".json"); - if (fs.existsSync(filename)) { - return null; - } - saveAnomaly(anomalyId, anomaly); - return anomalyId; -} -exports.insertAnomaly = insertAnomaly; -function removeAnomaly(anomalyId) { - var filename = path.join(config_1.ANOMALIES_PATH, anomalyId + ".json"); - fs.unlinkSync(filename); -} -exports.removeAnomaly = removeAnomaly; -function saveAnomaly(anomalyId, anomaly) { - var filename = path.join(config_1.ANOMALIES_PATH, anomalyId + ".json"); - return json_1.writeJsonDataSync(filename, anomaly); -} -exports.saveAnomaly = saveAnomaly; -function loadAnomalyById(anomalyId) { - var filename = path.join(config_1.ANOMALIES_PATH, anomalyId + ".json"); - if (!fs.existsSync(filename)) { - return null; - } - return json_1.getJsonDataSync(filename); -} -exports.loadAnomalyById = loadAnomalyById; -function loadAnomalyByName(anomalyName) { - var anomalyId = getAnomalyIdByName(anomalyName); - return loadAnomalyById(anomalyId); -} -exports.loadAnomalyByName = loadAnomalyByName; -function saveAnomalyTypeInfo(info) { - console.log('Saving'); - var filename = path.join(config_1.ANOMALIES_PATH, info.name + ".json"); - if (info.next_id === undefined) { - info.next_id = 0; - } - if (info.last_prediction_time === undefined) { - info.last_prediction_time = 0; - } - return json_1.writeJsonDataSync(filename, info); -} -exports.saveAnomalyTypeInfo = saveAnomalyTypeInfo; -function getAnomalyTypeInfo(name) { - return json_1.getJsonDataSync(path.join(config_1.ANOMALIES_PATH, name + ".json")); -} -exports.getAnomalyTypeInfo = getAnomalyTypeInfo; -function setAnomalyStatus(anomalyId, status, error) { - var info = loadAnomalyById(anomalyId); - info.status = status; - if (error !== undefined) { - info.error = error; - } else { - info.error = ''; - } - saveAnomaly(anomalyId, info); -} -exports.setAnomalyStatus = setAnomalyStatus; -function setAnomalyPredictionTime(anomalyId, lastPredictionTime) { - var info = loadAnomalyById(anomalyId); - info.last_prediction_time = lastPredictionTime; - saveAnomaly(anomalyId, info); -} -exports.setAnomalyPredictionTime = setAnomalyPredictionTime; /***/ }), -/* 6 */ +/* 7 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; +/*! + * depd + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ +/** + * Module dependencies. + */ -var _stringify = __webpack_require__(2); +var callSiteToString = __webpack_require__(72).callSiteToString +var eventListenerCount = __webpack_require__(72).eventListenerCount +var relative = __webpack_require__(0).relative -var _stringify2 = _interopRequireDefault(_stringify); +/** + * Module exports. + */ -var _regenerator = __webpack_require__(3); +module.exports = depd -var _regenerator2 = _interopRequireDefault(_regenerator); +/** + * Get the path to base files on. + */ -var _promise = __webpack_require__(4); +var basePath = process.cwd() -var _promise2 = _interopRequireDefault(_promise); +/** + * Determine if namespace is contained in the string. + */ -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function containsNamespace (str, namespace) { + var vals = str.split(/[ ,]+/) + var ns = String(namespace).toLowerCase() -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { - return new (P || (P = _promise2.default))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : new P(function (resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var fs = __webpack_require__(9); -function getJsonData(filename) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() { - var data; - return _regenerator2.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return new _promise2.default(function (resolve, reject) { - fs.readFile(filename, 'utf8', function (err, data) { - if (err) { - console.error(err); - reject('Can`t read file'); - } else { - resolve(data); - } - }); - }); + for (var i = 0; i < vals.length; i++) { + var val = vals[i] - case 2: - data = _context.sent; - _context.prev = 3; - return _context.abrupt("return", JSON.parse(data)); + // namespace contained + if (val && (val === '*' || val.toLowerCase() === ns)) { + return true + } + } - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](3); + return false +} - console.error(_context.t0); - throw new Error('Wrong file format'); +/** + * Convert a data descriptor to accessor descriptor. + */ - case 11: - case "end": - return _context.stop(); - } - } - }, _callee, this, [[3, 7]]); - })); -} -exports.getJsonData = getJsonData; -function writeJsonData(filename, data) { - return new _promise2.default(function (resolve, reject) { - fs.writeFile(filename, (0, _stringify2.default)(data), 'utf8', function (err) { - if (err) { - console.error(err); - reject('Cat`t write file'); - } else { - resolve(); - } - }); - }); +function convertDataDescriptorToAccessor (obj, prop, message) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + var value = descriptor.value + + descriptor.get = function getter () { return value } + + if (descriptor.writable) { + descriptor.set = function setter (val) { return (value = val) } + } + + delete descriptor.value + delete descriptor.writable + + Object.defineProperty(obj, prop, descriptor) + + return descriptor } -exports.writeJsonData = writeJsonData; -function getJsonDataSync(filename) { - var data = fs.readFileSync(filename, 'utf8'); - try { - return JSON.parse(data); - } catch (e) { - console.error(e); - throw new Error('Wrong file format'); - } + +/** + * Create arguments string to keep arity. + */ + +function createArgumentsString (arity) { + var str = '' + + for (var i = 0; i < arity; i++) { + str += ', arg' + i + } + + return str.substr(2) } -exports.getJsonDataSync = getJsonDataSync; -function writeJsonDataSync(filename, data) { - fs.writeFileSync(filename, (0, _stringify2.default)(data)); + +/** + * Create stack string from stack. + */ + +function createStackString (stack) { + var str = this.name + ': ' + this.namespace + + if (this.message) { + str += ' deprecated ' + this.message + } + + for (var i = 0; i < stack.length; i++) { + str += '\n at ' + callSiteToString(stack[i]) + } + + return str } -exports.writeJsonDataSync = writeJsonDataSync; -/***/ }), -/* 7 */ -/***/ (function(module, exports) { +/** + * Create deprecate for namespace in caller. + */ -module.exports = require('express'); +function depd (namespace) { + if (!namespace) { + throw new TypeError('argument namespace is required') + } -/***/ }), -/* 8 */ -/***/ (function(module, exports) { + var stack = getStack() + var site = callSiteLocation(stack[1]) + var file = site[0] -module.exports = require('babel-runtime/core-js/get-iterator'); + function deprecate (message) { + // call to self as log + log.call(deprecate, message) + } -/***/ }), -/* 9 */ -/***/ (function(module, exports) { + deprecate._file = file + deprecate._ignored = isignored(namespace) + deprecate._namespace = namespace + deprecate._traced = istraced(namespace) + deprecate._warned = Object.create(null) -module.exports = require('fs'); + deprecate.function = wrapfunction + deprecate.property = wrapproperty -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { + return deprecate +} -"use strict"; +/** + * Determine if namespace is ignored. + */ +function isignored (namespace) { + /* istanbul ignore next: tested in a child processs */ + if (process.noDeprecation) { + // --no-deprecation support + return true + } -var _regenerator = __webpack_require__(3); + var str = process.env.NO_DEPRECATION || '' -var _regenerator2 = _interopRequireDefault(_regenerator); + // namespace ignored + return containsNamespace(str, namespace) +} -var _stringify = __webpack_require__(2); +/** + * Determine if namespace is traced. + */ -var _stringify2 = _interopRequireDefault(_stringify); +function istraced (namespace) { + /* istanbul ignore next: tested in a child processs */ + if (process.traceDeprecation) { + // --trace-deprecation support + return true + } -var _promise = __webpack_require__(4); + var str = process.env.TRACE_DEPRECATION || '' -var _promise2 = _interopRequireDefault(_promise); + // namespace traced + return containsNamespace(str, namespace) +} -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Display deprecation message. + */ -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { - return new (P || (P = _promise2.default))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : new P(function (resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var child_process_1 = __webpack_require__(18); -var config_1 = __webpack_require__(1); -var anomalyType_1 = __webpack_require__(5); -var metrics_1 = __webpack_require__(13); -var segments_1 = __webpack_require__(11); -var event_stream_1 = __webpack_require__(19); -var learnWorker = child_process_1.spawn('python3', ['worker.py'], { cwd: config_1.ANALYTICS_PATH }); -learnWorker.stdout.pipe(event_stream_1.split()).pipe(event_stream_1.mapSync(function (line) { - onMessage(line); -})); -learnWorker.stderr.on('data', function (data) { - return console.error("worker stderr: " + data); -}); -var taskMap = {}; -var nextTaskId = 0; -function onMessage(data) { - console.log("worker stdout: " + data); - var response = JSON.parse(data); - var taskId = response.__task_id; - // let anomalyName = response.anomaly_name; - // let task = response.task; - var status = response.status; - if (status === 'success' || status === 'failed') { - if (taskId in taskMap) { - var resolver = taskMap[taskId]; - resolver(response); - delete taskMap[taskId]; - } +function log (message, site) { + var haslisteners = eventListenerCount(process, 'deprecation') !== 0 + + // abort early if no destination + if (!haslisteners && this._ignored) { + return + } + + var caller + var callFile + var callSite + var depSite + var i = 0 + var seen = false + var stack = getStack() + var file = this._file + + if (site) { + // provided site + depSite = site + callSite = callSiteLocation(stack[1]) + callSite.name = depSite.name + file = callSite[0] + } else { + // get call site + i = 2 + depSite = callSiteLocation(stack[i]) + callSite = depSite + } + + // get caller of deprecated thing in relation to file + for (; i < stack.length; i++) { + caller = callSiteLocation(stack[i]) + callFile = caller[0] + + if (callFile === file) { + seen = true + } else if (callFile === this._file) { + file = this._file + } else if (seen) { + break } -} -function runTask(task) { - var anomaly = anomalyType_1.loadAnomalyById(task.anomaly_id); - task.metric = { - datasource: anomaly.metric.datasource, - targets: anomaly.metric.targets.map(function (t) { - return metrics_1.getTarget(t); - }) - }; - task.__task_id = nextTaskId++; - var command = (0, _stringify2.default)(task); - learnWorker.stdin.write(command + "\n"); - return new _promise2.default(function (resolve, reject) { - taskMap[task.__task_id] = resolve; - }); -} -function runLearning(anomalyId) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() { - var segments, anomaly, analyticsType, preset, task, result; - return _regenerator2.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - segments = segments_1.getLabeledSegments(anomalyId); + } - anomalyType_1.setAnomalyStatus(anomalyId, 'learning'); - anomaly = anomalyType_1.loadAnomalyById(anomalyId); - analyticsType = "anomalies"; - preset = undefined; + var key = caller + ? depSite.join(':') + '__' + caller.join(':') + : undefined - if (anomaly.name.includes("jumps")) { - analyticsType = "patterns"; - preset = "steps"; - } - if (anomaly.name.includes("cliffs") || anomaly.name.includes("drops")) { - analyticsType = "patterns"; - preset = "cliffs"; - } - if (anomaly.name.includes("peaks")) { - analyticsType = "patterns"; - preset = "peaks"; - } - task = { - type: 'learn', - anomaly_id: anomalyId, - analytics_type: analyticsType, - preset: preset, - segments: segments - }; - _context.next = 11; - return runTask(task); + if (key !== undefined && key in this._warned) { + // already warned + return + } - case 11: - result = _context.sent; + this._warned[key] = true - if (result.status === 'success') { - anomalyType_1.setAnomalyStatus(anomalyId, 'ready'); - segments_1.insertSegments(anomalyId, result.segments, false); - anomalyType_1.setAnomalyPredictionTime(anomalyId, result.last_prediction_time); - } else { - anomalyType_1.setAnomalyStatus(anomalyId, 'failed', result.error); - } + // generate automatic message from call site + var msg = message + if (!msg) { + msg = callSite === depSite || !callSite.name + ? defaultMessage(depSite) + : defaultMessage(callSite) + } - case 13: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); + // emit deprecation if listeners exist + if (haslisteners) { + var err = DeprecationError(this._namespace, msg, stack.slice(i)) + process.emit('deprecation', err) + return + } + + // format and write message + var format = process.stderr.isTTY + ? formatColor + : formatPlain + var output = format.call(this, msg, caller, stack.slice(i)) + process.stderr.write(output + '\n', 'utf8') } -exports.runLearning = runLearning; -function runPredict(anomalyId) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee2() { - var anomaly, analyticsType, preset, task, result, segments, lastOldSegment, firstNewSegment; - return _regenerator2.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - anomaly = anomalyType_1.loadAnomalyById(anomalyId); - analyticsType = "anomalies"; - preset = undefined; - if (anomaly.name.includes("jump")) { - analyticsType = "patterns"; - preset = "steps"; - } - if (anomaly.name.includes("cliffs") || anomaly.name.includes("drops")) { - analyticsType = "patterns"; - preset = "cliffs"; - } - if (anomaly.name.includes("peaks")) { - analyticsType = "patterns"; - preset = "peaks"; - } - task = { - type: 'predict', - anomaly_id: anomalyId, - analytics_type: analyticsType, - preset: preset, - last_prediction_time: anomaly.last_prediction_time - }; - _context2.next = 9; - return runTask(task); +/** + * Get call site location as array. + */ - case 9: - result = _context2.sent; +function callSiteLocation (callSite) { + var file = callSite.getFileName() || '' + var line = callSite.getLineNumber() + var colm = callSite.getColumnNumber() - if (!(result.status === 'failed')) { - _context2.next = 12; - break; - } + if (callSite.isEval()) { + file = callSite.getEvalOrigin() + ', ' + file + } - return _context2.abrupt("return", []); + var site = [file, line, colm] - case 12: - // Merging segments - segments = segments_1.getLabeledSegments(anomalyId); + site.callSite = callSite + site.name = callSite.getFunctionName() - if (segments.length > 0 && result.segments.length > 0) { - lastOldSegment = segments[segments.length - 1]; - firstNewSegment = result.segments[0]; + return site +} - if (firstNewSegment.start <= lastOldSegment.finish) { - result.segments[0].start = lastOldSegment.start; - segments_1.removeSegments(anomalyId, [lastOldSegment.id]); - } - } - segments_1.insertSegments(anomalyId, result.segments, false); - anomalyType_1.setAnomalyPredictionTime(anomalyId, result.last_prediction_time); - return _context2.abrupt("return", result.segments); +/** + * Generate a default message from the site. + */ - case 17: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); -} -exports.runPredict = runPredict; +function defaultMessage (site) { + var callSite = site.callSite + var funcName = site.name -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { + // make useful anonymous name + if (!funcName) { + funcName = '' + } -"use strict"; + var context = callSite.getThis() + var typeName = context && callSite.getTypeName() + // ignore useless type name + if (typeName === 'Object') { + typeName = undefined + } -var _getIterator2 = __webpack_require__(8); + // make useful type name + if (typeName === 'Function') { + typeName = context.name || typeName + } -var _getIterator3 = _interopRequireDefault(_getIterator2); + return typeName && callSite.getMethodName() + ? typeName + '.' + funcName + : funcName +} -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Format deprecation message without color. + */ -Object.defineProperty(exports, "__esModule", { value: true }); -var path = __webpack_require__(0); -var json_1 = __webpack_require__(6); -var config_1 = __webpack_require__(1); -var anomalyType_1 = __webpack_require__(5); -function getLabeledSegments(anomalyId) { - var filename = path.join(config_1.SEGMENTS_PATH, anomalyId + "_labeled.json"); - var segments = []; - try { - segments = json_1.getJsonDataSync(filename); - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; +function formatPlain (msg, caller, stack) { + var timestamp = new Date().toUTCString() - try { - for (var _iterator = (0, _getIterator3.default)(segments), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var segment = _step.value; + var formatted = timestamp + + ' ' + this._namespace + + ' deprecated ' + msg - if (segment.labeled === undefined) { - segment.labeled = false; - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - } catch (e) { - console.error(e.message); + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n at ' + callSiteToString(stack[i]) } - return segments; + + return formatted + } + + if (caller) { + formatted += ' at ' + formatLocation(caller) + } + + return formatted } -exports.getLabeledSegments = getLabeledSegments; -function getPredictedSegments(anomalyId) { - var filename = path.join(config_1.SEGMENTS_PATH, anomalyId + "_segments.json"); - var jsonData = void 0; - try { - jsonData = json_1.getJsonDataSync(filename); - } catch (e) { - console.error(e.message); - jsonData = []; + +/** + * Format deprecation message with color. + */ + +function formatColor (msg, caller, stack) { + var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan + ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow + ' \x1b[0m' + msg + '\x1b[39m' // reset + + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan } - return jsonData; + + return formatted + } + + if (caller) { + formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan + } + + return formatted } -exports.getPredictedSegments = getPredictedSegments; -function saveSegments(anomalyId, segments) { - var filename = path.join(config_1.SEGMENTS_PATH, anomalyId + "_labeled.json"); - try { - return json_1.writeJsonDataSync(filename, segments); - } catch (e) { - console.error(e.message); - throw new Error('Can`t write to db'); - } + +/** + * Format call site location. + */ + +function formatLocation (callSite) { + return relative(basePath, callSite[0]) + + ':' + callSite[1] + + ':' + callSite[2] } -exports.saveSegments = saveSegments; -function insertSegments(anomalyId, addedSegments, labeled) { - // Set status - var info = anomalyType_1.loadAnomalyById(anomalyId); - var segments = getLabeledSegments(anomalyId); - var nextId = info.next_id; - var addedIds = []; + +/** + * Get the stack as array of call sites. + */ + +function getStack () { + var limit = Error.stackTraceLimit + var obj = {} + var prep = Error.prepareStackTrace + + Error.prepareStackTrace = prepareObjectStackTrace + Error.stackTraceLimit = Math.max(10, limit) + + // capture the stack + Error.captureStackTrace(obj) + + // slice this function off the top + var stack = obj.stack.slice(1) + + Error.prepareStackTrace = prep + Error.stackTraceLimit = limit + + return stack +} + +/** + * Capture call site stack from v8. + */ + +function prepareObjectStackTrace (obj, stack) { + return stack +} + +/** + * Return a wrapped function in a deprecation message. + */ + +function wrapfunction (fn, message) { + if (typeof fn !== 'function') { + throw new TypeError('argument fn must be a function') + } + + var args = createArgumentsString(fn.length) + var deprecate = this // eslint-disable-line no-unused-vars + var stack = getStack() + var site = callSiteLocation(stack[1]) + + site.name = fn.name + + // eslint-disable-next-line no-eval + var deprecatedfn = eval('(function (' + args + ') {\n' + + '"use strict"\n' + + 'log.call(deprecate, message, site)\n' + + 'return fn.apply(this, arguments)\n' + + '})') + + return deprecatedfn +} + +/** + * Wrap property in a deprecation message. + */ + +function wrapproperty (obj, prop, message) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + throw new TypeError('argument obj must be object') + } + + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + + if (!descriptor) { + throw new TypeError('must call property on owner object') + } + + if (!descriptor.configurable) { + throw new TypeError('property must be configurable') + } + + var deprecate = this + var stack = getStack() + var site = callSiteLocation(stack[1]) + + // set site name + site.name = prop + + // convert data descriptor + if ('value' in descriptor) { + descriptor = convertDataDescriptorToAccessor(obj, prop, message) + } + + var get = descriptor.get + var set = descriptor.set + + // wrap getter + if (typeof get === 'function') { + descriptor.get = function getter () { + log.call(deprecate, message, site) + return get.apply(this, arguments) + } + } + + // wrap setter + if (typeof set === 'function') { + descriptor.set = function setter () { + log.call(deprecate, message, site) + return set.apply(this, arguments) + } + } + + Object.defineProperty(obj, prop, descriptor) +} + +/** + * Create DeprecationError for deprecation + */ + +function DeprecationError (namespace, message, stack) { + var error = new Error() + var stackString + + Object.defineProperty(error, 'constructor', { + value: DeprecationError + }) + + Object.defineProperty(error, 'message', { + configurable: true, + enumerable: false, + value: message, + writable: true + }) + + Object.defineProperty(error, 'name', { + enumerable: false, + configurable: true, + value: 'DeprecationError', + writable: true + }) + + Object.defineProperty(error, 'namespace', { + configurable: true, + enumerable: false, + value: namespace, + writable: true + }) + + Object.defineProperty(error, 'stack', { + configurable: true, + enumerable: false, + get: function () { + if (stackString !== undefined) { + return stackString + } + + // prepare stack trace + return (stackString = createStackString.call(this, stack)) + }, + set: function setter (val) { + stackString = val + } + }) + + return error +} + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + +module.exports = require("fs"); + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(1); +var core = __webpack_require__(6); +var ctx = __webpack_require__(13); +var hide = __webpack_require__(14); +var has = __webpack_require__(26); +var PROTOTYPE = 'prototype'; + +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var IS_WRAP = type & $export.W; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE]; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; + var key, own, out; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if (own && has(exports, key)) continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function (C) { + var F = function (a, b, c) { + if (this instanceof C) { + switch (arguments.length) { + case 0: return new C(); + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if (IS_PROTO) { + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(9); +module.exports = function (it) { + if (!isObject(it)) throw TypeError(it + ' is not an object!'); + return it; +}; + + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @api private + */ + +var Buffer = __webpack_require__(92).Buffer +var contentDisposition = __webpack_require__(93); +var contentType = __webpack_require__(33); +var deprecate = __webpack_require__(7)('express'); +var flatten = __webpack_require__(40); +var mime = __webpack_require__(52).mime; +var etag = __webpack_require__(94); +var proxyaddr = __webpack_require__(97); +var qs = __webpack_require__(50); +var querystring = __webpack_require__(86); + +/** + * Return strong ETag for `body`. + * + * @param {String|Buffer} body + * @param {String} [encoding] + * @return {String} + * @api private + */ + +exports.etag = createETagGenerator({ weak: false }) + +/** + * Return weak ETag for `body`. + * + * @param {String|Buffer} body + * @param {String} [encoding] + * @return {String} + * @api private + */ + +exports.wetag = createETagGenerator({ weak: true }) + +/** + * Check if `path` looks absolute. + * + * @param {String} path + * @return {Boolean} + * @api private + */ + +exports.isAbsolute = function(path){ + if ('/' === path[0]) return true; + if (':' === path[1] && ('\\' === path[2] || '/' === path[2])) return true; // Windows device path + if ('\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path +}; + +/** + * Flatten the given `arr`. + * + * @param {Array} arr + * @return {Array} + * @api private + */ + +exports.flatten = deprecate.function(flatten, + 'utils.flatten: use array-flatten npm module instead'); + +/** + * Normalize the given `type`, for example "html" becomes "text/html". + * + * @param {String} type + * @return {Object} + * @api private + */ + +exports.normalizeType = function(type){ + return ~type.indexOf('/') + ? acceptParams(type) + : { value: mime.lookup(type), params: {} }; +}; + +/** + * Normalize `types`, for example "html" becomes "text/html". + * + * @param {Array} types + * @return {Array} + * @api private + */ + +exports.normalizeTypes = function(types){ + var ret = []; + + for (var i = 0; i < types.length; ++i) { + ret.push(exports.normalizeType(types[i])); + } + + return ret; +}; + +/** + * Generate Content-Disposition header appropriate for the filename. + * non-ascii filenames are urlencoded and a filename* parameter is added + * + * @param {String} filename + * @return {String} + * @api private + */ + +exports.contentDisposition = deprecate.function(contentDisposition, + 'utils.contentDisposition: use content-disposition npm module instead'); + +/** + * Parse accept params `str` returning an + * object with `.value`, `.quality` and `.params`. + * also includes `.originalIndex` for stable sorting + * + * @param {String} str + * @return {Object} + * @api private + */ + +function acceptParams(str, index) { + var parts = str.split(/ *; */); + var ret = { value: parts[0], quality: 1, params: {}, originalIndex: index }; + + for (var i = 1; i < parts.length; ++i) { + var pms = parts[i].split(/ *= */); + if ('q' === pms[0]) { + ret.quality = parseFloat(pms[1]); + } else { + ret.params[pms[0]] = pms[1]; + } + } + + return ret; +} + +/** + * Compile "etag" value to function. + * + * @param {Boolean|String|Function} val + * @return {Function} + * @api private + */ + +exports.compileETag = function(val) { + var fn; + + if (typeof val === 'function') { + return val; + } + + switch (val) { + case true: + fn = exports.wetag; + break; + case false: + break; + case 'strong': + fn = exports.etag; + break; + case 'weak': + fn = exports.wetag; + break; + default: + throw new TypeError('unknown value for etag function: ' + val); + } + + return fn; +} + +/** + * Compile "query parser" value to function. + * + * @param {String|Function} val + * @return {Function} + * @api private + */ + +exports.compileQueryParser = function compileQueryParser(val) { + var fn; + + if (typeof val === 'function') { + return val; + } + + switch (val) { + case true: + fn = querystring.parse; + break; + case false: + fn = newObject; + break; + case 'extended': + fn = parseExtendedQueryString; + break; + case 'simple': + fn = querystring.parse; + break; + default: + throw new TypeError('unknown value for query parser function: ' + val); + } + + return fn; +} + +/** + * Compile "proxy trust" value to function. + * + * @param {Boolean|String|Number|Array|Function} val + * @return {Function} + * @api private + */ + +exports.compileTrust = function(val) { + if (typeof val === 'function') return val; + + if (val === true) { + // Support plain true/false + return function(){ return true }; + } + + if (typeof val === 'number') { + // Support trusting hop count + return function(a, i){ return i < val }; + } + + if (typeof val === 'string') { + // Support comma-separated values + val = val.split(/ *, */); + } + + return proxyaddr.compile(val || []); +} + +/** + * Set the charset in a given Content-Type string. + * + * @param {String} type + * @param {String} charset + * @return {String} + * @api private + */ + +exports.setCharset = function setCharset(type, charset) { + if (!type || !charset) { + return type; + } + + // parse type + var parsed = contentType.parse(type); + + // set charset + parsed.parameters.charset = charset; + + // format type + return contentType.format(parsed); +}; + +/** + * Create an ETag generator function, generating ETags with + * the given options. + * + * @param {object} options + * @return {function} + * @private + */ + +function createETagGenerator (options) { + return function generateETag (body, encoding) { + var buf = !Buffer.isBuffer(body) + ? Buffer.from(body, encoding) + : body + + return etag(buf, options) + } +} + +/** + * Parse an extended query string with qs. + * + * @return {Object} + * @private + */ + +function parseExtendedQueryString(str) { + return qs.parse(str, { + allowPrototypes: true + }); +} + +/** + * Return new empty object. + * + * @return {Object} + * @api private + */ + +function newObject() { + return {}; +} + + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +// optional / simple context binding +var aFunction = __webpack_require__(25); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(15); +var createDesc = __webpack_require__(99); +module.exports = __webpack_require__(16) ? function (object, key, value) { + return dP.f(object, key, createDesc(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(11); +var IE8_DOM_DEFINE = __webpack_require__(192); +var toPrimitive = __webpack_require__(193); +var dP = Object.defineProperty; + +exports.f = __webpack_require__(16) ? Object.defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +// Thank's IE8 for his funny defineProperty +module.exports = !__webpack_require__(44)(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; +}); + + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { value: true }); +var path = __webpack_require__(0); +var DATA_PATH = path.join(__dirname, '../data'); +exports.DATA_PATH = DATA_PATH; +var ANALYTICS_PATH = path.join(__dirname, '../../src'); +exports.ANALYTICS_PATH = ANALYTICS_PATH; +var ANOMALIES_PATH = path.join(ANALYTICS_PATH, 'anomalies'); +exports.ANOMALIES_PATH = ANOMALIES_PATH; +var SEGMENTS_PATH = path.join(ANALYTICS_PATH, 'segments'); +exports.SEGMENTS_PATH = SEGMENTS_PATH; +var METRICS_PATH = path.join(ANALYTICS_PATH, 'metrics'); +exports.METRICS_PATH = METRICS_PATH; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * bytes + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015 Jed Watson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = bytes; +module.exports.format = format; +module.exports.parse = parse; + +/** + * Module variables. + * @private + */ + +var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; + +var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; + +var map = { + b: 1, + kb: 1 << 10, + mb: 1 << 20, + gb: 1 << 30, + tb: ((1 << 30) * 1024) +}; + +var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb)$/i; + +/** + * Convert the given value in bytes into a string or parse to string to an integer in bytes. + * + * @param {string|number} value + * @param {{ + * case: [string], + * decimalPlaces: [number] + * fixedDecimals: [boolean] + * thousandsSeparator: [string] + * unitSeparator: [string] + * }} [options] bytes options. + * + * @returns {string|number|null} + */ + +function bytes(value, options) { + if (typeof value === 'string') { + return parse(value); + } + + if (typeof value === 'number') { + return format(value, options); + } + + return null; +} + +/** + * Format the given value in bytes into a string. + * + * If the value is negative, it is kept as such. If it is a float, + * it is rounded. + * + * @param {number} value + * @param {object} [options] + * @param {number} [options.decimalPlaces=2] + * @param {number} [options.fixedDecimals=false] + * @param {string} [options.thousandsSeparator=] + * @param {string} [options.unit=] + * @param {string} [options.unitSeparator=] + * + * @returns {string|null} + * @public + */ + +function format(value, options) { + if (!Number.isFinite(value)) { + return null; + } + + var mag = Math.abs(value); + var thousandsSeparator = (options && options.thousandsSeparator) || ''; + var unitSeparator = (options && options.unitSeparator) || ''; + var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2; + var fixedDecimals = Boolean(options && options.fixedDecimals); + var unit = (options && options.unit) || ''; + + if (!unit || !map[unit.toLowerCase()]) { + if (mag >= map.tb) { + unit = 'TB'; + } else if (mag >= map.gb) { + unit = 'GB'; + } else if (mag >= map.mb) { + unit = 'MB'; + } else if (mag >= map.kb) { + unit = 'KB'; + } else { + unit = 'B'; + } + } + + var val = value / map[unit.toLowerCase()]; + var str = val.toFixed(decimalPlaces); + + if (!fixedDecimals) { + str = str.replace(formatDecimalsRegExp, '$1'); + } + + if (thousandsSeparator) { + str = str.replace(formatThousandsRegExp, thousandsSeparator); + } + + return str + unitSeparator + unit; +} + +/** + * Parse the string value into an integer in bytes. + * + * If no unit is given, it is assumed the value is in bytes. + * + * @param {number|string} val + * + * @returns {number|null} + * @public + */ + +function parse(val) { + if (typeof val === 'number' && !isNaN(val)) { + return val; + } + + if (typeof val !== 'string') { + return null; + } + + // Test if the string passed is valid + var results = parseRegExp.exec(val); + var floatValue; + var unit = 'b'; + + if (!results) { + // Nothing could be extracted from the given string + floatValue = parseInt(val, 10); + unit = 'b' + } else { + // Retrieve the value and the unit + floatValue = parseFloat(results[1]); + unit = results[4].toLowerCase(); + } + + return Math.floor(map[unit] * floatValue); +} + + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * statuses + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var codes = __webpack_require__(123) + +/** + * Module exports. + * @public + */ + +module.exports = status + +// status code to message map +status.STATUS_CODES = codes + +// array of status codes +status.codes = populateStatusesMap(status, codes) + +// status codes for redirects +status.redirect = { + 300: true, + 301: true, + 302: true, + 303: true, + 305: true, + 307: true, + 308: true +} + +// status codes for empty bodies +status.empty = { + 204: true, + 205: true, + 304: true +} + +// status codes for when you should retry the request +status.retry = { + 502: true, + 503: true, + 504: true +} + +/** + * Populate the statuses map for given codes. + * @private + */ + +function populateStatusesMap (statuses, codes) { + var arr = [] + + Object.keys(codes).forEach(function forEachCode (code) { + var message = codes[code] + var status = Number(code) + + // Populate properties + statuses[status] = message + statuses[message] = status + statuses[message.toLowerCase()] = status + + // Add to array + arr.push(status) + }) + + return arr +} + +/** + * Get the status code. + * + * Given a number, this will throw if it is not a known status + * code, otherwise the code will be returned. Given a string, + * the string will be parsed for a number and return the code + * if valid, otherwise will lookup the code assuming this is + * the status message. + * + * @param {string|number} code + * @returns {number} + * @public + */ + +function status (code) { + if (typeof code === 'number') { + if (!status[code]) throw new Error('invalid status code: ' + code) + return code + } + + if (typeof code !== 'string') { + throw new TypeError('code must be a number or string') + } + + // '403' + var n = parseInt(code, 10) + if (!isNaN(n)) { + if (!status[n]) throw new Error('invalid status code: ' + n) + return n + } + + n = status[code.toLowerCase()] + if (!n) throw new Error('invalid status message: "' + code + '"') + return n +} + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * type-is + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var typer = __webpack_require__(153) +var mime = __webpack_require__(83) + +/** + * Module exports. + * @public + */ + +module.exports = typeofrequest +module.exports.is = typeis +module.exports.hasBody = hasbody +module.exports.normalize = normalize +module.exports.match = mimeMatch + +/** + * Compare a `value` content-type with `types`. + * Each `type` can be an extension like `html`, + * a special shortcut like `multipart` or `urlencoded`, + * or a mime type. + * + * If no types match, `false` is returned. + * Otherwise, the first `type` that matches is returned. + * + * @param {String} value + * @param {Array} types + * @public + */ + +function typeis (value, types_) { + var i + var types = types_ + + // remove parameters and normalize + var val = tryNormalizeType(value) + + // no type or invalid + if (!val) { + return false + } + + // support flattened arguments + if (types && !Array.isArray(types)) { + types = new Array(arguments.length - 1) + for (i = 0; i < types.length; i++) { + types[i] = arguments[i + 1] + } + } + + // no types, return the content type + if (!types || !types.length) { + return val + } + + var type + for (i = 0; i < types.length; i++) { + if (mimeMatch(normalize(type = types[i]), val)) { + return type[0] === '+' || type.indexOf('*') !== -1 + ? val + : type + } + } + + // no matches + return false +} + +/** + * Check if a request has a request body. + * A request with a body __must__ either have `transfer-encoding` + * or `content-length` headers set. + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3 + * + * @param {Object} request + * @return {Boolean} + * @public + */ + +function hasbody (req) { + return req.headers['transfer-encoding'] !== undefined || + !isNaN(req.headers['content-length']) +} + +/** + * Check if the incoming request contains the "Content-Type" + * header field, and it contains any of the give mime `type`s. + * If there is no request body, `null` is returned. + * If there is no content type, `false` is returned. + * Otherwise, it returns the first `type` that matches. + * + * Examples: + * + * // With Content-Type: text/html; charset=utf-8 + * this.is('html'); // => 'html' + * this.is('text/html'); // => 'text/html' + * this.is('text/*', 'application/json'); // => 'text/html' + * + * // When Content-Type is application/json + * this.is('json', 'urlencoded'); // => 'json' + * this.is('application/json'); // => 'application/json' + * this.is('html', 'application/*'); // => 'application/json' + * + * this.is('html'); // => false + * + * @param {String|Array} types... + * @return {String|false|null} + * @public + */ + +function typeofrequest (req, types_) { + var types = types_ + + // no body + if (!hasbody(req)) { + return null + } + + // support flattened arguments + if (arguments.length > 2) { + types = new Array(arguments.length - 1) + for (var i = 0; i < types.length; i++) { + types[i] = arguments[i + 1] + } + } + + // request content type + var value = req.headers['content-type'] + + return typeis(value, types) +} + +/** + * Normalize a mime type. + * If it's a shorthand, expand it to a valid mime type. + * + * In general, you probably want: + * + * var type = is(req, ['urlencoded', 'json', 'multipart']); + * + * Then use the appropriate body parsers. + * These three are the most common request body types + * and are thus ensured to work. + * + * @param {String} type + * @private + */ + +function normalize (type) { + if (typeof type !== 'string') { + // invalid type + return false + } + + switch (type) { + case 'urlencoded': + return 'application/x-www-form-urlencoded' + case 'multipart': + return 'multipart/*' + } + + if (type[0] === '+') { + // "+json" -> "*/*+json" expando + return '*/*' + type + } + + return type.indexOf('/') === -1 + ? mime.lookup(type) + : type +} + +/** + * Check if `expected` mime type + * matches `actual` mime type with + * wildcard and +suffix support. + * + * @param {String} expected + * @param {String} actual + * @return {Boolean} + * @private + */ + +function mimeMatch (expected, actual) { + // invalid type + if (expected === false) { + return false + } + + // split types + var actualParts = actual.split('/') + var expectedParts = expected.split('/') + + // invalid format + if (actualParts.length !== 2 || expectedParts.length !== 2) { + return false + } + + // validate type + if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) { + return false + } + + // validate suffix wildcard + if (expectedParts[1].substr(0, 2) === '*+') { + return expectedParts[1].length <= actualParts[1].length + 1 && + expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length) + } + + // validate subtype + if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) { + return false + } + + return true +} + +/** + * Normalize a type and remove parameters. + * + * @param {string} value + * @return {string} + * @private + */ + +function normalizeType (value) { + // parse the type + var type = typer.parse(value) + + // remove the parameters + type.parameters = undefined + + // reformat it + return typer.format(type) +} + +/** + * Try to normalize a type and remove parameters. + * + * @param {string} value + * @return {string} + * @private + */ + +function tryNormalizeType (value) { + try { + return normalizeType(value) + } catch (err) { + return null + } +} + + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * parseurl + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var url = __webpack_require__(87) +var parse = url.parse +var Url = url.Url + +/** + * Module exports. + * @public + */ + +module.exports = parseurl +module.exports.original = originalurl + +/** + * Parse the `req` url with memoization. + * + * @param {ServerRequest} req + * @return {Object} + * @public + */ + +function parseurl (req) { + var url = req.url + + if (url === undefined) { + // URL is undefined + return undefined + } + + var parsed = req._parsedUrl + + if (fresh(url, parsed)) { + // Return cached URL parse + return parsed + } + + // Parse the URL + parsed = fastparse(url) + parsed._raw = url + + return (req._parsedUrl = parsed) +}; + +/** + * Parse the `req` original url with fallback and memoization. + * + * @param {ServerRequest} req + * @return {Object} + * @public + */ + +function originalurl (req) { + var url = req.originalUrl + + if (typeof url !== 'string') { + // Fallback + return parseurl(req) + } + + var parsed = req._parsedOriginalUrl + + if (fresh(url, parsed)) { + // Return cached URL parse + return parsed + } + + // Parse the URL + parsed = fastparse(url) + parsed._raw = url + + return (req._parsedOriginalUrl = parsed) +}; + +/** + * Parse the `str` url with fast-path short-cut. + * + * @param {string} str + * @return {Object} + * @private + */ + +function fastparse (str) { + if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) { + return parse(str) + } + + var pathname = str + var query = null + var search = null + + // This takes the regexp from https://github.com/joyent/node/pull/7878 + // Which is /^(\/[^?#\s]*)(\?[^#\s]*)?$/ + // And unrolls it into a for loop + for (var i = 1; i < str.length; i++) { + switch (str.charCodeAt(i)) { + case 0x3f: /* ? */ + if (search === null) { + pathname = str.substring(0, i) + query = str.substring(i + 1) + search = str.substring(i) + } + break + case 0x09: /* \t */ + case 0x0a: /* \n */ + case 0x0c: /* \f */ + case 0x0d: /* \r */ + case 0x20: /* */ + case 0x23: /* # */ + case 0xa0: + case 0xfeff: + return parse(str) + } + } + + var url = Url !== undefined + ? new Url() + : {} + url.path = str + url.href = str + url.pathname = pathname + url.query = query + url.search = search + + return url +} + +/** + * Determine if parsed is still fresh for url. + * + * @param {string} url + * @param {object} parsedUrl + * @return {boolean} + * @private + */ + +function fresh (url, parsedUrl) { + return typeof parsedUrl === 'object' && + parsedUrl !== null && + (Url === undefined || parsedUrl instanceof Url) && + parsedUrl._raw === url +} + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = { "default": __webpack_require__(187), __esModule: true }; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(188); + + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = { "default": __webpack_require__(190), __esModule: true }; + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + +module.exports = function (it) { + if (typeof it != 'function') throw TypeError(it + ' is not a function!'); + return it; +}; + + +/***/ }), +/* 26 */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), +/* 27 */ +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), +/* 28 */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + +var ctx = __webpack_require__(13); +var call = __webpack_require__(205); +var isArrayIter = __webpack_require__(206); +var anObject = __webpack_require__(11); +var toLength = __webpack_require__(60); +var getIterFn = __webpack_require__(107); +var BREAK = {}; +var RETURN = {}; +var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { + var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); + var f = ctx(fn, that, entries ? 2 : 1); + var index = 0; + var length, step, iterator, result; + if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); + // fast case for arrays with default iterator + if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { + result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); + if (result === BREAK || result === RETURN) return result; + } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { + result = call(iterator, f, step.value, entries); + if (result === BREAK || result === RETURN) return result; + } +}; +exports.BREAK = BREAK; +exports.RETURN = RETURN; + + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { value: true }); +var path = __webpack_require__(0); +var json_1 = __webpack_require__(31); +var config_1 = __webpack_require__(17); +var fs = __webpack_require__(8); +var crypto = __webpack_require__(43); +var anomaliesNameToIdMap = {}; +function loadAnomaliesMap() { + var filename = path.join(config_1.ANOMALIES_PATH, "all_anomalies.json"); + anomaliesNameToIdMap = json_1.getJsonDataSync(filename); +} +function saveAnomaliesMap() { + var filename = path.join(config_1.ANOMALIES_PATH, "all_anomalies.json"); + json_1.writeJsonDataSync(filename, anomaliesNameToIdMap); +} +function getAnomalyIdByName(anomalyName) { + loadAnomaliesMap(); + anomalyName = anomalyName.toLowerCase(); + if (anomalyName in anomaliesNameToIdMap) { + return anomaliesNameToIdMap[anomalyName]; + } + return anomalyName; +} +exports.getAnomalyIdByName = getAnomalyIdByName; +function insertAnomaly(anomaly) { + var hashString = anomaly.name + new Date().toString(); + var anomalyId = crypto.createHash('md5').update(hashString).digest('hex'); + anomaliesNameToIdMap[anomaly.name] = anomalyId; + saveAnomaliesMap(); + // return anomalyId + // const anomalyId:AnomalyId = anomaly.name; + var filename = path.join(config_1.ANOMALIES_PATH, anomalyId + ".json"); + if (fs.existsSync(filename)) { + return null; + } + saveAnomaly(anomalyId, anomaly); + return anomalyId; +} +exports.insertAnomaly = insertAnomaly; +function removeAnomaly(anomalyId) { + var filename = path.join(config_1.ANOMALIES_PATH, anomalyId + ".json"); + fs.unlinkSync(filename); +} +exports.removeAnomaly = removeAnomaly; +function saveAnomaly(anomalyId, anomaly) { + var filename = path.join(config_1.ANOMALIES_PATH, anomalyId + ".json"); + return json_1.writeJsonDataSync(filename, anomaly); +} +exports.saveAnomaly = saveAnomaly; +function loadAnomalyById(anomalyId) { + var filename = path.join(config_1.ANOMALIES_PATH, anomalyId + ".json"); + if (!fs.existsSync(filename)) { + return null; + } + return json_1.getJsonDataSync(filename); +} +exports.loadAnomalyById = loadAnomalyById; +function loadAnomalyByName(anomalyName) { + var anomalyId = getAnomalyIdByName(anomalyName); + return loadAnomalyById(anomalyId); +} +exports.loadAnomalyByName = loadAnomalyByName; +function saveAnomalyTypeInfo(info) { + console.log('Saving'); + var filename = path.join(config_1.ANOMALIES_PATH, info.name + ".json"); + if (info.next_id === undefined) { + info.next_id = 0; + } + if (info.last_prediction_time === undefined) { + info.last_prediction_time = 0; + } + return json_1.writeJsonDataSync(filename, info); +} +exports.saveAnomalyTypeInfo = saveAnomalyTypeInfo; +function getAnomalyTypeInfo(name) { + return json_1.getJsonDataSync(path.join(config_1.ANOMALIES_PATH, name + ".json")); +} +exports.getAnomalyTypeInfo = getAnomalyTypeInfo; +function setAnomalyStatus(anomalyId, status, error) { + var info = loadAnomalyById(anomalyId); + info.status = status; + if (error !== undefined) { + info.error = error; + } else { + info.error = ''; + } + saveAnomaly(anomalyId, info); +} +exports.setAnomalyStatus = setAnomalyStatus; +function setAnomalyPredictionTime(anomalyId, lastPredictionTime) { + var info = loadAnomalyById(anomalyId); + info.last_prediction_time = lastPredictionTime; + saveAnomaly(anomalyId, info); +} +exports.setAnomalyPredictionTime = setAnomalyPredictionTime; + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _stringify = __webpack_require__(22); + +var _stringify2 = _interopRequireDefault(_stringify); + +var _regenerator = __webpack_require__(23); + +var _regenerator2 = _interopRequireDefault(_regenerator); + +var _promise = __webpack_require__(24); + +var _promise2 = _interopRequireDefault(_promise); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { + return new (P || (P = _promise2.default))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : new P(function (resolve) { + resolve(result.value); + }).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var fs = __webpack_require__(8); +function getJsonData(filename) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() { + var data; + return _regenerator2.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return new _promise2.default(function (resolve, reject) { + fs.readFile(filename, 'utf8', function (err, data) { + if (err) { + console.error(err); + reject('Can`t read file'); + } else { + resolve(data); + } + }); + }); + + case 2: + data = _context.sent; + _context.prev = 3; + return _context.abrupt("return", JSON.parse(data)); + + case 7: + _context.prev = 7; + _context.t0 = _context["catch"](3); + + console.error(_context.t0); + throw new Error('Wrong file format'); + + case 11: + case "end": + return _context.stop(); + } + } + }, _callee, this, [[3, 7]]); + })); +} +exports.getJsonData = getJsonData; +function writeJsonData(filename, data) { + return new _promise2.default(function (resolve, reject) { + fs.writeFile(filename, (0, _stringify2.default)(data), 'utf8', function (err) { + if (err) { + console.error(err); + reject('Cat`t write file'); + } else { + resolve(); + } + }); + }); +} +exports.writeJsonData = writeJsonData; +function getJsonDataSync(filename) { + var data = fs.readFileSync(filename, 'utf8'); + try { + return JSON.parse(data); + } catch (e) { + console.error(e); + throw new Error('Wrong file format'); + } +} +exports.getJsonDataSync = getJsonDataSync; +function writeJsonDataSync(filename, data) { + fs.writeFileSync(filename, (0, _stringify2.default)(data)); +} +exports.writeJsonDataSync = writeJsonDataSync; + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +module.exports = __webpack_require__(119); + + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * content-type + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1 + * + * parameter = token "=" ( token / quoted-string ) + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" + * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" + * / DIGIT / ALPHA + * ; any VCHAR, except delimiters + * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE + * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text + * obs-text = %x80-FF + * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) + */ +var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g +var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/ +var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ + +/** + * RegExp to match quoted-pair in RFC 7230 sec 3.2.6 + * + * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) + * obs-text = %x80-FF + */ +var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g + +/** + * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6 + */ +var QUOTE_REGEXP = /([\\"])/g + +/** + * RegExp to match type in RFC 7231 sec 3.1.1.1 + * + * media-type = type "/" subtype + * type = token + * subtype = token + */ +var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ + +/** + * Module exports. + * @public + */ + +exports.format = format +exports.parse = parse + +/** + * Format object to media type. + * + * @param {object} obj + * @return {string} + * @public + */ + +function format (obj) { + if (!obj || typeof obj !== 'object') { + throw new TypeError('argument obj is required') + } + + var parameters = obj.parameters + var type = obj.type + + if (!type || !TYPE_REGEXP.test(type)) { + throw new TypeError('invalid type') + } + + var string = type + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + if (!TOKEN_REGEXP.test(param)) { + throw new TypeError('invalid parameter name') + } + + string += '; ' + param + '=' + qstring(parameters[param]) + } + } + + return string +} + +/** + * Parse media type to object. + * + * @param {string|object} string + * @return {Object} + * @public + */ + +function parse (string) { + if (!string) { + throw new TypeError('argument string is required') + } + + // support req/res-like objects as argument + var header = typeof string === 'object' + ? getcontenttype(string) + : string + + if (typeof header !== 'string') { + throw new TypeError('argument string is required to be a string') + } + + var index = header.indexOf(';') + var type = index !== -1 + ? header.substr(0, index).trim() + : header.trim() + + if (!TYPE_REGEXP.test(type)) { + throw new TypeError('invalid media type') + } + + var obj = new ContentType(type.toLowerCase()) + + // parse parameters + if (index !== -1) { + var key + var match + var value + + PARAM_REGEXP.lastIndex = index + + while ((match = PARAM_REGEXP.exec(header))) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(QESC_REGEXP, '$1') + } + + obj.parameters[key] = value + } + + if (index !== header.length) { + throw new TypeError('invalid parameter format') + } + } + + return obj +} + +/** + * Get content-type from req/res objects. + * + * @param {object} + * @return {Object} + * @private + */ + +function getcontenttype (obj) { + var header + + if (typeof obj.getHeader === 'function') { + // res-like + header = obj.getHeader('content-type') + } else if (typeof obj.headers === 'object') { + // req-like + header = obj.headers && obj.headers['content-type'] + } + + if (typeof header !== 'string') { + throw new TypeError('content-type header is missing from object') + } + + return header +} + +/** + * Quote a string if necessary. + * + * @param {string} val + * @return {string} + * @private + */ + +function qstring (val) { + var str = String(val) + + // no need to quote tokens + if (TOKEN_REGEXP.test(str)) { + return str + } + + if (str.length > 0 && !TEXT_REGEXP.test(str)) { + throw new TypeError('invalid parameter value') + } + + return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"' +} + +/** + * Class to represent a content type. + * @private + */ +function ContentType (type) { + this.parameters = Object.create(null) + this.type = type +} + + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * http-errors + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var deprecate = __webpack_require__(7)('http-errors') +var setPrototypeOf = __webpack_require__(35) +var statuses = __webpack_require__(19) +var inherits = __webpack_require__(73) + +/** + * Module exports. + * @public + */ + +module.exports = createError +module.exports.HttpError = createHttpErrorConstructor() + +// Populate exports for all constructors +populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError) + +/** + * Get the code class of a status code. + * @private + */ + +function codeClass (status) { + return Number(String(status).charAt(0) + '00') +} + +/** + * Create a new HTTP Error. + * + * @returns {Error} + * @public + */ + +function createError () { + // so much arity going on ~_~ + var err + var msg + var status = 500 + var props = {} + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i] + if (arg instanceof Error) { + err = arg + status = err.status || err.statusCode || status + continue + } + switch (typeof arg) { + case 'string': + msg = arg + break + case 'number': + status = arg + if (i !== 0) { + deprecate('non-first-argument status code; replace with createError(' + arg + ', ...)') + } + break + case 'object': + props = arg + break + } + } + + if (typeof status === 'number' && (status < 400 || status >= 600)) { + deprecate('non-error status code; use only 4xx or 5xx status codes') + } + + if (typeof status !== 'number' || + (!statuses[status] && (status < 400 || status >= 600))) { + status = 500 + } + + // constructor + var HttpError = createError[status] || createError[codeClass(status)] + + if (!err) { + // create error + err = HttpError + ? new HttpError(msg) + : new Error(msg || statuses[status]) + Error.captureStackTrace(err, createError) + } + + if (!HttpError || !(err instanceof HttpError) || err.status !== status) { + // add properties to generic error + err.expose = status < 500 + err.status = err.statusCode = status + } + + for (var key in props) { + if (key !== 'status' && key !== 'statusCode') { + err[key] = props[key] + } + } + + return err +} + +/** + * Create HTTP error abstract base class. + * @private + */ + +function createHttpErrorConstructor () { + function HttpError () { + throw new TypeError('cannot construct abstract class') + } + + inherits(HttpError, Error) + + return HttpError +} + +/** + * Create a constructor for a client error. + * @private + */ + +function createClientErrorConstructor (HttpError, name, code) { + var className = name.match(/Error$/) ? name : name + 'Error' + + function ClientError (message) { + // create the error object + var msg = message != null ? message : statuses[code] + var err = new Error(msg) + + // capture a stack trace to the construction point + Error.captureStackTrace(err, ClientError) + + // adjust the [[Prototype]] + setPrototypeOf(err, ClientError.prototype) + + // redefine the error message + Object.defineProperty(err, 'message', { + enumerable: true, + configurable: true, + value: msg, + writable: true + }) + + // redefine the error name + Object.defineProperty(err, 'name', { + enumerable: false, + configurable: true, + value: className, + writable: true + }) + + return err + } + + inherits(ClientError, HttpError) + + ClientError.prototype.status = code + ClientError.prototype.statusCode = code + ClientError.prototype.expose = true + + return ClientError +} + +/** + * Create a constructor for a server error. + * @private + */ + +function createServerErrorConstructor (HttpError, name, code) { + var className = name.match(/Error$/) ? name : name + 'Error' + + function ServerError (message) { + // create the error object + var msg = message != null ? message : statuses[code] + var err = new Error(msg) + + // capture a stack trace to the construction point + Error.captureStackTrace(err, ServerError) + + // adjust the [[Prototype]] + setPrototypeOf(err, ServerError.prototype) + + // redefine the error message + Object.defineProperty(err, 'message', { + enumerable: true, + configurable: true, + value: msg, + writable: true + }) + + // redefine the error name + Object.defineProperty(err, 'name', { + enumerable: false, + configurable: true, + value: className, + writable: true + }) + + return err + } + + inherits(ServerError, HttpError) + + ServerError.prototype.status = code + ServerError.prototype.statusCode = code + ServerError.prototype.expose = false + + return ServerError +} + +/** + * Populate the exports object with constructors for every error class. + * @private + */ + +function populateConstructorExports (exports, codes, HttpError) { + codes.forEach(function forEachCode (code) { + var CodeError + var name = toIdentifier(statuses[code]) + + switch (codeClass(code)) { + case 400: + CodeError = createClientErrorConstructor(HttpError, name, code) + break + case 500: + CodeError = createServerErrorConstructor(HttpError, name, code) + break + } + + if (CodeError) { + // export the constructor + exports[code] = CodeError + exports[name] = CodeError + } + }) + + // backwards-compatibility + exports["I'mateapot"] = deprecate.function(exports.ImATeapot, + '"I\'mateapot"; use "ImATeapot" instead') +} + +/** + * Convert a string of words to a JavaScript identifier. + * @private + */ + +function toIdentifier (str) { + return str.split(' ').map(function (token) { + return token.slice(0, 1).toUpperCase() + token.slice(1) + }).join('').replace(/[^ _0-9a-z]/gi, '') +} + + +/***/ }), +/* 35 */ +/***/ (function(module, exports) { + +module.exports = Object.setPrototypeOf || ({__proto__:[]} instanceof Array ? setProtoOf : mixinProperties); + +function setProtoOf(obj, proto) { + obj.__proto__ = proto; + return obj; +} + +function mixinProperties(obj, proto) { + for (var prop in proto) { + if (!obj.hasOwnProperty(prop)) { + obj[prop] = proto[prop]; + } + } + return obj; +} + + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var createError = __webpack_require__(34) +var getBody = __webpack_require__(128) +var iconv = __webpack_require__(78) +var onFinished = __webpack_require__(37) +var zlib = __webpack_require__(152) + +/** + * Module exports. + */ + +module.exports = read + +/** + * Read a request into a buffer and parse. + * + * @param {object} req + * @param {object} res + * @param {function} next + * @param {function} parse + * @param {function} debug + * @param {object} options + * @private + */ + +function read (req, res, next, parse, debug, options) { + var length + var opts = options + var stream + + // flag as parsed + req._body = true + + // read options + var encoding = opts.encoding !== null + ? opts.encoding + : null + var verify = opts.verify + + try { + // get the content stream + stream = contentstream(req, debug, opts.inflate) + length = stream.length + stream.length = undefined + } catch (err) { + return next(err) + } + + // set raw-body options + opts.length = length + opts.encoding = verify + ? null + : encoding + + // assert charset is supported + if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) { + return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: 'charset.unsupported' + })) + } + + // read body + debug('read body') + getBody(stream, opts, function (error, body) { + if (error) { + var _error + + if (error.type === 'encoding.unsupported') { + // echo back charset + _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: 'charset.unsupported' + }) + } else { + // set status code on error + _error = createError(400, error) + } + + // read off entire request + stream.resume() + onFinished(req, function onfinished () { + next(createError(400, _error)) + }) + return + } + + // verify + if (verify) { + try { + debug('verify body') + verify(req, res, body, encoding) + } catch (err) { + next(createError(403, err, { + body: body, + type: err.type || 'entity.verify.failed' + })) + return + } + } + + // parse + var str = body + try { + debug('parse body') + str = typeof body !== 'string' && encoding !== null + ? iconv.decode(body, encoding) + : body + req.body = parse(str) + } catch (err) { + next(createError(400, err, { + body: str, + type: err.type || 'entity.parse.failed' + })) + return + } + + next() + }) +} + +/** + * Get the content stream of the request. + * + * @param {object} req + * @param {function} debug + * @param {boolean} [inflate=true] + * @return {object} + * @api private + */ + +function contentstream (req, debug, inflate) { + var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase() + var length = req.headers['content-length'] + var stream + + debug('content-encoding "%s"', encoding) + + if (inflate === false && encoding !== 'identity') { + throw createError(415, 'content encoding unsupported', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } + + switch (encoding) { + case 'deflate': + stream = zlib.createInflate() + debug('inflate body') + req.pipe(stream) + break + case 'gzip': + stream = zlib.createGunzip() + debug('gunzip body') + req.pipe(stream) + break + case 'identity': + stream = req + stream.length = length + break + default: + throw createError(415, 'unsupported content encoding "' + encoding + '"', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } + + return stream +} + + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * on-finished + * Copyright(c) 2013 Jonathan Ong + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = onFinished +module.exports.isFinished = isFinished + +/** + * Module dependencies. + * @private + */ + +var first = __webpack_require__(151) + +/** + * Variables. + * @private + */ + +/* istanbul ignore next */ +var defer = typeof setImmediate === 'function' + ? setImmediate + : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) } + +/** + * Invoke callback when the response has finished, useful for + * cleaning up resources afterwards. + * + * @param {object} msg + * @param {function} listener + * @return {object} + * @public + */ + +function onFinished(msg, listener) { + if (isFinished(msg) !== false) { + defer(listener, null, msg) + return msg + } + + // attach the listener to the message + attachListener(msg, listener) + + return msg +} + +/** + * Determine if message is already finished. + * + * @param {object} msg + * @return {boolean} + * @public + */ + +function isFinished(msg) { + var socket = msg.socket + + if (typeof msg.finished === 'boolean') { + // OutgoingMessage + return Boolean(msg.finished || (socket && !socket.writable)) + } + + if (typeof msg.complete === 'boolean') { + // IncomingMessage + return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable)) + } + + // don't know + return undefined +} + +/** + * Attach a finished listener to the message. + * + * @param {object} msg + * @param {function} callback + * @private + */ + +function attachFinishedListener(msg, callback) { + var eeMsg + var eeSocket + var finished = false + + function onFinish(error) { + eeMsg.cancel() + eeSocket.cancel() + + finished = true + callback(error) + } + + // finished on first message event + eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish) + + function onSocket(socket) { + // remove listener + msg.removeListener('socket', onSocket) + + if (finished) return + if (eeMsg !== eeSocket) return + + // finished on first socket event + eeSocket = first([[socket, 'error', 'close']], onFinish) + } + + if (msg.socket) { + // socket already assigned + onSocket(msg.socket) + return + } + + // wait for socket to be assigned + msg.on('socket', onSocket) + + if (msg.socket === undefined) { + // node.js 0.8 patch + patchAssignSocket(msg, onSocket) + } +} + +/** + * Attach the listener to the message. + * + * @param {object} msg + * @return {function} + * @private + */ + +function attachListener(msg, listener) { + var attached = msg.__onFinished + + // create a private single listener with queue + if (!attached || !attached.queue) { + attached = msg.__onFinished = createListener(msg) + attachFinishedListener(msg, attached) + } + + attached.queue.push(listener) +} + +/** + * Create listener on message. + * + * @param {object} msg + * @return {function} + * @private + */ + +function createListener(msg) { + function listener(err) { + if (msg.__onFinished === listener) msg.__onFinished = null + if (!listener.queue) return + + var queue = listener.queue + listener.queue = null + + for (var i = 0; i < queue.length; i++) { + queue[i](err, msg) + } + } + + listener.queue = [] + + return listener +} + +/** + * Patch ServerResponse.prototype.assignSocket for node.js 0.8. + * + * @param {ServerResponse} res + * @param {function} callback + * @private + */ + +function patchAssignSocket(res, callback) { + var assignSocket = res.assignSocket + + if (typeof assignSocket !== 'function') return + + // res.on('socket', callback) is broken in 0.8 + res.assignSocket = function _assignSocket(socket) { + assignSocket.call(this, socket) + callback(socket) + } +} + + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * encodeurl + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = encodeUrl + +/** + * RegExp to match non-URL code points, *after* encoding (i.e. not including "%") + * and including invalid escape sequences. + * @private + */ + +var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g + +/** + * RegExp to match unmatched surrogate pair. + * @private + */ + +var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g + +/** + * String to replace unmatched surrogate pair with. + * @private + */ + +var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2' + +/** + * Encode a URL to a percent-encoded form, excluding already-encoded sequences. + * + * This function will take an already-encoded URL and encode all the non-URL + * code points. This function will not encode the "%" character unless it is + * not part of a valid sequence (`%20` will be left as-is, but `%foo` will + * be encoded as `%25foo`). + * + * This encode is meant to be "safe" and does not throw errors. It will try as + * hard as it can to properly encode the given URL, including replacing any raw, + * unpaired surrogate pairs with the Unicode replacement character prior to + * encoding. + * + * @param {string} url + * @return {string} + * @public + */ + +function encodeUrl (url) { + return String(url) + .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE) + .replace(ENCODE_CHARS_REGEXP, encodeURI) +} + + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */ + + + +/** + * Module variables. + * @private + */ + +var matchHtmlRegExp = /["'&<>]/; + +/** + * Module exports. + * @public + */ + +module.exports = escapeHtml; + +/** + * Escape special characters in the given string of html. + * + * @param {string} string The string to escape for inserting into HTML + * @return {string} + * @public + */ + +function escapeHtml(string) { + var str = '' + string; + var match = matchHtmlRegExp.exec(str); + + if (!match) { + return str; + } + + var escape; + var html = ''; + var index = 0; + var lastIndex = 0; + + for (index = match.index; index < str.length; index++) { + switch (str.charCodeAt(index)) { + case 34: // " + escape = '"'; + break; + case 38: // & + escape = '&'; + break; + case 39: // ' + escape = '''; + break; + case 60: // < + escape = '<'; + break; + case 62: // > + escape = '>'; + break; + default: + continue; + } + + if (lastIndex !== index) { + html += str.substring(lastIndex, index); + } + + lastIndex = index + 1; + html += escape; + } + + return lastIndex !== index + ? html + str.substring(lastIndex, index) + : html; +} + + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Expose `arrayFlatten`. + */ +module.exports = arrayFlatten + +/** + * Recursive flatten function with depth. + * + * @param {Array} array + * @param {Array} result + * @param {Number} depth + * @return {Array} + */ +function flattenWithDepth (array, result, depth) { + for (var i = 0; i < array.length; i++) { + var value = array[i] + + if (depth > 0 && Array.isArray(value)) { + flattenWithDepth(value, result, depth - 1) + } else { + result.push(value) + } + } + + return result +} + +/** + * Recursive flatten function. Omitting depth is slightly faster. + * + * @param {Array} array + * @param {Array} result + * @return {Array} + */ +function flattenForever (array, result) { + for (var i = 0; i < array.length; i++) { + var value = array[i] + + if (Array.isArray(value)) { + flattenForever(value, result) + } else { + result.push(value) + } + } + + return result +} + +/** + * Flatten an array, with the ability to define a depth. + * + * @param {Array} array + * @param {Number} depth + * @return {Array} + */ +function arrayFlatten (array, depth) { + if (depth == null) { + return flattenForever(array, []) + } + + return flattenWithDepth(array, [], depth) +} + + +/***/ }), +/* 41 */ +/***/ (function(module, exports) { + +module.exports = require("http"); + +/***/ }), +/* 42 */ +/***/ (function(module, exports) { + +/** + * Merge object b with object a. + * + * var a = { foo: 'bar' } + * , b = { bar: 'baz' }; + * + * merge(a, b); + * // => { foo: 'bar', bar: 'baz' } + * + * @param {Object} a + * @param {Object} b + * @return {Object} + * @api public + */ + +exports = module.exports = function(a, b){ + if (a && b) { + for (var key in b) { + a[key] = b[key]; + } + } + return a; +}; + + +/***/ }), +/* 43 */ +/***/ (function(module, exports) { + +module.exports = require("crypto"); + +/***/ }), +/* 44 */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } +}; + + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + +var def = __webpack_require__(15).f; +var has = __webpack_require__(26); +var TAG = __webpack_require__(3)('toStringTag'); + +module.exports = function (it, tag, stat) { + if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); +}; + + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = { "default": __webpack_require__(214), __esModule: true }; + +/***/ }), +/* 47 */ +/***/ (function(module, exports) { + +module.exports = require("events"); + +/***/ }), +/* 48 */ +/***/ (function(module, exports) { + +module.exports = require("util"); + +/***/ }), +/* 49 */ +/***/ (function(module, exports) { + +module.exports = [["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","兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"]] + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var stringify = __webpack_require__(159); +var parse = __webpack_require__(160); +var formats = __webpack_require__(85); + +module.exports = { + formats: formats, + parse: parse, + stringify: stringify +}; + + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * methods + * Copyright(c) 2013-2014 TJ Holowaychuk + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var http = __webpack_require__(41); + +/** + * Module exports. + * @public + */ + +module.exports = getCurrentNodeMethods() || getBasicNodeMethods(); + +/** + * Get the current Node.js methods. + * @private + */ + +function getCurrentNodeMethods() { + return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) { + return method.toLowerCase(); + }); +} + +/** + * Get the "basic" Node.js methods, a snapshot from Node.js 0.10. + * @private + */ + +function getBasicNodeMethods() { + return [ + 'get', + 'post', + 'put', + 'head', + 'delete', + 'options', + 'trace', + 'copy', + 'lock', + 'mkcol', + 'move', + 'purge', + 'propfind', + 'proppatch', + 'unlock', + 'report', + 'mkactivity', + 'checkout', + 'merge', + 'm-search', + 'notify', + 'subscribe', + 'unsubscribe', + 'patch', + 'search', + 'connect' + ]; +} + + +/***/ }), +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * send + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var createError = __webpack_require__(34) +var debug = __webpack_require__(4)('send') +var deprecate = __webpack_require__(7)('send') +var destroy = __webpack_require__(168) +var encodeUrl = __webpack_require__(38) +var escapeHtml = __webpack_require__(39) +var etag = __webpack_require__(94) +var fresh = __webpack_require__(95) +var fs = __webpack_require__(8) +var mime = __webpack_require__(169) +var ms = __webpack_require__(75) +var onFinished = __webpack_require__(37) +var parseRange = __webpack_require__(96) +var path = __webpack_require__(0) +var statuses = __webpack_require__(19) +var Stream = __webpack_require__(5) +var util = __webpack_require__(48) + +/** + * Path function references. + * @private + */ + +var extname = path.extname +var join = path.join +var normalize = path.normalize +var resolve = path.resolve +var sep = path.sep + +/** + * Regular expression for identifying a bytes Range header. + * @private + */ + +var BYTES_RANGE_REGEXP = /^ *bytes=/ + +/** + * Maximum value allowed for the max age. + * @private + */ + +var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year + +/** + * Regular expression to match a path with a directory up component. + * @private + */ + +var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/ + +/** + * Module exports. + * @public + */ + +module.exports = send +module.exports.mime = mime + +/** + * Return a `SendStream` for `req` and `path`. + * + * @param {object} req + * @param {string} path + * @param {object} [options] + * @return {SendStream} + * @public + */ + +function send (req, path, options) { + return new SendStream(req, path, options) +} + +/** + * Initialize a `SendStream` with the given `path`. + * + * @param {Request} req + * @param {String} path + * @param {object} [options] + * @private + */ + +function SendStream (req, path, options) { + Stream.call(this) + + var opts = options || {} + + this.options = opts + this.path = path + this.req = req + + this._acceptRanges = opts.acceptRanges !== undefined + ? Boolean(opts.acceptRanges) + : true + + this._cacheControl = opts.cacheControl !== undefined + ? Boolean(opts.cacheControl) + : true + + this._etag = opts.etag !== undefined + ? Boolean(opts.etag) + : true + + this._dotfiles = opts.dotfiles !== undefined + ? opts.dotfiles + : 'ignore' + + if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') { + throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"') + } + + this._hidden = Boolean(opts.hidden) + + if (opts.hidden !== undefined) { + deprecate('hidden: use dotfiles: \'' + (this._hidden ? 'allow' : 'ignore') + '\' instead') + } + + // legacy support + if (opts.dotfiles === undefined) { + this._dotfiles = undefined + } + + this._extensions = opts.extensions !== undefined + ? normalizeList(opts.extensions, 'extensions option') + : [] + + this._immutable = opts.immutable !== undefined + ? Boolean(opts.immutable) + : false + + this._index = opts.index !== undefined + ? normalizeList(opts.index, 'index option') + : ['index.html'] + + this._lastModified = opts.lastModified !== undefined + ? Boolean(opts.lastModified) + : true + + this._maxage = opts.maxAge || opts.maxage + this._maxage = typeof this._maxage === 'string' + ? ms(this._maxage) + : Number(this._maxage) + this._maxage = !isNaN(this._maxage) + ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) + : 0 + + this._root = opts.root + ? resolve(opts.root) + : null + + if (!this._root && opts.from) { + this.from(opts.from) + } +} + +/** + * Inherits from `Stream`. + */ + +util.inherits(SendStream, Stream) + +/** + * Enable or disable etag generation. + * + * @param {Boolean} val + * @return {SendStream} + * @api public + */ + +SendStream.prototype.etag = deprecate.function(function etag (val) { + this._etag = Boolean(val) + debug('etag %s', this._etag) + return this +}, 'send.etag: pass etag as option') + +/** + * Enable or disable "hidden" (dot) files. + * + * @param {Boolean} path + * @return {SendStream} + * @api public + */ + +SendStream.prototype.hidden = deprecate.function(function hidden (val) { + this._hidden = Boolean(val) + this._dotfiles = undefined + debug('hidden %s', this._hidden) + return this +}, 'send.hidden: use dotfiles option') + +/** + * Set index `paths`, set to a falsy + * value to disable index support. + * + * @param {String|Boolean|Array} paths + * @return {SendStream} + * @api public + */ + +SendStream.prototype.index = deprecate.function(function index (paths) { + var index = !paths ? [] : normalizeList(paths, 'paths argument') + debug('index %o', paths) + this._index = index + return this +}, 'send.index: pass index as option') + +/** + * Set root `path`. + * + * @param {String} path + * @return {SendStream} + * @api public + */ + +SendStream.prototype.root = function root (path) { + this._root = resolve(String(path)) + debug('root %s', this._root) + return this +} + +SendStream.prototype.from = deprecate.function(SendStream.prototype.root, + 'send.from: pass root as option') + +SendStream.prototype.root = deprecate.function(SendStream.prototype.root, + 'send.root: pass root as option') + +/** + * Set max-age to `maxAge`. + * + * @param {Number} maxAge + * @return {SendStream} + * @api public + */ + +SendStream.prototype.maxage = deprecate.function(function maxage (maxAge) { + this._maxage = typeof maxAge === 'string' + ? ms(maxAge) + : Number(maxAge) + this._maxage = !isNaN(this._maxage) + ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) + : 0 + debug('max-age %d', this._maxage) + return this +}, 'send.maxage: pass maxAge as option') + +/** + * Emit error with `status`. + * + * @param {number} status + * @param {Error} [err] + * @private + */ + +SendStream.prototype.error = function error (status, err) { + // emit if listeners instead of responding + if (hasListeners(this, 'error')) { + return this.emit('error', createError(status, err, { + expose: false + })) + } + + var res = this.res + var msg = statuses[status] || String(status) + var doc = createHtmlDocument('Error', escapeHtml(msg)) + + // clear existing headers + clearHeaders(res) + + // add error headers + if (err && err.headers) { + setHeaders(res, err.headers) + } + + // send basic response + res.statusCode = status + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', Buffer.byteLength(doc)) + res.setHeader('Content-Security-Policy', "default-src 'self'") + res.setHeader('X-Content-Type-Options', 'nosniff') + res.end(doc) +} + +/** + * Check if the pathname ends with "/". + * + * @return {boolean} + * @private + */ + +SendStream.prototype.hasTrailingSlash = function hasTrailingSlash () { + return this.path[this.path.length - 1] === '/' +} + +/** + * Check if this is a conditional GET request. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isConditionalGET = function isConditionalGET () { + return this.req.headers['if-match'] || + this.req.headers['if-unmodified-since'] || + this.req.headers['if-none-match'] || + this.req.headers['if-modified-since'] +} + +/** + * Check if the request preconditions failed. + * + * @return {boolean} + * @private + */ + +SendStream.prototype.isPreconditionFailure = function isPreconditionFailure () { + var req = this.req + var res = this.res + + // if-match + var match = req.headers['if-match'] + if (match) { + var etag = res.getHeader('ETag') + return !etag || (match !== '*' && parseTokenList(match).every(function (match) { + return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag + })) + } + + // if-unmodified-since + var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since']) + if (!isNaN(unmodifiedSince)) { + var lastModified = parseHttpDate(res.getHeader('Last-Modified')) + return isNaN(lastModified) || lastModified > unmodifiedSince + } + + return false +} + +/** + * Strip content-* header fields. + * + * @private + */ + +SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () { + var res = this.res + var headers = getHeaderNames(res) + + for (var i = 0; i < headers.length; i++) { + var header = headers[i] + if (header.substr(0, 8) === 'content-' && header !== 'content-location') { + res.removeHeader(header) + } + } +} + +/** + * Respond with 304 not modified. + * + * @api private + */ + +SendStream.prototype.notModified = function notModified () { + var res = this.res + debug('not modified') + this.removeContentHeaderFields() + res.statusCode = 304 + res.end() +} + +/** + * Raise error that headers already sent. + * + * @api private + */ + +SendStream.prototype.headersAlreadySent = function headersAlreadySent () { + var err = new Error('Can\'t set headers after they are sent.') + debug('headers already sent') + this.error(500, err) +} + +/** + * Check if the request is cacheable, aka + * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}). + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isCachable = function isCachable () { + var statusCode = this.res.statusCode + return (statusCode >= 200 && statusCode < 300) || + statusCode === 304 +} + +/** + * Handle stat() error. + * + * @param {Error} error + * @private + */ + +SendStream.prototype.onStatError = function onStatError (error) { + switch (error.code) { + case 'ENAMETOOLONG': + case 'ENOENT': + case 'ENOTDIR': + this.error(404, error) + break + default: + this.error(500, error) + break + } +} + +/** + * Check if the cache is fresh. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isFresh = function isFresh () { + return fresh(this.req.headers, { + 'etag': this.res.getHeader('ETag'), + 'last-modified': this.res.getHeader('Last-Modified') + }) +} + +/** + * Check if the range is fresh. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isRangeFresh = function isRangeFresh () { + var ifRange = this.req.headers['if-range'] + + if (!ifRange) { + return true + } + + // if-range as etag + if (ifRange.indexOf('"') !== -1) { + var etag = this.res.getHeader('ETag') + return Boolean(etag && ifRange.indexOf(etag) !== -1) + } + + // if-range as modified date + var lastModified = this.res.getHeader('Last-Modified') + return parseHttpDate(lastModified) <= parseHttpDate(ifRange) +} + +/** + * Redirect to path. + * + * @param {string} path + * @private + */ + +SendStream.prototype.redirect = function redirect (path) { + var res = this.res + + if (hasListeners(this, 'directory')) { + this.emit('directory', res, path) + return + } + + if (this.hasTrailingSlash()) { + this.error(403) + return + } + + var loc = encodeUrl(collapseLeadingSlashes(this.path + '/')) + var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + + escapeHtml(loc) + '') + + // redirect + res.statusCode = 301 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', Buffer.byteLength(doc)) + res.setHeader('Content-Security-Policy', "default-src 'self'") + res.setHeader('X-Content-Type-Options', 'nosniff') + res.setHeader('Location', loc) + res.end(doc) +} + +/** + * Pipe to `res. + * + * @param {Stream} res + * @return {Stream} res + * @api public + */ + +SendStream.prototype.pipe = function pipe (res) { + // root path + var root = this._root + + // references + this.res = res + + // decode the path + var path = decode(this.path) + if (path === -1) { + this.error(400) + return res + } + + // null byte(s) + if (~path.indexOf('\0')) { + this.error(400) + return res + } + + var parts + if (root !== null) { + // normalize + if (path) { + path = normalize('.' + sep + path) + } + + // malicious path + if (UP_PATH_REGEXP.test(path)) { + debug('malicious path "%s"', path) + this.error(403) + return res + } + + // explode path parts + parts = path.split(sep) + + // join / normalize from optional root dir + path = normalize(join(root, path)) + root = normalize(root + sep) + } else { + // ".." is malicious without "root" + if (UP_PATH_REGEXP.test(path)) { + debug('malicious path "%s"', path) + this.error(403) + return res + } + + // explode path parts + parts = normalize(path).split(sep) + + // resolve the path + path = resolve(path) + } + + // dotfile handling + if (containsDotFile(parts)) { + var access = this._dotfiles + + // legacy support + if (access === undefined) { + access = parts[parts.length - 1][0] === '.' + ? (this._hidden ? 'allow' : 'ignore') + : 'allow' + } + + debug('%s dotfile "%s"', access, path) + switch (access) { + case 'allow': + break + case 'deny': + this.error(403) + return res + case 'ignore': + default: + this.error(404) + return res + } + } + + // index file support + if (this._index.length && this.hasTrailingSlash()) { + this.sendIndex(path) + return res + } + + this.sendFile(path) + return res +} + +/** + * Transfer `path`. + * + * @param {String} path + * @api public + */ + +SendStream.prototype.send = function send (path, stat) { + var len = stat.size + var options = this.options + var opts = {} + var res = this.res + var req = this.req + var ranges = req.headers.range + var offset = options.start || 0 + + if (headersSent(res)) { + // impossible to send now + this.headersAlreadySent() + return + } + + debug('pipe "%s"', path) + + // set header fields + this.setHeader(path, stat) + + // set content-type + this.type(path) + + // conditional GET support + if (this.isConditionalGET()) { + if (this.isPreconditionFailure()) { + this.error(412) + return + } + + if (this.isCachable() && this.isFresh()) { + this.notModified() + return + } + } + + // adjust len to start/end options + len = Math.max(0, len - offset) + if (options.end !== undefined) { + var bytes = options.end - offset + 1 + if (len > bytes) len = bytes + } + + // Range support + if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) { + // parse + ranges = parseRange(len, ranges, { + combine: true + }) + + // If-Range support + if (!this.isRangeFresh()) { + debug('range stale') + ranges = -2 + } + + // unsatisfiable + if (ranges === -1) { + debug('range unsatisfiable') + + // Content-Range + res.setHeader('Content-Range', contentRange('bytes', len)) + + // 416 Requested Range Not Satisfiable + return this.error(416, { + headers: {'Content-Range': res.getHeader('Content-Range')} + }) + } + + // valid (syntactically invalid/multiple ranges are treated as a regular response) + if (ranges !== -2 && ranges.length === 1) { + debug('range %j', ranges) + + // Content-Range + res.statusCode = 206 + res.setHeader('Content-Range', contentRange('bytes', len, ranges[0])) + + // adjust for requested range + offset += ranges[0].start + len = ranges[0].end - ranges[0].start + 1 + } + } + + // clone options + for (var prop in options) { + opts[prop] = options[prop] + } + + // set read options + opts.start = offset + opts.end = Math.max(offset, offset + len - 1) + + // content-length + res.setHeader('Content-Length', len) + + // HEAD support + if (req.method === 'HEAD') { + res.end() + return + } + + this.stream(path, opts) +} + +/** + * Transfer file for `path`. + * + * @param {String} path + * @api private + */ +SendStream.prototype.sendFile = function sendFile (path) { + var i = 0 + var self = this + + debug('stat "%s"', path) + fs.stat(path, function onstat (err, stat) { + if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) { + // not found, check extensions + return next(err) + } + if (err) return self.onStatError(err) + if (stat.isDirectory()) return self.redirect(path) + self.emit('file', path, stat) + self.send(path, stat) + }) + + function next (err) { + if (self._extensions.length <= i) { + return err + ? self.onStatError(err) + : self.error(404) + } + + var p = path + '.' + self._extensions[i++] + + debug('stat "%s"', p) + fs.stat(p, function (err, stat) { + if (err) return next(err) + if (stat.isDirectory()) return next() + self.emit('file', p, stat) + self.send(p, stat) + }) + } +} + +/** + * Transfer index for `path`. + * + * @param {String} path + * @api private + */ +SendStream.prototype.sendIndex = function sendIndex (path) { + var i = -1 + var self = this + + function next (err) { + if (++i >= self._index.length) { + if (err) return self.onStatError(err) + return self.error(404) + } + + var p = join(path, self._index[i]) + + debug('stat "%s"', p) + fs.stat(p, function (err, stat) { + if (err) return next(err) + if (stat.isDirectory()) return next() + self.emit('file', p, stat) + self.send(p, stat) + }) + } + + next() +} + +/** + * Stream `path` to the response. + * + * @param {String} path + * @param {Object} options + * @api private + */ + +SendStream.prototype.stream = function stream (path, options) { + // TODO: this is all lame, refactor meeee + var finished = false + var self = this + var res = this.res + + // pipe + var stream = fs.createReadStream(path, options) + this.emit('stream', stream) + stream.pipe(res) + + // response finished, done with the fd + onFinished(res, function onfinished () { + finished = true + destroy(stream) + }) + + // error handling code-smell + stream.on('error', function onerror (err) { + // request already finished + if (finished) return + + // clean up stream + finished = true + destroy(stream) + + // error + self.onStatError(err) + }) + + // end + stream.on('end', function onend () { + self.emit('end') + }) +} + +/** + * Set content-type based on `path` + * if it hasn't been explicitly set. + * + * @param {String} path + * @api private + */ + +SendStream.prototype.type = function type (path) { + var res = this.res + + if (res.getHeader('Content-Type')) return + + var type = mime.lookup(path) + + if (!type) { + debug('no content-type') + return + } + + var charset = mime.charsets.lookup(type) + + debug('content-type %s', type) + res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : '')) +} + +/** + * Set response header fields, most + * fields may be pre-defined. + * + * @param {String} path + * @param {Object} stat + * @api private + */ + +SendStream.prototype.setHeader = function setHeader (path, stat) { + var res = this.res + + this.emit('headers', res, path, stat) + + if (this._acceptRanges && !res.getHeader('Accept-Ranges')) { + debug('accept ranges') + res.setHeader('Accept-Ranges', 'bytes') + } + + if (this._cacheControl && !res.getHeader('Cache-Control')) { + var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000) + + if (this._immutable) { + cacheControl += ', immutable' + } + + debug('cache-control %s', cacheControl) + res.setHeader('Cache-Control', cacheControl) + } + + if (this._lastModified && !res.getHeader('Last-Modified')) { + var modified = stat.mtime.toUTCString() + debug('modified %s', modified) + res.setHeader('Last-Modified', modified) + } + + if (this._etag && !res.getHeader('ETag')) { + var val = etag(stat) + debug('etag %s', val) + res.setHeader('ETag', val) + } +} + +/** + * Clear all headers from a response. + * + * @param {object} res + * @private + */ + +function clearHeaders (res) { + var headers = getHeaderNames(res) + + for (var i = 0; i < headers.length; i++) { + res.removeHeader(headers[i]) + } +} + +/** + * Collapse all leading slashes into a single slash + * + * @param {string} str + * @private + */ +function collapseLeadingSlashes (str) { + for (var i = 0; i < str.length; i++) { + if (str[i] !== '/') { + break + } + } + + return i > 1 + ? '/' + str.substr(i) + : str +} + +/** + * Determine if path parts contain a dotfile. + * + * @api private + */ + +function containsDotFile (parts) { + for (var i = 0; i < parts.length; i++) { + var part = parts[i] + if (part.length > 1 && part[0] === '.') { + return true + } + } + + return false +} + +/** + * Create a Content-Range header. + * + * @param {string} type + * @param {number} size + * @param {array} [range] + */ + +function contentRange (type, size, range) { + return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size +} + +/** + * Create a minimal HTML document. + * + * @param {string} title + * @param {string} body + * @private + */ + +function createHtmlDocument (title, body) { + return '\n' + + '\n' + + '\n' + + '\n' + + '' + title + '\n' + + '\n' + + '\n' + + '
' + body + '
\n' + + '\n' + + '\n' +} + +/** + * decodeURIComponent. + * + * Allows V8 to only deoptimize this fn instead of all + * of send(). + * + * @param {String} path + * @api private + */ + +function decode (path) { + try { + return decodeURIComponent(path) + } catch (err) { + return -1 + } +} + +/** + * Get the header names on a respnse. + * + * @param {object} res + * @returns {array[string]} + * @private + */ + +function getHeaderNames (res) { + return typeof res.getHeaderNames !== 'function' + ? Object.keys(res._headers || {}) + : res.getHeaderNames() +} + +/** + * Determine if emitter has listeners of a given type. + * + * The way to do this check is done three different ways in Node.js >= 0.8 + * so this consolidates them into a minimal set using instance methods. + * + * @param {EventEmitter} emitter + * @param {string} type + * @returns {boolean} + * @private + */ + +function hasListeners (emitter, type) { + var count = typeof emitter.listenerCount !== 'function' + ? emitter.listeners(type).length + : emitter.listenerCount(type) + + return count > 0 +} + +/** + * Determine if the response headers have been sent. + * + * @param {object} res + * @returns {boolean} + * @private + */ + +function headersSent (res) { + return typeof res.headersSent !== 'boolean' + ? Boolean(res._header) + : res.headersSent +} + +/** + * Normalize the index option into an array. + * + * @param {boolean|string|array} val + * @param {string} name + * @private + */ + +function normalizeList (val, name) { + var list = [].concat(val || []) + + for (var i = 0; i < list.length; i++) { + if (typeof list[i] !== 'string') { + throw new TypeError(name + ' must be array of strings or false') + } + } + + return list +} + +/** + * Parse an HTTP Date into a number. + * + * @param {string} date + * @private + */ + +function parseHttpDate (date) { + var timestamp = date && Date.parse(date) + + return typeof timestamp === 'number' + ? timestamp + : NaN +} + +/** + * Parse a HTTP token list. + * + * @param {string} str + * @private + */ + +function parseTokenList (str) { + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = str.length; i < len; i++) { + switch (str.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(str.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(str.substring(start, end)) + + return list +} + +/** + * Set an object of headers on a response. + * + * @param {object} res + * @param {object} headers + * @private + */ + +function setHeaders (res, headers) { + var keys = Object.keys(headers) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + res.setHeader(key, headers[key]) + } +} + + +/***/ }), +/* 53 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $at = __webpack_require__(191)(true); + +// 21.1.3.27 String.prototype[@@iterator]() +__webpack_require__(56)(String, 'String', function (iterated) { + this._t = String(iterated); // target + this._i = 0; // next index +// 21.1.5.2.1 %StringIteratorPrototype%.next() +}, function () { + var O = this._t; + var index = this._i; + var point; + if (index >= O.length) return { value: undefined, done: true }; + point = $at(O, index); + this._i += point.length; + return { value: point, done: false }; +}); + + +/***/ }), +/* 54 */ +/***/ (function(module, exports) { + +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + + +/***/ }), +/* 55 */ +/***/ (function(module, exports) { + +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var LIBRARY = __webpack_require__(57); +var $export = __webpack_require__(10); +var redefine = __webpack_require__(194); +var hide = __webpack_require__(14); +var Iterators = __webpack_require__(27); +var $iterCreate = __webpack_require__(195); +var setToStringTag = __webpack_require__(45); +var getPrototypeOf = __webpack_require__(201); +var ITERATOR = __webpack_require__(3)('iterator'); +var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` +var FF_ITERATOR = '@@iterator'; +var KEYS = 'keys'; +var VALUES = 'values'; + +var returnThis = function () { return this; }; + +module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { + $iterCreate(Constructor, NAME, next); + var getMethod = function (kind) { + if (!BUGGY && kind in proto) return proto[kind]; + switch (kind) { + case KEYS: return function keys() { return new Constructor(this, kind); }; + case VALUES: return function values() { return new Constructor(this, kind); }; + } return function entries() { return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator'; + var DEF_VALUES = DEFAULT == VALUES; + var VALUES_BUG = false; + var proto = Base.prototype; + var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; + var $default = $native || getMethod(DEFAULT); + var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; + var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; + var methods, key, IteratorPrototype; + // Fix native + if ($anyNative) { + IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); + if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEF_VALUES && $native && $native.name !== VALUES) { + VALUES_BUG = true; + $default = function values() { return $native.call(this); }; + } + // Define iterator + if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if (DEFAULT) { + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries + }; + if (FORCED) for (key in methods) { + if (!(key in proto)) redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; +}; + + +/***/ }), +/* 57 */ +/***/ (function(module, exports) { + +module.exports = true; + + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(9); +var document = __webpack_require__(1).document; +// typeof document.createElement is 'object' in old IE +var is = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return is ? document.createElement(it) : {}; +}; + + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = __webpack_require__(101); +var defined = __webpack_require__(55); +module.exports = function (it) { + return IObject(defined(it)); +}; + + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.15 ToLength +var toInteger = __webpack_require__(54); +var min = Math.min; +module.exports = function (it) { + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 +}; + + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(102)('keys'); +var uid = __webpack_require__(62); +module.exports = function (key) { + return shared[key] || (shared[key] = uid(key)); +}; + + +/***/ }), +/* 62 */ +/***/ (function(module, exports) { + +var id = 0; +var px = Math.random(); +module.exports = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; + + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(202); +var global = __webpack_require__(1); +var hide = __webpack_require__(14); +var Iterators = __webpack_require__(27); +var TO_STRING_TAG = __webpack_require__(3)('toStringTag'); + +var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' + + 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' + + 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' + + 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' + + 'TextTrackList,TouchList').split(','); + +for (var i = 0; i < DOMIterables.length; i++) { + var NAME = DOMIterables[i]; + var Collection = global[NAME]; + var proto = Collection && Collection.prototype; + if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); + Iterators[NAME] = Iterators.Array; +} + + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + +// getting tag from 19.1.3.6 Object.prototype.toString() +var cof = __webpack_require__(28); +var TAG = __webpack_require__(3)('toStringTag'); +// ES3 wrong here +var ARG = cof(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (e) { /* empty */ } +}; + +module.exports = function (it) { + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T + // builtinTag case + : ARG ? cof(O) + // ES3 arguments fallback + : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; +}; + + +/***/ }), +/* 65 */ +/***/ (function(module, exports) { + +module.exports = function (it, Constructor, name, forbiddenField) { + if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) { + throw TypeError(name + ': incorrect invocation!'); + } return it; +}; + + +/***/ }), +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// 25.4.1.5 NewPromiseCapability(C) +var aFunction = __webpack_require__(25); + +function PromiseCapability(C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); +} + +module.exports.f = function (C) { + return new PromiseCapability(C); +}; + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + +var hide = __webpack_require__(14); +module.exports = function (target, src, safe) { + for (var key in src) { + if (safe && target[key]) target[key] = src[key]; + else hide(target, key, src[key]); + } return target; +}; + + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _regenerator = __webpack_require__(23); + +var _regenerator2 = _interopRequireDefault(_regenerator); + +var _stringify = __webpack_require__(22); + +var _stringify2 = _interopRequireDefault(_stringify); + +var _promise = __webpack_require__(24); + +var _promise2 = _interopRequireDefault(_promise); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { + return new (P || (P = _promise2.default))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : new P(function (resolve) { + resolve(result.value); + }).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var child_process_1 = __webpack_require__(213); +var config_1 = __webpack_require__(17); +var anomalyType_1 = __webpack_require__(30); +var metrics_1 = __webpack_require__(113); +var segments_1 = __webpack_require__(69); +var event_stream_1 = __webpack_require__(216); +var learnWorker = child_process_1.spawn('python3', ['worker.py'], { cwd: config_1.ANALYTICS_PATH }); +learnWorker.stdout.pipe(event_stream_1.split()).pipe(event_stream_1.mapSync(function (line) { + onMessage(line); +})); +learnWorker.stderr.on('data', function (data) { + return console.error("worker stderr: " + data); +}); +var taskMap = {}; +var nextTaskId = 0; +function onMessage(data) { + console.log("worker stdout: " + data); + var response = JSON.parse(data); + var taskId = response.__task_id; + // let anomalyName = response.anomaly_name; + // let task = response.task; + var status = response.status; + if (status === 'success' || status === 'failed') { + if (taskId in taskMap) { + var resolver = taskMap[taskId]; + resolver(response); + delete taskMap[taskId]; + } + } +} +function runTask(task) { + var anomaly = anomalyType_1.loadAnomalyById(task.anomaly_id); + task.metric = { + datasource: anomaly.metric.datasource, + targets: anomaly.metric.targets.map(function (t) { + return metrics_1.getTarget(t); + }) + }; + task.__task_id = nextTaskId++; + var command = (0, _stringify2.default)(task); + learnWorker.stdin.write(command + "\n"); + return new _promise2.default(function (resolve, reject) { + taskMap[task.__task_id] = resolve; + }); +} +function runLearning(anomalyId) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() { + var segments, anomaly, analyticsType, preset, task, result; + return _regenerator2.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + segments = segments_1.getLabeledSegments(anomalyId); + + anomalyType_1.setAnomalyStatus(anomalyId, 'learning'); + anomaly = anomalyType_1.loadAnomalyById(anomalyId); + analyticsType = "anomalies"; + preset = undefined; + + if (anomaly.name.includes("jumps")) { + analyticsType = "patterns"; + preset = "steps"; + } + if (anomaly.name.includes("cliffs") || anomaly.name.includes("drops")) { + analyticsType = "patterns"; + preset = "cliffs"; + } + if (anomaly.name.includes("peaks")) { + analyticsType = "patterns"; + preset = "peaks"; + } + task = { + type: 'learn', + anomaly_id: anomalyId, + analytics_type: analyticsType, + preset: preset, + segments: segments + }; + _context.next = 11; + return runTask(task); + + case 11: + result = _context.sent; + + if (result.status === 'success') { + anomalyType_1.setAnomalyStatus(anomalyId, 'ready'); + segments_1.insertSegments(anomalyId, result.segments, false); + anomalyType_1.setAnomalyPredictionTime(anomalyId, result.last_prediction_time); + } else { + anomalyType_1.setAnomalyStatus(anomalyId, 'failed', result.error); + } + + case 13: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); +} +exports.runLearning = runLearning; +function runPredict(anomalyId) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee2() { + var anomaly, analyticsType, preset, task, result, segments, lastOldSegment, firstNewSegment; + return _regenerator2.default.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + anomaly = anomalyType_1.loadAnomalyById(anomalyId); + analyticsType = "anomalies"; + preset = undefined; + + if (anomaly.name.includes("jump")) { + analyticsType = "patterns"; + preset = "steps"; + } + if (anomaly.name.includes("cliffs") || anomaly.name.includes("drops")) { + analyticsType = "patterns"; + preset = "cliffs"; + } + if (anomaly.name.includes("peaks")) { + analyticsType = "patterns"; + preset = "peaks"; + } + task = { + type: 'predict', + anomaly_id: anomalyId, + analytics_type: analyticsType, + preset: preset, + last_prediction_time: anomaly.last_prediction_time + }; + _context2.next = 9; + return runTask(task); + + case 9: + result = _context2.sent; + + if (!(result.status === 'failed')) { + _context2.next = 12; + break; + } + + return _context2.abrupt("return", []); + + case 12: + // Merging segments + segments = segments_1.getLabeledSegments(anomalyId); + + if (segments.length > 0 && result.segments.length > 0) { + lastOldSegment = segments[segments.length - 1]; + firstNewSegment = result.segments[0]; + + if (firstNewSegment.start <= lastOldSegment.finish) { + result.segments[0].start = lastOldSegment.start; + segments_1.removeSegments(anomalyId, [lastOldSegment.id]); + } + } + segments_1.insertSegments(anomalyId, result.segments, false); + anomalyType_1.setAnomalyPredictionTime(anomalyId, result.last_prediction_time); + return _context2.abrupt("return", result.segments); + + case 17: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); +} +exports.runPredict = runPredict; + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _getIterator2 = __webpack_require__(46); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +Object.defineProperty(exports, "__esModule", { value: true }); +var path = __webpack_require__(0); +var json_1 = __webpack_require__(31); +var config_1 = __webpack_require__(17); +var anomalyType_1 = __webpack_require__(30); +function getLabeledSegments(anomalyId) { + var filename = path.join(config_1.SEGMENTS_PATH, anomalyId + "_labeled.json"); + var segments = []; + try { + segments = json_1.getJsonDataSync(filename); + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(segments), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var segment = _step.value; + + if (segment.labeled === undefined) { + segment.labeled = false; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + } catch (e) { + console.error(e.message); + } + return segments; +} +exports.getLabeledSegments = getLabeledSegments; +function getPredictedSegments(anomalyId) { + var filename = path.join(config_1.SEGMENTS_PATH, anomalyId + "_segments.json"); + var jsonData = void 0; + try { + jsonData = json_1.getJsonDataSync(filename); + } catch (e) { + console.error(e.message); + jsonData = []; + } + return jsonData; +} +exports.getPredictedSegments = getPredictedSegments; +function saveSegments(anomalyId, segments) { + var filename = path.join(config_1.SEGMENTS_PATH, anomalyId + "_labeled.json"); + try { + return json_1.writeJsonDataSync(filename, segments); + } catch (e) { + console.error(e.message); + throw new Error('Can`t write to db'); + } +} +exports.saveSegments = saveSegments; +function insertSegments(anomalyId, addedSegments, labeled) { + // Set status + var info = anomalyType_1.loadAnomalyById(anomalyId); + var segments = getLabeledSegments(anomalyId); + var nextId = info.next_id; + var addedIds = []; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; - try { - for (var _iterator2 = (0, _getIterator3.default)(addedSegments), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var segment = _step2.value; + try { + for (var _iterator2 = (0, _getIterator3.default)(addedSegments), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var segment = _step2.value; + + segment.id = nextId; + segment.labeled = labeled; + addedIds.push(nextId); + nextId++; + segments.push(segment); + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + info.next_id = nextId; + saveSegments(anomalyId, segments); + anomalyType_1.saveAnomaly(anomalyId, info); + return addedIds; +} +exports.insertSegments = insertSegments; +function removeSegments(anomalyId, removedSegments) { + var segments = getLabeledSegments(anomalyId); + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + var _loop = function _loop() { + var segmentId = _step3.value; + + segments = segments.filter(function (el) { + return el.id !== segmentId; + }); + }; + + for (var _iterator3 = (0, _getIterator3.default)(removedSegments), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + _loop(); + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + saveSegments(anomalyId, segments); +} +exports.removeSegments = removeSegments; + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + +var Stream = __webpack_require__(5) + +// through +// +// a stream that does nothing but re-emit the input. +// useful for aggregating a series of changing but not ending streams into one stream) + +exports = module.exports = through +through.through = through + +//create a readable writable stream. + +function through (write, end, opts) { + write = write || function (data) { this.queue(data) } + end = end || function () { this.queue(null) } + + var ended = false, destroyed = false, buffer = [], _ended = false + var stream = new Stream() + stream.readable = stream.writable = true + stream.paused = false + +// stream.autoPause = !(opts && opts.autoPause === false) + stream.autoDestroy = !(opts && opts.autoDestroy === false) + + stream.write = function (data) { + write.call(this, data) + return !stream.paused + } + + function drain() { + while(buffer.length && !stream.paused) { + var data = buffer.shift() + if(null === data) + return stream.emit('end') + else + stream.emit('data', data) + } + } + + stream.queue = stream.push = function (data) { +// console.error(ended) + if(_ended) return stream + if(data === null) _ended = true + buffer.push(data) + drain() + return stream + } + + //this will be registered as the first 'end' listener + //must call destroy next tick, to make sure we're after any + //stream piped from here. + //this is only a problem if end is not emitted synchronously. + //a nicer way to do this is to make sure this is the last listener for 'end' + + stream.on('end', function () { + stream.readable = false + if(!stream.writable && stream.autoDestroy) + process.nextTick(function () { + stream.destroy() + }) + }) + + function _end () { + stream.writable = false + end.call(stream) + if(!stream.readable && stream.autoDestroy) + stream.destroy() + } + + stream.end = function (data) { + if(ended) return + ended = true + if(arguments.length) stream.write(data) + _end() // will emit or queue + return stream + } + + stream.destroy = function () { + if(destroyed) return + destroyed = true + ended = true + buffer.length = 0 + stream.writable = stream.readable = false + stream.emit('close') + return stream + } + + stream.pause = function () { + if(stream.paused) return + stream.paused = true + return stream + } + + stream.resume = function () { + if(stream.paused) { + stream.paused = false + stream.emit('resume') + } + drain() + //may have become paused again, + //as drain emits 'data'. + if(!stream.paused) + stream.emit('drain') + return stream + } + return stream +} + + + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var deprecate = __webpack_require__(7)('body-parser') + +/** + * Cache of loaded parsers. + * @private + */ + +var parsers = Object.create(null) + +/** + * @typedef Parsers + * @type {function} + * @property {function} json + * @property {function} raw + * @property {function} text + * @property {function} urlencoded + */ + +/** + * Module exports. + * @type {Parsers} + */ + +exports = module.exports = deprecate.function(bodyParser, + 'bodyParser: use individual json/urlencoded middlewares') + +/** + * JSON parser. + * @public + */ + +Object.defineProperty(exports, 'json', { + configurable: true, + enumerable: true, + get: createParserGetter('json') +}) + +/** + * Raw parser. + * @public + */ + +Object.defineProperty(exports, 'raw', { + configurable: true, + enumerable: true, + get: createParserGetter('raw') +}) + +/** + * Text parser. + * @public + */ + +Object.defineProperty(exports, 'text', { + configurable: true, + enumerable: true, + get: createParserGetter('text') +}) + +/** + * URL-encoded parser. + * @public + */ + +Object.defineProperty(exports, 'urlencoded', { + configurable: true, + enumerable: true, + get: createParserGetter('urlencoded') +}) + +/** + * Create a middleware to parse json and urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @deprecated + * @public + */ + +function bodyParser (options) { + var opts = {} + + // exclude type option + if (options) { + for (var prop in options) { + if (prop !== 'type') { + opts[prop] = options[prop] + } + } + } + + var _urlencoded = exports.urlencoded(opts) + var _json = exports.json(opts) + + return function bodyParser (req, res, next) { + _json(req, res, function (err) { + if (err) return next(err) + _urlencoded(req, res, next) + }) + } +} + +/** + * Create a getter for loading a parser. + * @private + */ + +function createParserGetter (name) { + return function get () { + return loadParser(name) + } +} + +/** + * Load a parser module. + * @private + */ + +function loadParser (parserName) { + var parser = parsers[parserName] + + if (parser !== undefined) { + return parser + } + + // this uses a switch for static require analysis + switch (parserName) { + case 'json': + parser = __webpack_require__(122) + break + case 'raw': + parser = __webpack_require__(156) + break + case 'text': + parser = __webpack_require__(157) + break + case 'urlencoded': + parser = __webpack_require__(158) + break + } + + // store to prevent invoking require() + return (parsers[parserName] = parser) +} + + +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * depd + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var EventEmitter = __webpack_require__(47).EventEmitter + +/** + * Module exports. + * @public + */ + +lazyProperty(module.exports, 'callSiteToString', function callSiteToString () { + var limit = Error.stackTraceLimit + var obj = {} + var prep = Error.prepareStackTrace + + function prepareObjectStackTrace (obj, stack) { + return stack + } + + Error.prepareStackTrace = prepareObjectStackTrace + Error.stackTraceLimit = 2 + + // capture the stack + Error.captureStackTrace(obj) + + // slice the stack + var stack = obj.stack.slice() + + Error.prepareStackTrace = prep + Error.stackTraceLimit = limit + + return stack[0].toString ? toString : __webpack_require__(120) +}) + +lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () { + return EventEmitter.listenerCount || __webpack_require__(121) +}) + +/** + * Define a lazy property. + */ + +function lazyProperty (obj, prop, getter) { + function get () { + var val = getter() + + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + value: val + }) + + return val + } + + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + get: get + }) +} + +/** + * Call toString() on the obj + */ + +function toString (obj) { + return obj.toString() +} + + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + +try { + var util = __webpack_require__(48); + if (typeof util.inherits !== 'function') throw ''; + module.exports = util.inherits; +} catch (e) { + module.exports = __webpack_require__(124); +} + + +/***/ }), +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { + + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = __webpack_require__(75); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} + + +/***/ }), +/* 75 */ +/***/ (function(module, exports) { + +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + if (ms >= d) { + return Math.round(ms / d) + 'd'; + } + if (ms >= h) { + return Math.round(ms / h) + 'h'; + } + if (ms >= m) { + return Math.round(ms / m) + 'm'; + } + if (ms >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + ' ' + name; + } + return Math.ceil(ms / n) + ' ' + name + 's'; +} + + +/***/ }), +/* 76 */ +/***/ (function(module, exports) { + +module.exports = require("net"); + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * depd + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var EventEmitter = __webpack_require__(47).EventEmitter + +/** + * Module exports. + * @public + */ + +lazyProperty(module.exports, 'callSiteToString', function callSiteToString () { + var limit = Error.stackTraceLimit + var obj = {} + var prep = Error.prepareStackTrace + + function prepareObjectStackTrace (obj, stack) { + return stack + } + + Error.prepareStackTrace = prepareObjectStackTrace + Error.stackTraceLimit = 2 + + // capture the stack + Error.captureStackTrace(obj) + + // slice the stack + var stack = obj.stack.slice() + + Error.prepareStackTrace = prep + Error.stackTraceLimit = limit + + return stack[0].toString ? toString : __webpack_require__(131) +}) + +lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () { + return EventEmitter.listenerCount || __webpack_require__(132) +}) + +/** + * Define a lazy property. + */ + +function lazyProperty (obj, prop, getter) { + function get () { + var val = getter() + + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + value: val + }) + + return val + } + + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + get: get + }) +} + +/** + * Call toString() on the obj + */ + +function toString (obj) { + return obj.toString() +} + + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// Some environments don't have global Buffer (e.g. React Native). +// Solution would be installing npm modules "buffer" and "stream" explicitly. +var Buffer = __webpack_require__(2).Buffer; + +var bomHandling = __webpack_require__(134), + iconv = module.exports; + +// All codecs and aliases are kept here, keyed by encoding name/alias. +// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`. +iconv.encodings = null; + +// Characters emitted in case of error. +iconv.defaultCharUnicode = '�'; +iconv.defaultCharSingleByte = '?'; + +// Public API. +iconv.encode = function encode(str, encoding, options) { + str = "" + (str || ""); // Ensure string. + + var encoder = iconv.getEncoder(encoding, options); + + var res = encoder.write(str); + var trail = encoder.end(); + + return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res; +} + +iconv.decode = function decode(buf, encoding, options) { + if (typeof buf === 'string') { + if (!iconv.skipDecodeWarning) { + console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding'); + iconv.skipDecodeWarning = true; + } + + buf = new Buffer("" + (buf || ""), "binary"); // Ensure buffer. + } + + var decoder = iconv.getDecoder(encoding, options); + + var res = decoder.write(buf); + var trail = decoder.end(); + + return trail ? (res + trail) : res; +} + +iconv.encodingExists = function encodingExists(enc) { + try { + iconv.getCodec(enc); + return true; + } catch (e) { + return false; + } +} + +// Legacy aliases to convert functions +iconv.toEncoding = iconv.encode; +iconv.fromEncoding = iconv.decode; + +// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache. +iconv._codecDataCache = {}; +iconv.getCodec = function getCodec(encoding) { + if (!iconv.encodings) + iconv.encodings = __webpack_require__(135); // Lazy load all encoding definitions. + + // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. + var enc = (''+encoding).toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, ""); + + // Traverse iconv.encodings to find actual codec. + var codecOptions = {}; + while (true) { + var codec = iconv._codecDataCache[enc]; + if (codec) + return codec; + + var codecDef = iconv.encodings[enc]; + + switch (typeof codecDef) { + case "string": // Direct alias to other encoding. + enc = codecDef; + break; + + case "object": // Alias with options. Can be layered. + for (var key in codecDef) + codecOptions[key] = codecDef[key]; + + if (!codecOptions.encodingName) + codecOptions.encodingName = enc; + + enc = codecDef.type; + break; + + case "function": // Codec itself. + if (!codecOptions.encodingName) + codecOptions.encodingName = enc; + + // The codec function must load all tables and return object with .encoder and .decoder methods. + // It'll be called only once (for each different options object). + codec = new codecDef(codecOptions, iconv); + + iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later. + return codec; + + default: + throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')"); + } + } +} + +iconv.getEncoder = function getEncoder(encoding, options) { + var codec = iconv.getCodec(encoding), + encoder = new codec.encoder(options, codec); + + if (codec.bomAware && options && options.addBOM) + encoder = new bomHandling.PrependBOM(encoder, options); + + return encoder; +} + +iconv.getDecoder = function getDecoder(encoding, options) { + var codec = iconv.getCodec(encoding), + decoder = new codec.decoder(options, codec); + + if (codec.bomAware && !(options && options.stripBOM === false)) + decoder = new bomHandling.StripBOM(decoder, options); + + return decoder; +} + + +// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json. +var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node; +if (nodeVer) { + + // Load streaming support in Node v0.10+ + var nodeVerArr = nodeVer.split(".").map(Number); + if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) { + __webpack_require__(149)(iconv); + } + + // Load Node primitive extensions. + __webpack_require__(150)(iconv); +} + +if (false) { + console.error("iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info."); +} + + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + +module.exports = require("string_decoder"); + +/***/ }), +/* 80 */ +/***/ (function(module, exports) { + +module.exports = [["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]] + +/***/ }), +/* 81 */ +/***/ (function(module, exports) { + +module.exports = [["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","龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"]] + +/***/ }), +/* 82 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * unpipe + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = unpipe + +/** + * Determine if there are Node.js pipe-like data listeners. + * @private + */ + +function hasPipeDataListeners(stream) { + var listeners = stream.listeners('data') + + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].name === 'ondata') { + return true + } + } + + return false +} + +/** + * Unpipe a stream from all destinations. + * + * @param {object} stream + * @public + */ + +function unpipe(stream) { + if (!stream) { + throw new TypeError('argument stream is required') + } + + if (typeof stream.unpipe === 'function') { + // new-style + stream.unpipe() + return + } + + // Node.js 0.8 hack + if (!hasPipeDataListeners(stream)) { + return + } + + var listener + var listeners = stream.listeners('close') + + for (var i = 0; i < listeners.length; i++) { + listener = listeners[i] + + if (listener.name !== 'cleanup' && listener.name !== 'onclose') { + continue + } + + // invoke the listener + listener.call(stream) + } +} + + +/***/ }), +/* 83 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var db = __webpack_require__(154) +var extname = __webpack_require__(0).extname + +/** + * Module variables. + * @private + */ + +var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ +var TEXT_TYPE_REGEXP = /^text\//i + +/** + * Module exports. + * @public + */ + +exports.charset = charset +exports.charsets = { lookup: charset } +exports.contentType = contentType +exports.extension = extension +exports.extensions = Object.create(null) +exports.lookup = lookup +exports.types = Object.create(null) + +// Populate the extensions/types maps +populateMaps(exports.extensions, exports.types) + +/** + * Get the default charset for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function charset (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + var mime = match && db[match[1].toLowerCase()] + + if (mime && mime.charset) { + return mime.charset + } + + // default text/* to utf-8 + if (match && TEXT_TYPE_REGEXP.test(match[1])) { + return 'UTF-8' + } + + return false +} + +/** + * Create a full Content-Type header given a MIME type or extension. + * + * @param {string} str + * @return {boolean|string} + */ + +function contentType (str) { + // TODO: should this even be in this module? + if (!str || typeof str !== 'string') { + return false + } + + var mime = str.indexOf('/') === -1 + ? exports.lookup(str) + : str + + if (!mime) { + return false + } + + // TODO: use content-type or other module + if (mime.indexOf('charset') === -1) { + var charset = exports.charset(mime) + if (charset) mime += '; charset=' + charset.toLowerCase() + } + + return mime +} + +/** + * Get the default extension for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function extension (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + + // get extensions + var exts = match && exports.extensions[match[1].toLowerCase()] + + if (!exts || !exts.length) { + return false + } + + return exts[0] +} + +/** + * Lookup the MIME type for a file path/extension. + * + * @param {string} path + * @return {boolean|string} + */ + +function lookup (path) { + if (!path || typeof path !== 'string') { + return false + } + + // get the extension ("ext" or ".ext" or full path) + var extension = extname('x.' + path) + .toLowerCase() + .substr(1) + + if (!extension) { + return false + } + + return exports.types[extension] || false +} + +/** + * Populate the extensions and types maps. + * @private + */ + +function populateMaps (extensions, types) { + // source preference (least -> most) + var preference = ['nginx', 'apache', undefined, 'iana'] + + Object.keys(db).forEach(function forEachMimeType (type) { + var mime = db[type] + var exts = mime.extensions + + if (!exts || !exts.length) { + return + } + + // mime -> extensions + extensions[type] = exts + + // extension -> mime + for (var i = 0; i < exts.length; i++) { + var extension = exts[i] + + if (types[extension]) { + var from = preference.indexOf(db[types[extension]].source) + var to = preference.indexOf(mime.source) + + if (types[extension] !== 'application/octet-stream' && + (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { + // skip the remapping + continue + } + } + + // set the extension -> mime + types[extension] = type + } + }) +} + + +/***/ }), +/* 84 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var has = Object.prototype.hasOwnProperty; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + var obj; + + while (queue.length) { + var item = queue.pop(); + obj = item.obj[item.prop]; + + if (Array.isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } + + return obj; +}; + +exports.arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +exports.merge = function merge(target, source, options) { + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (Array.isArray(target)) { + target.push(source); + } else if (typeof target === 'object') { + if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (Array.isArray(target) && !Array.isArray(source)) { + mergeTarget = exports.arrayToObject(target, options); + } + + if (Array.isArray(target) && Array.isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + if (target[i] && typeof target[i] === 'object') { + target[i] = exports.merge(target[i], item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = exports.merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +exports.assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +exports.decode = function (str) { + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (e) { + return str; + } +}; + +exports.encode = function encode(str) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = typeof str === 'string' ? str : String(str); + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +exports.compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + return compactQueue(queue); +}; + +exports.isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +exports.isBuffer = function isBuffer(obj) { + if (obj === null || typeof obj === 'undefined') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var replace = String.prototype.replace; +var percentTwenties = /%20/g; + +module.exports = { + 'default': 'RFC3986', + formatters: { + RFC1738: function (value) { + return replace.call(value, percentTwenties, '+'); + }, + RFC3986: function (value) { + return value; + } + }, + RFC1738: 'RFC1738', + RFC3986: 'RFC3986' +}; + + +/***/ }), +/* 86 */ +/***/ (function(module, exports) { + +module.exports = require("querystring"); + +/***/ }), +/* 87 */ +/***/ (function(module, exports) { + +module.exports = require("url"); + +/***/ }), +/* 88 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var Route = __webpack_require__(89); +var Layer = __webpack_require__(90); +var methods = __webpack_require__(51); +var mixin = __webpack_require__(42); +var debug = __webpack_require__(4)('express:router'); +var deprecate = __webpack_require__(7)('express'); +var flatten = __webpack_require__(40); +var parseUrl = __webpack_require__(21); +var setPrototypeOf = __webpack_require__(35) + +/** + * Module variables. + * @private + */ + +var objectRegExp = /^\[object (\S+)\]$/; +var slice = Array.prototype.slice; +var toString = Object.prototype.toString; + +/** + * Initialize a new `Router` with the given `options`. + * + * @param {Object} options + * @return {Router} which is an callable function + * @public + */ + +var proto = module.exports = function(options) { + var opts = options || {}; + + function router(req, res, next) { + router.handle(req, res, next); + } + + // mixin Router class functions + setPrototypeOf(router, proto) + + router.params = {}; + router._params = []; + router.caseSensitive = opts.caseSensitive; + router.mergeParams = opts.mergeParams; + router.strict = opts.strict; + router.stack = []; + + return router; +}; + +/** + * Map the given param placeholder `name`(s) to the given callback. + * + * Parameter mapping is used to provide pre-conditions to routes + * which use normalized placeholders. For example a _:user_id_ parameter + * could automatically load a user's information from the database without + * any additional code, + * + * The callback uses the same signature as middleware, the only difference + * being that the value of the placeholder is passed, in this case the _id_ + * of the user. Once the `next()` function is invoked, just like middleware + * it will continue on to execute the route, or subsequent parameter functions. + * + * Just like in middleware, you must either respond to the request or call next + * to avoid stalling the request. + * + * app.param('user_id', function(req, res, next, id){ + * User.find(id, function(err, user){ + * if (err) { + * return next(err); + * } else if (!user) { + * return next(new Error('failed to load user')); + * } + * req.user = user; + * next(); + * }); + * }); + * + * @param {String} name + * @param {Function} fn + * @return {app} for chaining + * @public + */ + +proto.param = function param(name, fn) { + // param logic + if (typeof name === 'function') { + deprecate('router.param(fn): Refactor to use path params'); + this._params.push(name); + return; + } + + // apply param functions + var params = this._params; + var len = params.length; + var ret; + + if (name[0] === ':') { + deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.substr(1)) + ', fn) instead'); + name = name.substr(1); + } + + for (var i = 0; i < len; ++i) { + if (ret = params[i](name, fn)) { + fn = ret; + } + } + + // ensure we end up with a + // middleware function + if ('function' !== typeof fn) { + throw new Error('invalid param() call for ' + name + ', got ' + fn); + } + + (this.params[name] = this.params[name] || []).push(fn); + return this; +}; + +/** + * Dispatch a req, res into the router. + * @private + */ + +proto.handle = function handle(req, res, out) { + var self = this; + + debug('dispatching %s %s', req.method, req.url); + + var idx = 0; + var protohost = getProtohost(req.url) || '' + var removed = ''; + var slashAdded = false; + var paramcalled = {}; + + // store options for OPTIONS request + // only used if OPTIONS request + var options = []; + + // middleware and routes + var stack = self.stack; + + // manage inter-router variables + var parentParams = req.params; + var parentUrl = req.baseUrl || ''; + var done = restore(out, req, 'baseUrl', 'next', 'params'); + + // setup next layer + req.next = next; + + // for options requests, respond with a default if nothing else responds + if (req.method === 'OPTIONS') { + done = wrap(done, function(old, err) { + if (err || options.length === 0) return old(err); + sendOptionsResponse(res, options, old); + }); + } + + // setup basic req values + req.baseUrl = parentUrl; + req.originalUrl = req.originalUrl || req.url; + + next(); + + function next(err) { + var layerError = err === 'route' + ? null + : err; + + // remove added slash + if (slashAdded) { + req.url = req.url.substr(1); + slashAdded = false; + } + + // restore altered req.url + if (removed.length !== 0) { + req.baseUrl = parentUrl; + req.url = protohost + removed + req.url.substr(protohost.length); + removed = ''; + } + + // signal to exit router + if (layerError === 'router') { + setImmediate(done, null) + return + } + + // no more matching layers + if (idx >= stack.length) { + setImmediate(done, layerError); + return; + } + + // get pathname of request + var path = getPathname(req); + + if (path == null) { + return done(layerError); + } + + // find next matching layer + var layer; + var match; + var route; + + while (match !== true && idx < stack.length) { + layer = stack[idx++]; + match = matchLayer(layer, path); + route = layer.route; + + if (typeof match !== 'boolean') { + // hold on to layerError + layerError = layerError || match; + } + + if (match !== true) { + continue; + } + + if (!route) { + // process non-route handlers normally + continue; + } + + if (layerError) { + // routes do not match with a pending error + match = false; + continue; + } + + var method = req.method; + var has_method = route._handles_method(method); + + // build up automatic options response + if (!has_method && method === 'OPTIONS') { + appendMethods(options, route._options()); + } + + // don't even bother matching route + if (!has_method && method !== 'HEAD') { + match = false; + continue; + } + } + + // no match + if (match !== true) { + return done(layerError); + } + + // store route for dispatch on change + if (route) { + req.route = route; + } + + // Capture one-time layer values + req.params = self.mergeParams + ? mergeParams(layer.params, parentParams) + : layer.params; + var layerPath = layer.path; + + // this should be done for the layer + self.process_params(layer, paramcalled, req, res, function (err) { + if (err) { + return next(layerError || err); + } + + if (route) { + return layer.handle_request(req, res, next); + } + + trim_prefix(layer, layerError, layerPath, path); + }); + } + + function trim_prefix(layer, layerError, layerPath, path) { + if (layerPath.length !== 0) { + // Validate path breaks on a path separator + var c = path[layerPath.length] + if (c && c !== '/' && c !== '.') return next(layerError) + + // Trim off the part of the url that matches the route + // middleware (.use stuff) needs to have the path stripped + debug('trim prefix (%s) from url %s', layerPath, req.url); + removed = layerPath; + req.url = protohost + req.url.substr(protohost.length + removed.length); + + // Ensure leading slash + if (!protohost && req.url[0] !== '/') { + req.url = '/' + req.url; + slashAdded = true; + } + + // Setup base URL (no trailing slash) + req.baseUrl = parentUrl + (removed[removed.length - 1] === '/' + ? removed.substring(0, removed.length - 1) + : removed); + } + + debug('%s %s : %s', layer.name, layerPath, req.originalUrl); + + if (layerError) { + layer.handle_error(layerError, req, res, next); + } else { + layer.handle_request(req, res, next); + } + } +}; + +/** + * Process any parameters for the layer. + * @private + */ + +proto.process_params = function process_params(layer, called, req, res, done) { + var params = this.params; + + // captured parameters from the layer, keys and values + var keys = layer.keys; + + // fast track + if (!keys || keys.length === 0) { + return done(); + } + + var i = 0; + var name; + var paramIndex = 0; + var key; + var paramVal; + var paramCallbacks; + var paramCalled; + + // process params in order + // param callbacks can be async + function param(err) { + if (err) { + return done(err); + } + + if (i >= keys.length ) { + return done(); + } + + paramIndex = 0; + key = keys[i++]; + name = key.name; + paramVal = req.params[name]; + paramCallbacks = params[name]; + paramCalled = called[name]; + + if (paramVal === undefined || !paramCallbacks) { + return param(); + } + + // param previously called with same value or error occurred + if (paramCalled && (paramCalled.match === paramVal + || (paramCalled.error && paramCalled.error !== 'route'))) { + // restore value + req.params[name] = paramCalled.value; + + // next param + return param(paramCalled.error); + } + + called[name] = paramCalled = { + error: null, + match: paramVal, + value: paramVal + }; + + paramCallback(); + } + + // single param callbacks + function paramCallback(err) { + var fn = paramCallbacks[paramIndex++]; + + // store updated value + paramCalled.value = req.params[key.name]; + + if (err) { + // store error + paramCalled.error = err; + param(err); + return; + } + + if (!fn) return param(); + + try { + fn(req, res, paramCallback, paramVal, key.name); + } catch (e) { + paramCallback(e); + } + } + + param(); +}; + +/** + * Use the given middleware function, with optional path, defaulting to "/". + * + * Use (like `.all`) will run for any http METHOD, but it will not add + * handlers for those methods so OPTIONS requests will not consider `.use` + * functions even if they could respond. + * + * The other difference is that _route_ path is stripped and not visible + * to the handler function. The main effect of this feature is that mounted + * handlers can operate without any code changes regardless of the "prefix" + * pathname. + * + * @public + */ + +proto.use = function use(fn) { + var offset = 0; + var path = '/'; + + // default path to '/' + // disambiguate router.use([fn]) + if (typeof fn !== 'function') { + var arg = fn; + + while (Array.isArray(arg) && arg.length !== 0) { + arg = arg[0]; + } + + // first arg is the path + if (typeof arg !== 'function') { + offset = 1; + path = fn; + } + } + + var callbacks = flatten(slice.call(arguments, offset)); + + if (callbacks.length === 0) { + throw new TypeError('Router.use() requires a middleware function') + } + + for (var i = 0; i < callbacks.length; i++) { + var fn = callbacks[i]; + + if (typeof fn !== 'function') { + throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn)) + } + + // add the middleware + debug('use %o %s', path, fn.name || '') + + var layer = new Layer(path, { + sensitive: this.caseSensitive, + strict: false, + end: false + }, fn); + + layer.route = undefined; + + this.stack.push(layer); + } + + return this; +}; + +/** + * Create a new Route for the given path. + * + * Each route contains a separate middleware stack and VERB handlers. + * + * See the Route api documentation for details on adding handlers + * and middleware to routes. + * + * @param {String} path + * @return {Route} + * @public + */ + +proto.route = function route(path) { + var route = new Route(path); + + var layer = new Layer(path, { + sensitive: this.caseSensitive, + strict: this.strict, + end: true + }, route.dispatch.bind(route)); + + layer.route = route; + + this.stack.push(layer); + return route; +}; + +// create Router#VERB functions +methods.concat('all').forEach(function(method){ + proto[method] = function(path){ + var route = this.route(path) + route[method].apply(route, slice.call(arguments, 1)); + return this; + }; +}); + +// append methods to a list of methods +function appendMethods(list, addition) { + for (var i = 0; i < addition.length; i++) { + var method = addition[i]; + if (list.indexOf(method) === -1) { + list.push(method); + } + } +} + +// get pathname of request +function getPathname(req) { + try { + return parseUrl(req).pathname; + } catch (err) { + return undefined; + } +} + +// Get get protocol + host for a URL +function getProtohost(url) { + if (typeof url !== 'string' || url.length === 0 || url[0] === '/') { + return undefined + } + + var searchIndex = url.indexOf('?') + var pathLength = searchIndex !== -1 + ? searchIndex + : url.length + var fqdnIndex = url.substr(0, pathLength).indexOf('://') + + return fqdnIndex !== -1 + ? url.substr(0, url.indexOf('/', 3 + fqdnIndex)) + : undefined +} + +// get type for error message +function gettype(obj) { + var type = typeof obj; + + if (type !== 'object') { + return type; + } + + // inspect [[Class]] for objects + return toString.call(obj) + .replace(objectRegExp, '$1'); +} + +/** + * Match path to a layer. + * + * @param {Layer} layer + * @param {string} path + * @private + */ + +function matchLayer(layer, path) { + try { + return layer.match(path); + } catch (err) { + return err; + } +} + +// merge params with parent params +function mergeParams(params, parent) { + if (typeof parent !== 'object' || !parent) { + return params; + } + + // make copy of parent for base + var obj = mixin({}, parent); + + // simple non-numeric merging + if (!(0 in params) || !(0 in parent)) { + return mixin(obj, params); + } + + var i = 0; + var o = 0; + + // determine numeric gaps + while (i in params) { + i++; + } + + while (o in parent) { + o++; + } + + // offset numeric indices in params before merge + for (i--; i >= 0; i--) { + params[i + o] = params[i]; + + // create holes for the merge when necessary + if (i < o) { + delete params[i]; + } + } + + return mixin(obj, params); +} + +// restore obj props after function +function restore(fn, obj) { + var props = new Array(arguments.length - 2); + var vals = new Array(arguments.length - 2); + + for (var i = 0; i < props.length; i++) { + props[i] = arguments[i + 2]; + vals[i] = obj[props[i]]; + } + + return function () { + // restore vals + for (var i = 0; i < props.length; i++) { + obj[props[i]] = vals[i]; + } + + return fn.apply(this, arguments); + }; +} + +// send an OPTIONS response +function sendOptionsResponse(res, options, next) { + try { + var body = options.join(','); + res.set('Allow', body); + res.send(body); + } catch (err) { + next(err); + } +} + +// wrap a function +function wrap(old, fn) { + return function proxy() { + var args = new Array(arguments.length + 1); + + args[0] = old; + for (var i = 0, len = arguments.length; i < len; i++) { + args[i + 1] = arguments[i]; + } + + fn.apply(this, args); + }; +} + + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var debug = __webpack_require__(4)('express:router:route'); +var flatten = __webpack_require__(40); +var Layer = __webpack_require__(90); +var methods = __webpack_require__(51); + +/** + * Module variables. + * @private + */ + +var slice = Array.prototype.slice; +var toString = Object.prototype.toString; + +/** + * Module exports. + * @public + */ + +module.exports = Route; + +/** + * Initialize `Route` with the given `path`, + * + * @param {String} path + * @public + */ + +function Route(path) { + this.path = path; + this.stack = []; + + debug('new %o', path) + + // route handlers for various http methods + this.methods = {}; +} + +/** + * Determine if the route handles a given method. + * @private + */ + +Route.prototype._handles_method = function _handles_method(method) { + if (this.methods._all) { + return true; + } + + var name = method.toLowerCase(); + + if (name === 'head' && !this.methods['head']) { + name = 'get'; + } + + return Boolean(this.methods[name]); +}; + +/** + * @return {Array} supported HTTP methods + * @private + */ + +Route.prototype._options = function _options() { + var methods = Object.keys(this.methods); + + // append automatic head + if (this.methods.get && !this.methods.head) { + methods.push('head'); + } + + for (var i = 0; i < methods.length; i++) { + // make upper case + methods[i] = methods[i].toUpperCase(); + } + + return methods; +}; + +/** + * dispatch req, res into this route + * @private + */ + +Route.prototype.dispatch = function dispatch(req, res, done) { + var idx = 0; + var stack = this.stack; + if (stack.length === 0) { + return done(); + } + + var method = req.method.toLowerCase(); + if (method === 'head' && !this.methods['head']) { + method = 'get'; + } + + req.route = this; + + next(); + + function next(err) { + // signal to exit route + if (err && err === 'route') { + return done(); + } + + // signal to exit router + if (err && err === 'router') { + return done(err) + } + + var layer = stack[idx++]; + if (!layer) { + return done(err); + } + + if (layer.method && layer.method !== method) { + return next(err); + } + + if (err) { + layer.handle_error(err, req, res, next); + } else { + layer.handle_request(req, res, next); + } + } +}; + +/** + * Add a handler for all HTTP verbs to this route. + * + * Behaves just like middleware and can respond or call `next` + * to continue processing. + * + * You can use multiple `.all` call to add multiple handlers. + * + * function check_something(req, res, next){ + * next(); + * }; + * + * function validate_user(req, res, next){ + * next(); + * }; + * + * route + * .all(validate_user) + * .all(check_something) + * .get(function(req, res, next){ + * res.send('hello world'); + * }); + * + * @param {function} handler + * @return {Route} for chaining + * @api public + */ + +Route.prototype.all = function all() { + var handles = flatten(slice.call(arguments)); + + for (var i = 0; i < handles.length; i++) { + var handle = handles[i]; + + if (typeof handle !== 'function') { + var type = toString.call(handle); + var msg = 'Route.all() requires a callback function but got a ' + type + throw new TypeError(msg); + } + + var layer = Layer('/', {}, handle); + layer.method = undefined; + + this.methods._all = true; + this.stack.push(layer); + } + + return this; +}; + +methods.forEach(function(method){ + Route.prototype[method] = function(){ + var handles = flatten(slice.call(arguments)); + + for (var i = 0; i < handles.length; i++) { + var handle = handles[i]; + + if (typeof handle !== 'function') { + var type = toString.call(handle); + var msg = 'Route.' + method + '() requires a callback function but got a ' + type + throw new Error(msg); + } + + debug('%s %o', method, this.path) + + var layer = Layer('/', {}, handle); + layer.method = method; + + this.methods[method] = true; + this.stack.push(layer); + } + + return this; + }; +}); + + +/***/ }), +/* 90 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var pathRegexp = __webpack_require__(164); +var debug = __webpack_require__(4)('express:router:layer'); + +/** + * Module variables. + * @private + */ + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * Module exports. + * @public + */ + +module.exports = Layer; + +function Layer(path, options, fn) { + if (!(this instanceof Layer)) { + return new Layer(path, options, fn); + } + + debug('new %o', path) + var opts = options || {}; + + this.handle = fn; + this.name = fn.name || ''; + this.params = undefined; + this.path = undefined; + this.regexp = pathRegexp(path, this.keys = [], opts); + + // set fast path flags + this.regexp.fast_star = path === '*' + this.regexp.fast_slash = path === '/' && opts.end === false +} + +/** + * Handle the error for the layer. + * + * @param {Error} error + * @param {Request} req + * @param {Response} res + * @param {function} next + * @api private + */ + +Layer.prototype.handle_error = function handle_error(error, req, res, next) { + var fn = this.handle; + + if (fn.length !== 4) { + // not a standard error handler + return next(error); + } + + try { + fn(error, req, res, next); + } catch (err) { + next(err); + } +}; + +/** + * Handle the request for the layer. + * + * @param {Request} req + * @param {Response} res + * @param {function} next + * @api private + */ + +Layer.prototype.handle_request = function handle(req, res, next) { + var fn = this.handle; + + if (fn.length > 3) { + // not a standard request handler + return next(); + } + + try { + fn(req, res, next); + } catch (err) { + next(err); + } +}; + +/** + * Check if this route matches `path`, if so + * populate `.params`. + * + * @param {String} path + * @return {Boolean} + * @api private + */ + +Layer.prototype.match = function match(path) { + var match + + if (path != null) { + // fast path non-ending match for / (any path matches) + if (this.regexp.fast_slash) { + this.params = {} + this.path = '' + return true + } + + // fast path for * (everything matched in a param) + if (this.regexp.fast_star) { + this.params = {'0': decode_param(path)} + this.path = path + return true + } + + // match the path + match = this.regexp.exec(path) + } + + if (!match) { + this.params = undefined; + this.path = undefined; + return false; + } + + // store values + this.params = {}; + this.path = match[0] + + var keys = this.keys; + var params = this.params; + + for (var i = 1; i < match.length; i++) { + var key = keys[i - 1]; + var prop = key.name; + var val = decode_param(match[i]) + + if (val !== undefined || !(hasOwnProperty.call(params, prop))) { + params[prop] = val; + } + } + + return true; +}; + +/** + * Decode param value. + * + * @param {string} val + * @return {string} + * @private + */ + +function decode_param(val) { + if (typeof val !== 'string' || val.length === 0) { + return val; + } + + try { + return decodeURIComponent(val); + } catch (err) { + if (err instanceof URIError) { + err.message = 'Failed to decode param \'' + val + '\''; + err.status = err.statusCode = 400; + } + + throw err; + } +} + + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + */ + +var merge = __webpack_require__(42) +var parseUrl = __webpack_require__(21); +var qs = __webpack_require__(50); + +/** + * @param {Object} options + * @return {Function} + * @api public + */ + +module.exports = function query(options) { + var opts = merge({}, options) + var queryparse = qs.parse; + + if (typeof options === 'function') { + queryparse = options; + opts = undefined; + } + + if (opts !== undefined && opts.allowPrototypes === undefined) { + // back-compat for qs module + opts.allowPrototypes = true; + } + + return function query(req, res, next){ + if (!req.query) { + var val = parseUrl(req).query; + req.query = queryparse(val, opts); + } + + next(); + }; +}; + + +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(2) +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + + +/***/ }), +/* 93 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * content-disposition + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + */ + +module.exports = contentDisposition +module.exports.parse = parse + +/** + * Module dependencies. + */ + +var basename = __webpack_require__(0).basename + +/** + * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%") + */ + +var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g // eslint-disable-line no-control-regex + +/** + * RegExp to match percent encoding escape. + */ + +var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/ +var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g + +/** + * RegExp to match non-latin1 characters. + */ + +var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g + +/** + * RegExp to match quoted-pair in RFC 2616 + * + * quoted-pair = "\" CHAR + * CHAR = + */ + +var QESC_REGEXP = /\\([\u0000-\u007f])/g + +/** + * RegExp to match chars that must be quoted-pair in RFC 2616 + */ + +var QUOTE_REGEXP = /([\\"])/g + +/** + * RegExp for various RFC 2616 grammar + * + * parameter = token "=" ( token | quoted-string ) + * token = 1* + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) + * qdtext = > + * quoted-pair = "\" CHAR + * CHAR = + * TEXT = + * LWS = [CRLF] 1*( SP | HT ) + * CRLF = CR LF + * CR = + * LF = + * SP = + * HT = + * CTL = + * OCTET = + */ + +var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g // eslint-disable-line no-control-regex +var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/ +var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/ + +/** + * RegExp for various RFC 5987 grammar + * + * ext-value = charset "'" [ language ] "'" value-chars + * charset = "UTF-8" / "ISO-8859-1" / mime-charset + * mime-charset = 1*mime-charsetc + * mime-charsetc = ALPHA / DIGIT + * / "!" / "#" / "$" / "%" / "&" + * / "+" / "-" / "^" / "_" / "`" + * / "{" / "}" / "~" + * language = ( 2*3ALPHA [ extlang ] ) + * / 4ALPHA + * / 5*8ALPHA + * extlang = *3( "-" 3ALPHA ) + * value-chars = *( pct-encoded / attr-char ) + * pct-encoded = "%" HEXDIG HEXDIG + * attr-char = ALPHA / DIGIT + * / "!" / "#" / "$" / "&" / "+" / "-" / "." + * / "^" / "_" / "`" / "|" / "~" + */ + +var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/ + +/** + * RegExp for various RFC 6266 grammar + * + * disposition-type = "inline" | "attachment" | disp-ext-type + * disp-ext-type = token + * disposition-parm = filename-parm | disp-ext-parm + * filename-parm = "filename" "=" value + * | "filename*" "=" ext-value + * disp-ext-parm = token "=" value + * | ext-token "=" ext-value + * ext-token = + */ + +var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/ // eslint-disable-line no-control-regex + +/** + * Create an attachment Content-Disposition header. + * + * @param {string} [filename] + * @param {object} [options] + * @param {string} [options.type=attachment] + * @param {string|boolean} [options.fallback=true] + * @return {string} + * @api public + */ + +function contentDisposition (filename, options) { + var opts = options || {} + + // get type + var type = opts.type || 'attachment' + + // get parameters + var params = createparams(filename, opts.fallback) + + // format into string + return format(new ContentDisposition(type, params)) +} + +/** + * Create parameters object from filename and fallback. + * + * @param {string} [filename] + * @param {string|boolean} [fallback=true] + * @return {object} + * @api private + */ + +function createparams (filename, fallback) { + if (filename === undefined) { + return + } + + var params = {} + + if (typeof filename !== 'string') { + throw new TypeError('filename must be a string') + } + + // fallback defaults to true + if (fallback === undefined) { + fallback = true + } + + if (typeof fallback !== 'string' && typeof fallback !== 'boolean') { + throw new TypeError('fallback must be a string or boolean') + } + + if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) { + throw new TypeError('fallback must be ISO-8859-1 string') + } + + // restrict to file base name + var name = basename(filename) + + // determine if name is suitable for quoted string + var isQuotedString = TEXT_REGEXP.test(name) + + // generate fallback name + var fallbackName = typeof fallback !== 'string' + ? fallback && getlatin1(name) + : basename(fallback) + var hasFallback = typeof fallbackName === 'string' && fallbackName !== name + + // set extended filename parameter + if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) { + params['filename*'] = name + } + + // set filename parameter + if (isQuotedString || hasFallback) { + params.filename = hasFallback + ? fallbackName + : name + } + + return params +} + +/** + * Format object to Content-Disposition header. + * + * @param {object} obj + * @param {string} obj.type + * @param {object} [obj.parameters] + * @return {string} + * @api private + */ + +function format (obj) { + var parameters = obj.parameters + var type = obj.type + + if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) { + throw new TypeError('invalid type') + } + + // start with normalized type + var string = String(type).toLowerCase() + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + var val = param.substr(-1) === '*' + ? ustring(parameters[param]) + : qstring(parameters[param]) + + string += '; ' + param + '=' + val + } + } + + return string +} + +/** + * Decode a RFC 6987 field value (gracefully). + * + * @param {string} str + * @return {string} + * @api private + */ + +function decodefield (str) { + var match = EXT_VALUE_REGEXP.exec(str) + + if (!match) { + throw new TypeError('invalid extended field value') + } + + var charset = match[1].toLowerCase() + var encoded = match[2] + var value + + // to binary string + var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode) + + switch (charset) { + case 'iso-8859-1': + value = getlatin1(binary) + break + case 'utf-8': + value = new Buffer(binary, 'binary').toString('utf8') + break + default: + throw new TypeError('unsupported charset in extended field') + } + + return value +} + +/** + * Get ISO-8859-1 version of string. + * + * @param {string} val + * @return {string} + * @api private + */ + +function getlatin1 (val) { + // simple Unicode -> ISO-8859-1 transformation + return String(val).replace(NON_LATIN1_REGEXP, '?') +} + +/** + * Parse Content-Disposition header string. + * + * @param {string} string + * @return {object} + * @api private + */ + +function parse (string) { + if (!string || typeof string !== 'string') { + throw new TypeError('argument string is required') + } + + var match = DISPOSITION_TYPE_REGEXP.exec(string) + + if (!match) { + throw new TypeError('invalid type format') + } + + // normalize type + var index = match[0].length + var type = match[1].toLowerCase() + + var key + var names = [] + var params = {} + var value + + // calculate index to start at + index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';' + ? index - 1 + : index + + // match parameters + while ((match = PARAM_REGEXP.exec(string))) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (names.indexOf(key) !== -1) { + throw new TypeError('invalid duplicate parameter') + } + + names.push(key) + + if (key.indexOf('*') + 1 === key.length) { + // decode extended value + key = key.slice(0, -1) + value = decodefield(value) + + // overwrite existing value + params[key] = value + continue + } + + if (typeof params[key] === 'string') { + continue + } + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(QESC_REGEXP, '$1') + } + + params[key] = value + } + + if (index !== -1 && index !== string.length) { + throw new TypeError('invalid parameter format') + } + + return new ContentDisposition(type, params) +} + +/** + * Percent decode a single character. + * + * @param {string} str + * @param {string} hex + * @return {string} + * @api private + */ + +function pdecode (str, hex) { + return String.fromCharCode(parseInt(hex, 16)) +} + +/** + * Percent encode a single character. + * + * @param {string} char + * @return {string} + * @api private + */ + +function pencode (char) { + var hex = String(char) + .charCodeAt(0) + .toString(16) + .toUpperCase() + return hex.length === 1 + ? '%0' + hex + : '%' + hex +} + +/** + * Quote a string for HTTP. + * + * @param {string} val + * @return {string} + * @api private + */ + +function qstring (val) { + var str = String(val) + + return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"' +} + +/** + * Encode a Unicode string for HTTP (RFC 5987). + * + * @param {string} val + * @return {string} + * @api private + */ + +function ustring (val) { + var str = String(val) + + // percent encode as UTF-8 + var encoded = encodeURIComponent(str) + .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode) + + return 'UTF-8\'\'' + encoded +} + +/** + * Class for parsed Content-Disposition header for v8 optimization + */ + +function ContentDisposition (type, parameters) { + this.type = type + this.parameters = parameters +} + + +/***/ }), +/* 94 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * etag + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = etag + +/** + * Module dependencies. + * @private + */ + +var crypto = __webpack_require__(43) +var Stats = __webpack_require__(8).Stats + +/** + * Module variables. + * @private + */ + +var toString = Object.prototype.toString + +/** + * Generate an entity tag. + * + * @param {Buffer|string} entity + * @return {string} + * @private + */ + +function entitytag (entity) { + if (entity.length === 0) { + // fast-path empty + return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"' + } + + // compute hash of entity + var hash = crypto + .createHash('sha1') + .update(entity, 'utf8') + .digest('base64') + .substring(0, 27) + + // compute length of entity + var len = typeof entity === 'string' + ? Buffer.byteLength(entity, 'utf8') + : entity.length + + return '"' + len.toString(16) + '-' + hash + '"' +} + +/** + * Create a simple ETag. + * + * @param {string|Buffer|Stats} entity + * @param {object} [options] + * @param {boolean} [options.weak] + * @return {String} + * @public + */ + +function etag (entity, options) { + if (entity == null) { + throw new TypeError('argument entity is required') + } + + // support fs.Stats object + var isStats = isstats(entity) + var weak = options && typeof options.weak === 'boolean' + ? options.weak + : isStats + + // validate argument + if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) { + throw new TypeError('argument entity must be string, Buffer, or fs.Stats') + } + + // generate entity tag + var tag = isStats + ? stattag(entity) + : entitytag(entity) + + return weak + ? 'W/' + tag + : tag +} + +/** + * Determine if object is a Stats object. + * + * @param {object} obj + * @return {boolean} + * @api private + */ + +function isstats (obj) { + // genuine fs.Stats + if (typeof Stats === 'function' && obj instanceof Stats) { + return true + } + + // quack quack + return obj && typeof obj === 'object' && + 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' && + 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' && + 'ino' in obj && typeof obj.ino === 'number' && + 'size' in obj && typeof obj.size === 'number' +} + +/** + * Generate a tag for a stat. + * + * @param {object} stat + * @return {string} + * @private + */ + +function stattag (stat) { + var mtime = stat.mtime.getTime().toString(16) + var size = stat.size.toString(16) + + return '"' + size + '-' + mtime + '"' +} + + +/***/ }), +/* 95 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * fresh + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2016-2017 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * RegExp to check for no-cache token in Cache-Control. + * @private + */ + +var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/ + +/** + * Module exports. + * @public + */ + +module.exports = fresh + +/** + * Check freshness of the response using request and response headers. + * + * @param {Object} reqHeaders + * @param {Object} resHeaders + * @return {Boolean} + * @public + */ + +function fresh (reqHeaders, resHeaders) { + // fields + var modifiedSince = reqHeaders['if-modified-since'] + var noneMatch = reqHeaders['if-none-match'] + + // unconditional request + if (!modifiedSince && !noneMatch) { + return false + } + + // Always return stale when Cache-Control: no-cache + // to support end-to-end reload requests + // https://tools.ietf.org/html/rfc2616#section-14.9.4 + var cacheControl = reqHeaders['cache-control'] + if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) { + return false + } + + // if-none-match + if (noneMatch && noneMatch !== '*') { + var etag = resHeaders['etag'] + + if (!etag) { + return false + } + + var etagStale = true + var matches = parseTokenList(noneMatch) + for (var i = 0; i < matches.length; i++) { + var match = matches[i] + if (match === etag || match === 'W/' + etag || 'W/' + match === etag) { + etagStale = false + break + } + } + + if (etagStale) { + return false + } + } + + // if-modified-since + if (modifiedSince) { + var lastModified = resHeaders['last-modified'] + var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince)) + + if (modifiedStale) { + return false + } + } + + return true +} + +/** + * Parse an HTTP Date into a number. + * + * @param {string} date + * @private + */ + +function parseHttpDate (date) { + var timestamp = date && Date.parse(date) + + // istanbul ignore next: guard against date.js Date.parse patching + return typeof timestamp === 'number' + ? timestamp + : NaN +} + +/** + * Parse a HTTP token list. + * + * @param {string} str + * @private + */ + +function parseTokenList (str) { + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = str.length; i < len; i++) { + switch (str.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(str.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(str.substring(start, end)) + + return list +} + + +/***/ }), +/* 96 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * range-parser + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = rangeParser + +/** + * Parse "Range" header `str` relative to the given file `size`. + * + * @param {Number} size + * @param {String} str + * @param {Object} [options] + * @return {Array} + * @public + */ + +function rangeParser (size, str, options) { + var index = str.indexOf('=') + + if (index === -1) { + return -2 + } + + // split the range string + var arr = str.slice(index + 1).split(',') + var ranges = [] + + // add ranges type + ranges.type = str.slice(0, index) + + // parse all ranges + for (var i = 0; i < arr.length; i++) { + var range = arr[i].split('-') + var start = parseInt(range[0], 10) + var end = parseInt(range[1], 10) + + // -nnn + if (isNaN(start)) { + start = size - end + end = size - 1 + // nnn- + } else if (isNaN(end)) { + end = size - 1 + } + + // limit last-byte-pos to current length + if (end > size - 1) { + end = size - 1 + } + + // invalid or unsatisifiable + if (isNaN(start) || isNaN(end) || start > end || start < 0) { + continue + } + + // add range + ranges.push({ + start: start, + end: end + }) + } + + if (ranges.length < 1) { + // unsatisifiable + return -1 + } + + return options && options.combine + ? combineRanges(ranges) + : ranges +} + +/** + * Combine overlapping & adjacent ranges. + * @private + */ + +function combineRanges (ranges) { + var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart) + + for (var j = 0, i = 1; i < ordered.length; i++) { + var range = ordered[i] + var current = ordered[j] + + if (range.start > current.end + 1) { + // next range + ordered[++j] = range + } else if (range.end > current.end) { + // extend range + current.end = range.end + current.index = Math.min(current.index, range.index) + } + } + + // trim ordered array + ordered.length = j + 1 + + // generate combined range + var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex) + + // copy ranges type + combined.type = ranges.type + + return combined +} + +/** + * Map function to add index value to ranges. + * @private + */ + +function mapWithIndex (range, index) { + return { + start: range.start, + end: range.end, + index: index + } +} + +/** + * Map function to remove index value from ranges. + * @private + */ + +function mapWithoutIndex (range) { + return { + start: range.start, + end: range.end + } +} + +/** + * Sort function to sort ranges by index. + * @private + */ + +function sortByRangeIndex (a, b) { + return a.index - b.index +} + +/** + * Sort function to sort ranges by start position. + * @private + */ + +function sortByRangeStart (a, b) { + return a.start - b.start +} + + +/***/ }), +/* 97 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * proxy-addr + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = proxyaddr +module.exports.all = alladdrs +module.exports.compile = compile + +/** + * Module dependencies. + * @private + */ + +var forwarded = __webpack_require__(171) +var ipaddr = __webpack_require__(172) + +/** + * Variables. + * @private + */ + +var DIGIT_REGEXP = /^[0-9]+$/ +var isip = ipaddr.isValid +var parseip = ipaddr.parse + +/** + * Pre-defined IP ranges. + * @private + */ + +var IP_RANGES = { + linklocal: ['169.254.0.0/16', 'fe80::/10'], + loopback: ['127.0.0.1/8', '::1/128'], + uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7'] +} + +/** + * Get all addresses in the request, optionally stopping + * at the first untrusted. + * + * @param {Object} request + * @param {Function|Array|String} [trust] + * @public + */ + +function alladdrs (req, trust) { + // get addresses + var addrs = forwarded(req) + + if (!trust) { + // Return all addresses + return addrs + } + + if (typeof trust !== 'function') { + trust = compile(trust) + } + + for (var i = 0; i < addrs.length - 1; i++) { + if (trust(addrs[i], i)) continue + + addrs.length = i + 1 + } + + return addrs +} + +/** + * Compile argument into trust function. + * + * @param {Array|String} val + * @private + */ + +function compile (val) { + if (!val) { + throw new TypeError('argument is required') + } + + var trust + + if (typeof val === 'string') { + trust = [val] + } else if (Array.isArray(val)) { + trust = val.slice() + } else { + throw new TypeError('unsupported trust argument') + } + + for (var i = 0; i < trust.length; i++) { + val = trust[i] + + if (!IP_RANGES.hasOwnProperty(val)) { + continue + } + + // Splice in pre-defined range + val = IP_RANGES[val] + trust.splice.apply(trust, [i, 1].concat(val)) + i += val.length - 1 + } + + return compileTrust(compileRangeSubnets(trust)) +} + +/** + * Compile `arr` elements into range subnets. + * + * @param {Array} arr + * @private + */ + +function compileRangeSubnets (arr) { + var rangeSubnets = new Array(arr.length) + + for (var i = 0; i < arr.length; i++) { + rangeSubnets[i] = parseipNotation(arr[i]) + } + + return rangeSubnets +} + +/** + * Compile range subnet array into trust function. + * + * @param {Array} rangeSubnets + * @private + */ + +function compileTrust (rangeSubnets) { + // Return optimized function based on length + var len = rangeSubnets.length + return len === 0 + ? trustNone + : len === 1 + ? trustSingle(rangeSubnets[0]) + : trustMulti(rangeSubnets) +} + +/** + * Parse IP notation string into range subnet. + * + * @param {String} note + * @private + */ + +function parseipNotation (note) { + var pos = note.lastIndexOf('/') + var str = pos !== -1 + ? note.substring(0, pos) + : note + + if (!isip(str)) { + throw new TypeError('invalid IP address: ' + str) + } + + var ip = parseip(str) + + if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) { + // Store as IPv4 + ip = ip.toIPv4Address() + } + + var max = ip.kind() === 'ipv6' + ? 128 + : 32 + + var range = pos !== -1 + ? note.substring(pos + 1, note.length) + : null + + if (range === null) { + range = max + } else if (DIGIT_REGEXP.test(range)) { + range = parseInt(range, 10) + } else if (ip.kind() === 'ipv4' && isip(range)) { + range = parseNetmask(range) + } else { + range = null + } + + if (range <= 0 || range > max) { + throw new TypeError('invalid range on address: ' + note) + } + + return [ip, range] +} + +/** + * Parse netmask string into CIDR range. + * + * @param {String} netmask + * @private + */ + +function parseNetmask (netmask) { + var ip = parseip(netmask) + var kind = ip.kind() + + return kind === 'ipv4' + ? ip.prefixLengthFromSubnetMask() + : null +} + +/** + * Determine address of proxied request. + * + * @param {Object} request + * @param {Function|Array|String} trust + * @public + */ + +function proxyaddr (req, trust) { + if (!req) { + throw new TypeError('req argument is required') + } + + if (!trust) { + throw new TypeError('trust argument is required') + } + + var addrs = alladdrs(req, trust) + var addr = addrs[addrs.length - 1] + + return addr +} + +/** + * Static trust function to trust nothing. + * + * @private + */ + +function trustNone () { + return false +} + +/** + * Compile trust function for multiple subnets. + * + * @param {Array} subnets + * @private + */ + +function trustMulti (subnets) { + return function trust (addr) { + if (!isip(addr)) return false + + var ip = parseip(addr) + var ipconv + var kind = ip.kind() + + for (var i = 0; i < subnets.length; i++) { + var subnet = subnets[i] + var subnetip = subnet[0] + var subnetkind = subnetip.kind() + var subnetrange = subnet[1] + var trusted = ip + + if (kind !== subnetkind) { + if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) { + // Incompatible IP addresses + continue + } + + if (!ipconv) { + // Convert IP to match subnet IP kind + ipconv = subnetkind === 'ipv4' + ? ip.toIPv4Address() + : ip.toIPv4MappedAddress() + } + + trusted = ipconv + } + + if (trusted.match(subnetip, subnetrange)) { + return true + } + } + + return false + } +} + +/** + * Compile trust function for single subnet. + * + * @param {Object} subnet + * @private + */ + +function trustSingle (subnet) { + var subnetip = subnet[0] + var subnetkind = subnetip.kind() + var subnetisipv4 = subnetkind === 'ipv4' + var subnetrange = subnet[1] + + return function trust (addr) { + if (!isip(addr)) return false + + var ip = parseip(addr) + var kind = ip.kind() + + if (kind !== subnetkind) { + if (subnetisipv4 && !ip.isIPv4MappedAddress()) { + // Incompatible IP addresses + return false + } + + // Convert IP to match subnet IP kind + ip = subnetisipv4 + ? ip.toIPv4Address() + : ip.toIPv4MappedAddress() + } + + return ip.match(subnetip, subnetrange) + } +} + + +/***/ }), +/* 98 */ +/***/ (function(module, exports) { + + + +/***/ }), +/* 99 */ +/***/ (function(module, exports) { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), +/* 100 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +var anObject = __webpack_require__(11); +var dPs = __webpack_require__(196); +var enumBugKeys = __webpack_require__(103); +var IE_PROTO = __webpack_require__(61)('IE_PROTO'); +var Empty = function () { /* empty */ }; +var PROTOTYPE = 'prototype'; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var createDict = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = __webpack_require__(58)('iframe'); + var i = enumBugKeys.length; + var lt = '<'; + var gt = '>'; + var iframeDocument; + iframe.style.display = 'none'; + __webpack_require__(104).appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); +}; + +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + Empty[PROTOTYPE] = anObject(O); + result = new Empty(); + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); +}; + + +/***/ }), +/* 101 */ +/***/ (function(module, exports, __webpack_require__) { + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = __webpack_require__(28); +// eslint-disable-next-line no-prototype-builtins +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { + return cof(it) == 'String' ? it.split('') : Object(it); +}; + + +/***/ }), +/* 102 */ +/***/ (function(module, exports, __webpack_require__) { + +var core = __webpack_require__(6); +var global = __webpack_require__(1); +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || (global[SHARED] = {}); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: core.version, + mode: __webpack_require__(57) ? 'pure' : 'global', + copyright: '© 2018 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), +/* 103 */ +/***/ (function(module, exports) { + +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); + + +/***/ }), +/* 104 */ +/***/ (function(module, exports, __webpack_require__) { + +var document = __webpack_require__(1).document; +module.exports = document && document.documentElement; + + +/***/ }), +/* 105 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.13 ToObject(argument) +var defined = __webpack_require__(55); +module.exports = function (it) { + return Object(defined(it)); +}; + + +/***/ }), +/* 106 */ +/***/ (function(module, exports) { + +module.exports = function (done, value) { + return { value: value, done: !!done }; +}; + + +/***/ }), +/* 107 */ +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(64); +var ITERATOR = __webpack_require__(3)('iterator'); +var Iterators = __webpack_require__(27); +module.exports = __webpack_require__(6).getIteratorMethod = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + + +/***/ }), +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.3.20 SpeciesConstructor(O, defaultConstructor) +var anObject = __webpack_require__(11); +var aFunction = __webpack_require__(25); +var SPECIES = __webpack_require__(3)('species'); +module.exports = function (O, D) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); +}; + + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + +var ctx = __webpack_require__(13); +var invoke = __webpack_require__(207); +var html = __webpack_require__(104); +var cel = __webpack_require__(58); +var global = __webpack_require__(1); +var process = global.process; +var setTask = global.setImmediate; +var clearTask = global.clearImmediate; +var MessageChannel = global.MessageChannel; +var Dispatch = global.Dispatch; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var defer, channel, port; +var run = function () { + var id = +this; + // eslint-disable-next-line no-prototype-builtins + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; +var listener = function (event) { + run.call(event.data); +}; +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!setTask || !clearTask) { + setTask = function setImmediate(fn) { + var args = []; + var i = 1; + while (arguments.length > i) args.push(arguments[i++]); + queue[++counter] = function () { + // eslint-disable-next-line no-new-func + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (__webpack_require__(28)(process) == 'process') { + defer = function (id) { + process.nextTick(ctx(run, id, 1)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if (MessageChannel) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) { + defer = function (id) { + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in cel('script')) { + defer = function (id) { + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(ctx(run, id, 1), 0); + }; + } +} +module.exports = { + set: setTask, + clear: clearTask +}; + + +/***/ }), +/* 110 */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return { e: false, v: exec() }; + } catch (e) { + return { e: true, v: e }; + } +}; + + +/***/ }), +/* 111 */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(11); +var isObject = __webpack_require__(9); +var newPromiseCapability = __webpack_require__(66); + +module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + + +/***/ }), +/* 112 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var global = __webpack_require__(1); +var core = __webpack_require__(6); +var dP = __webpack_require__(15); +var DESCRIPTORS = __webpack_require__(16); +var SPECIES = __webpack_require__(3)('species'); + +module.exports = function (KEY) { + var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]; + if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { + configurable: true, + get: function () { return this; } + }); +}; + + +/***/ }), +/* 113 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _stringify = __webpack_require__(22); + +var _stringify2 = _interopRequireDefault(_stringify); + +var _getIterator2 = __webpack_require__(46); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +Object.defineProperty(exports, "__esModule", { value: true }); +var path = __webpack_require__(0); +var json_1 = __webpack_require__(31); +var config_1 = __webpack_require__(17); +var crypto = __webpack_require__(43); +function saveTargets(targets) { + var metrics = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(targets), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var target = _step.value; + + metrics.push(saveTarget(target)); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return metrics; +} +exports.saveTargets = saveTargets; +function saveTarget(target) { + //const md5 = crypto.createHash('md5') + var targetId = crypto.createHash('md5').update((0, _stringify2.default)(target)).digest('hex'); + var filename = path.join(config_1.METRICS_PATH, targetId + ".json"); + json_1.writeJsonDataSync(filename, target); + return targetId; +} +function getTarget(targetId) { + var filename = path.join(config_1.METRICS_PATH, targetId + ".json"); + return json_1.getJsonDataSync(filename); +} +exports.getTarget = getTarget; + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + +var Stream = __webpack_require__(5) +var writeMethods = ["write", "end", "destroy"] +var readMethods = ["resume", "pause"] +var readEvents = ["data", "close"] +var slice = Array.prototype.slice + +module.exports = duplex + +function forEach (arr, fn) { + if (arr.forEach) { + return arr.forEach(fn) + } + + for (var i = 0; i < arr.length; i++) { + fn(arr[i], i) + } +} + +function duplex(writer, reader) { + var stream = new Stream() + var ended = false + + forEach(writeMethods, proxyWriter) + + forEach(readMethods, proxyReader) + + forEach(readEvents, proxyStream) + + reader.on("end", handleEnd) + + writer.on("drain", function() { + stream.emit("drain") + }) + + writer.on("error", reemit) + reader.on("error", reemit) + + stream.writable = writer.writable + stream.readable = reader.readable + + return stream + + function proxyWriter(methodName) { + stream[methodName] = method + + function method() { + return writer[methodName].apply(writer, arguments) + } + } + + function proxyReader(methodName) { + stream[methodName] = method + + function method() { + stream.emit(methodName) + var func = reader[methodName] + if (func) { + return func.apply(reader, arguments) + } + reader.emit(methodName) + } + } + + function proxyStream(methodName) { + reader.on(methodName, reemit) + + function reemit() { + var args = slice.call(arguments) + args.unshift(methodName) + stream.emit.apply(stream, args) + } + } + + function handleEnd() { + if (ended) { + return + } + ended = true + var args = slice.call(arguments) + args.unshift("end") + stream.emit.apply(stream, args) + } + + function reemit(err) { + stream.emit("error", err) + } +} + + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + +var META = __webpack_require__(62)('meta'); +var isObject = __webpack_require__(9); +var has = __webpack_require__(26); +var setDesc = __webpack_require__(15).f; +var id = 0; +var isExtensible = Object.isExtensible || function () { + return true; +}; +var FREEZE = !__webpack_require__(44)(function () { + return isExtensible(Object.preventExtensions({})); +}); +var setMeta = function (it) { + setDesc(it, META, { value: { + i: 'O' + ++id, // object ID + w: {} // weak collections IDs + } }); +}; +var fastKey = function (it, create) { + // return primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!has(it, META)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMeta(it); + // return object ID + } return it[META].i; +}; +var getWeak = function (it, create) { + if (!has(it, META)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMeta(it); + // return hash weak collections IDs + } return it[META].w; +}; +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); + return it; +}; +var meta = module.exports = { + KEY: META, + NEED: false, + fastKey: fastKey, + getWeak: getWeak, + onFreeze: onFreeze +}; + + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(9); +module.exports = function (it, TYPE) { + if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); + return it; +}; + + +/***/ }), +/* 117 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _getIterator2 = __webpack_require__(46); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +Object.defineProperty(exports, "__esModule", { value: true }); +//import * as Telegraf from 'telegraf' +var path = __webpack_require__(0); +var config_1 = __webpack_require__(17); +var json_1 = __webpack_require__(31); +function sendNotification(anomalyName, active) { + console.log('Notification ' + anomalyName); + if (anomalyName in botConfig.subscriptions) { + var notificationMessage = void 0; + if (active) { + notificationMessage = 'Alert! Anomaly type ' + anomalyName; + } else { + notificationMessage = 'Ok! Anomaly type ' + anomalyName; + } + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(botConfig.subscriptions[anomalyName]), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var SubscriberId = _step.value; + + bot.telegram.sendMessage(SubscriberId, notificationMessage); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + } +} +exports.sendNotification = sendNotification; +function loadBotConfig() { + var filename = path.join(config_1.DATA_PATH, "bot_config.json"); + var jsonData = void 0; + try { + jsonData = json_1.getJsonDataSync(filename); + } catch (e) { + console.error(e.message); + jsonData = []; + } + return jsonData; +} +function saveBotConfig(botConfig) { + var filename = path.join(config_1.DATA_PATH, "bot_config.json"); + try { + json_1.writeJsonDataSync(filename, botConfig); + } catch (e) { + console.error(e.message); + } +} +var commandArgs = function commandArgs(ctx, next) { + try { + if (ctx.updateType === 'message') { + var text = ctx.update.message.text; + if (text !== undefined && text.startsWith('/')) { + var match = text.match(/^\/([^\s]+)\s?(.+)?/); + var args = []; + var command = void 0; + if (match !== null) { + if (match[1]) { + command = match[1]; + } + if (match[2]) { + args = match[2].split(' '); + } + } + ctx.state.command = { + raw: text, + command: command, + args: args + }; + } + } + return next(ctx); + } catch (e) {} +}; +function addNotification(ctx) { + console.log('addNotification'); + var command = ctx.state.command; + var chatId = ctx.chat.id; + if (command.args.length > 0) { + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = (0, _getIterator3.default)(command.args), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var anomalyName = _step2.value; + + if (!(anomalyName in botConfig.subscriptions)) { + botConfig.subscriptions[anomalyName] = []; + } + if (botConfig.subscriptions[anomalyName].includes(chatId)) { + return ctx.reply('You are already subscribed on alerts from anomaly ' + command.args); + } else { + botConfig.subscriptions[anomalyName].push(chatId); + saveBotConfig(botConfig); + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + return ctx.reply('You have been successfully subscribed on alerts from anomaly ' + command.args); + } else { + return ctx.reply('You should use syntax: \/addNotification '); + } +} +function removeNotification(ctx) { + var command = ctx.state.command; + var chatId = ctx.chat.id; + if (command.args.length > 0) { + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = (0, _getIterator3.default)(command.args), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var anomalyName = _step3.value; + + if (anomalyName in botConfig.subscriptions) { + botConfig.subscriptions[anomalyName] = botConfig.subscriptions[anomalyName].filter(function (el) { + return el !== chatId; + }); + saveBotConfig(botConfig); + } + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + return ctx.reply('You have been successfully unsubscribed from alerts from ' + command.args); + } else { + return ctx.reply('You should use syntax: \/removeNotification '); + } +} +// const Telegraf = require('telegraf'); +var botConfig = void 0; +var bot = void 0; +function tgBotInit() { + try { + // botConfig = loadBotConfig(); + // bot = new Telegraf(botConfig.token); + // bot.use(commandArgs); + // bot.command('addNotification', addNotification); + // bot.command('removeNotification', removeNotification); + // bot.startPolling(); + } catch (e) { + // TODO: handle exception + } +} +exports.tgBotInit = tgBotInit; + +/***/ }), +/* 118 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { value: true }); +var express = __webpack_require__(32); +var bodyParser = __webpack_require__(71); +var anomalies_1 = __webpack_require__(186); +var segments_1 = __webpack_require__(222); +var alerts_1 = __webpack_require__(223); +var notification_1 = __webpack_require__(117); +var app = express(); +var PORT = process.env.HASTIC_PORT || 8000; +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: true })); +app.use(function (req, res, next) { + res.header('Access-Control-Allow-Origin', '*'); + res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS'); + res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); + next(); +}); +app.use('/anomalies', anomalies_1.router); +app.use('/segments', segments_1.router); +app.use('/alerts', alerts_1.router); +app.use('/', function (req, res) { + return res.send({ status: 'OK' }); +}); +app.listen(PORT, function () { + console.log("Server is running on :" + PORT); +}); +notification_1.tgBotInit(); + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + */ + +var bodyParser = __webpack_require__(71) +var EventEmitter = __webpack_require__(47).EventEmitter; +var mixin = __webpack_require__(161); +var proto = __webpack_require__(162); +var Route = __webpack_require__(89); +var Router = __webpack_require__(88); +var req = __webpack_require__(174); +var res = __webpack_require__(181); + +/** + * Expose `createApplication()`. + */ + +exports = module.exports = createApplication; + +/** + * Create an express application. + * + * @return {Function} + * @api public + */ + +function createApplication() { + var app = function(req, res, next) { + app.handle(req, res, next); + }; + + mixin(app, EventEmitter.prototype, false); + mixin(app, proto, false); + + // expose the prototype that will get set on requests + app.request = Object.create(req, { + app: { configurable: true, enumerable: true, writable: true, value: app } + }) + + // expose the prototype that will get set on responses + app.response = Object.create(res, { + app: { configurable: true, enumerable: true, writable: true, value: app } + }) + + app.init(); + return app; +} + +/** + * Expose the prototypes. + */ + +exports.application = proto; +exports.request = req; +exports.response = res; + +/** + * Expose constructors. + */ + +exports.Route = Route; +exports.Router = Router; + +/** + * Expose middleware + */ + +exports.json = bodyParser.json +exports.query = __webpack_require__(91); +exports.static = __webpack_require__(185); +exports.urlencoded = bodyParser.urlencoded + +/** + * Replace removed middleware with an appropriate error message. + */ + +;[ + 'bodyParser', + 'compress', + 'cookieSession', + 'session', + 'logger', + 'cookieParser', + 'favicon', + 'responseTime', + 'errorHandler', + 'timeout', + 'methodOverride', + 'vhost', + 'csrf', + 'directory', + 'limit', + 'multipart', + 'staticCache', +].forEach(function (name) { + Object.defineProperty(exports, name, { + get: function () { + throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.'); + }, + configurable: true + }); +}); + + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + */ + +module.exports = callSiteToString + +/** + * Format a CallSite file location to a string. + */ + +function callSiteFileLocation (callSite) { + var fileName + var fileLocation = '' + + if (callSite.isNative()) { + fileLocation = 'native' + } else if (callSite.isEval()) { + fileName = callSite.getScriptNameOrSourceURL() + if (!fileName) { + fileLocation = callSite.getEvalOrigin() + } + } else { + fileName = callSite.getFileName() + } + + if (fileName) { + fileLocation += fileName + + var lineNumber = callSite.getLineNumber() + if (lineNumber != null) { + fileLocation += ':' + lineNumber + + var columnNumber = callSite.getColumnNumber() + if (columnNumber) { + fileLocation += ':' + columnNumber + } + } + } + + return fileLocation || 'unknown source' +} + +/** + * Format a CallSite to a string. + */ + +function callSiteToString (callSite) { + var addSuffix = true + var fileLocation = callSiteFileLocation(callSite) + var functionName = callSite.getFunctionName() + var isConstructor = callSite.isConstructor() + var isMethodCall = !(callSite.isToplevel() || isConstructor) + var line = '' + + if (isMethodCall) { + var methodName = callSite.getMethodName() + var typeName = getConstructorName(callSite) + + if (functionName) { + if (typeName && functionName.indexOf(typeName) !== 0) { + line += typeName + '.' + } + + line += functionName + + if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) { + line += ' [as ' + methodName + ']' + } + } else { + line += typeName + '.' + (methodName || '') + } + } else if (isConstructor) { + line += 'new ' + (functionName || '') + } else if (functionName) { + line += functionName + } else { + addSuffix = false + line += fileLocation + } + + if (addSuffix) { + line += ' (' + fileLocation + ')' + } + + return line +} + +/** + * Get constructor name of reviver. + */ + +function getConstructorName (obj) { + var receiver = obj.receiver + return (receiver.constructor && receiver.constructor.name) || null +} + + +/***/ }), +/* 121 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * depd + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = eventListenerCount + +/** + * Get the count of listeners on an event emitter of a specific type. + */ + +function eventListenerCount (emitter, type) { + return emitter.listeners(type).length +} + + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var bytes = __webpack_require__(18) +var contentType = __webpack_require__(33) +var createError = __webpack_require__(34) +var debug = __webpack_require__(4)('body-parser:json') +var read = __webpack_require__(36) +var typeis = __webpack_require__(20) + +/** + * Module exports. + */ + +module.exports = json + +/** + * RegExp to match the first non-space in a string. + * + * Allowed whitespace is defined in RFC 7159: + * + * ws = *( + * %x20 / ; Space + * %x09 / ; Horizontal tab + * %x0A / ; Line feed or New line + * %x0D ) ; Carriage return + */ + +var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/ // eslint-disable-line no-control-regex + +/** + * Create a middleware to parse JSON bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function json (options) { + var opts = options || {} + + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var inflate = opts.inflate !== false + var reviver = opts.reviver + var strict = opts.strict !== false + var type = opts.type || 'application/json' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + if (body.length === 0) { + // special-case empty json body, as it's a common client-side mistake + // TODO: maybe make this configurable or part of "strict" option + return {} + } + + if (strict) { + var first = firstchar(body) + + if (first !== '{' && first !== '[') { + debug('strict violation') + throw createStrictSyntaxError(body, first) + } + } + + try { + debug('parse json') + return JSON.parse(body, reviver) + } catch (e) { + throw normalizeJsonSyntaxError(e, { + stack: e.stack + }) + } + } + + return function jsonParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset per RFC 7159 sec 8.1 + var charset = getCharset(req) || 'utf-8' + if (charset.substr(0, 4) !== 'utf-') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset, + type: 'charset.unsupported' + })) + return + } + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Create strict violation syntax error matching native error. + * + * @param {string} str + * @param {string} char + * @return {Error} + * @private + */ + +function createStrictSyntaxError (str, char) { + var index = str.indexOf(char) + var partial = str.substring(0, index) + '#' + + try { + JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') + } catch (e) { + return normalizeJsonSyntaxError(e, { + message: e.message.replace('#', char), + stack: e.stack + }) + } +} + +/** + * Get the first non-whitespace character in a string. + * + * @param {string} str + * @return {function} + * @private + */ + +function firstchar (str) { + return FIRST_CHAR_REGEXP.exec(str)[1] +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Normalize a SyntaxError for JSON.parse. + * + * @param {SyntaxError} error + * @param {object} obj + * @return {SyntaxError} + */ + +function normalizeJsonSyntaxError (error, obj) { + var keys = Object.getOwnPropertyNames(error) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + if (key !== 'stack' && key !== 'message') { + delete error[key] + } + } + + var props = Object.keys(obj) + + for (var j = 0; j < props.length; j++) { + var prop = props[j] + error[prop] = obj[prop] + } + + return error +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} + + +/***/ }), +/* 123 */ +/***/ (function(module, exports) { + +module.exports = {"100":"Continue","101":"Switching Protocols","102":"Processing","200":"OK","201":"Created","202":"Accepted","203":"Non-Authoritative Information","204":"No Content","205":"Reset Content","206":"Partial Content","207":"Multi-Status","208":"Already Reported","226":"IM Used","300":"Multiple Choices","301":"Moved Permanently","302":"Found","303":"See Other","304":"Not Modified","305":"Use Proxy","306":"(Unused)","307":"Temporary Redirect","308":"Permanent Redirect","400":"Bad Request","401":"Unauthorized","402":"Payment Required","403":"Forbidden","404":"Not Found","405":"Method Not Allowed","406":"Not Acceptable","407":"Proxy Authentication Required","408":"Request Timeout","409":"Conflict","410":"Gone","411":"Length Required","412":"Precondition Failed","413":"Payload Too Large","414":"URI Too Long","415":"Unsupported Media Type","416":"Range Not Satisfiable","417":"Expectation Failed","418":"I'm a teapot","421":"Misdirected Request","422":"Unprocessable Entity","423":"Locked","424":"Failed Dependency","425":"Unordered Collection","426":"Upgrade Required","428":"Precondition Required","429":"Too Many Requests","431":"Request Header Fields Too Large","451":"Unavailable For Legal Reasons","500":"Internal Server Error","501":"Not Implemented","502":"Bad Gateway","503":"Service Unavailable","504":"Gateway Timeout","505":"HTTP Version Not Supported","506":"Variant Also Negotiates","507":"Insufficient Storage","508":"Loop Detected","509":"Bandwidth Limit Exceeded","510":"Not Extended","511":"Network Authentication Required"} + +/***/ }), +/* 124 */ +/***/ (function(module, exports) { + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + + +/***/ }), +/* 125 */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = __webpack_require__(74); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} + + +/***/ }), +/* 126 */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * Module dependencies. + */ + +var tty = __webpack_require__(127); +var util = __webpack_require__(48); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = __webpack_require__(74); +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // camel-case + var prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); + + // coerce string value into JS value + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) val = false; + else if (val === 'null') val = null; + else val = Number(val); + + obj[prop] = val; + return obj; +}, {}); + +/** + * The file descriptor to write the `debug()` calls to. + * Set the `DEBUG_FD` env variable to override with another value. i.e.: + * + * $ DEBUG_FD=3 node script.js 3>debug.log + */ + +var fd = parseInt(process.env.DEBUG_FD, 10) || 2; + +if (1 !== fd && 2 !== fd) { + util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() +} + +var stream = 1 === fd ? process.stdout : + 2 === fd ? process.stderr : + createWritableStdioStream(fd); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts + ? Boolean(exports.inspectOpts.colors) + : tty.isatty(fd); +} + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +exports.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n').map(function(str) { + return str.trim() + }).join(' '); +}; + +/** + * Map %o to `util.inspect()`, allowing multiple lines if needed. + */ + +exports.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + var name = this.namespace; + var useColors = this.useColors; + + if (useColors) { + var c = this.color; + var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + } else { + args[0] = new Date().toUTCString() + + ' ' + name + ' ' + args[0]; + } +} + +/** + * Invokes `util.format()` with the specified arguments and writes to `stream`. + */ + +function log() { + return stream.write(util.format.apply(util, arguments) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Copied from `node/src/node.js`. + * + * XXX: It's lame that node doesn't expose this API out-of-the-box. It also + * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. + */ + +function createWritableStdioStream (fd) { + var stream; + var tty_wrap = process.binding('tty_wrap'); + + // Note stream._type is used for test-module-load-list.js + + switch (tty_wrap.guessHandleType(fd)) { + case 'TTY': + stream = new tty.WriteStream(fd); + stream._type = 'tty'; + + // Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + case 'FILE': + var fs = __webpack_require__(8); + stream = new fs.SyncWriteStream(fd, { autoClose: false }); + stream._type = 'fs'; + break; + + case 'PIPE': + case 'TCP': + var net = __webpack_require__(76); + stream = new net.Socket({ + fd: fd, + readable: false, + writable: true + }); + + // FIXME Should probably have an option in net.Socket to create a + // stream from an existing fd which is writable only. But for now + // we'll just add this hack and set the `readable` member to false. + // Test: ./node test/fixtures/echo.js < /etc/passwd + stream.readable = false; + stream.read = null; + stream._type = 'pipe'; + + // FIXME Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + default: + // Probably an error on in uv_guess_handle() + throw new Error('Implement me. Unknown stream file type!'); + } + + // For supporting legacy API we put the FD here. + stream.fd = fd; + + stream._isStdio = true; + + return stream; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init (debug) { + debug.inspectOpts = {}; + + var keys = Object.keys(exports.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); + + +/***/ }), +/* 127 */ +/***/ (function(module, exports) { + +module.exports = require("tty"); + +/***/ }), +/* 128 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * raw-body + * Copyright(c) 2013-2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var bytes = __webpack_require__(18) +var createError = __webpack_require__(129) +var iconv = __webpack_require__(78) +var unpipe = __webpack_require__(82) + +/** + * Module exports. + * @public + */ + +module.exports = getRawBody + +/** + * Module variables. + * @private + */ + +var ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: / + +/** + * Get the decoder for a given encoding. + * + * @param {string} encoding + * @private + */ + +function getDecoder (encoding) { + if (!encoding) return null + + try { + return iconv.getDecoder(encoding) + } catch (e) { + // error getting decoder + if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e + + // the encoding was not found + throw createError(415, 'specified encoding unsupported', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } +} + +/** + * Get the raw body of a stream (typically HTTP). + * + * @param {object} stream + * @param {object|string|function} [options] + * @param {function} [callback] + * @public + */ + +function getRawBody (stream, options, callback) { + var done = callback + var opts = options || {} + + if (options === true || typeof options === 'string') { + // short cut for encoding + opts = { + encoding: options + } + } + + if (typeof options === 'function') { + done = options + opts = {} + } + + // validate callback is a function, if provided + if (done !== undefined && typeof done !== 'function') { + throw new TypeError('argument callback must be a function') + } + + // require the callback without promises + if (!done && !global.Promise) { + throw new TypeError('argument callback is required') + } + + // get encoding + var encoding = opts.encoding !== true + ? opts.encoding + : 'utf-8' + + // convert the limit to an integer + var limit = bytes.parse(opts.limit) + + // convert the expected length to an integer + var length = opts.length != null && !isNaN(opts.length) + ? parseInt(opts.length, 10) + : null + + if (done) { + // classic callback style + return readStream(stream, encoding, length, limit, done) + } + + return new Promise(function executor (resolve, reject) { + readStream(stream, encoding, length, limit, function onRead (err, buf) { + if (err) return reject(err) + resolve(buf) + }) + }) +} + +/** + * Halt a stream. + * + * @param {Object} stream + * @private + */ + +function halt (stream) { + // unpipe everything from the stream + unpipe(stream) + + // pause stream + if (typeof stream.pause === 'function') { + stream.pause() + } +} + +/** + * Read the data from the stream. + * + * @param {object} stream + * @param {string} encoding + * @param {number} length + * @param {number} limit + * @param {function} callback + * @public + */ + +function readStream (stream, encoding, length, limit, callback) { + var complete = false + var sync = true + + // check the length and limit options. + // note: we intentionally leave the stream paused, + // so users should handle the stream themselves. + if (limit !== null && length !== null && length > limit) { + return done(createError(413, 'request entity too large', { + expected: length, + length: length, + limit: limit, + type: 'entity.too.large' + })) + } + + // streams1: assert request encoding is buffer. + // streams2+: assert the stream encoding is buffer. + // stream._decoder: streams1 + // state.encoding: streams2 + // state.decoder: streams2, specifically < 0.10.6 + var state = stream._readableState + if (stream._decoder || (state && (state.encoding || state.decoder))) { + // developer error + return done(createError(500, 'stream encoding should not be set', { + type: 'stream.encoding.set' + })) + } + + var received = 0 + var decoder + + try { + decoder = getDecoder(encoding) + } catch (err) { + return done(err) + } + + var buffer = decoder + ? '' + : [] + + // attach listeners + stream.on('aborted', onAborted) + stream.on('close', cleanup) + stream.on('data', onData) + stream.on('end', onEnd) + stream.on('error', onEnd) + + // mark sync section complete + sync = false + + function done () { + var args = new Array(arguments.length) + + // copy arguments + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + + // mark complete + complete = true + + if (sync) { + process.nextTick(invokeCallback) + } else { + invokeCallback() + } + + function invokeCallback () { + cleanup() + + if (args[0]) { + // halt the stream on error + halt(stream) + } + + callback.apply(null, args) + } + } + + function onAborted () { + if (complete) return + + done(createError(400, 'request aborted', { + code: 'ECONNABORTED', + expected: length, + length: length, + received: received, + type: 'request.aborted' + })) + } + + function onData (chunk) { + if (complete) return + + received += chunk.length + + if (limit !== null && received > limit) { + done(createError(413, 'request entity too large', { + limit: limit, + received: received, + type: 'entity.too.large' + })) + } else if (decoder) { + buffer += decoder.write(chunk) + } else { + buffer.push(chunk) + } + } + + function onEnd (err) { + if (complete) return + if (err) return done(err) + + if (length !== null && received !== length) { + done(createError(400, 'request size did not match content length', { + expected: length, + length: length, + received: received, + type: 'request.size.invalid' + })) + } else { + var string = decoder + ? buffer + (decoder.end() || '') + : Buffer.concat(buffer) + done(null, string) + } + } + + function cleanup () { + buffer = null + + stream.removeListener('aborted', onAborted) + stream.removeListener('data', onData) + stream.removeListener('end', onEnd) + stream.removeListener('error', onEnd) + stream.removeListener('close', cleanup) + } +} + + +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * http-errors + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var deprecate = __webpack_require__(130)('http-errors') +var setPrototypeOf = __webpack_require__(133) +var statuses = __webpack_require__(19) +var inherits = __webpack_require__(73) + +/** + * Module exports. + * @public + */ + +module.exports = createError +module.exports.HttpError = createHttpErrorConstructor() + +// Populate exports for all constructors +populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError) + +/** + * Get the code class of a status code. + * @private + */ + +function codeClass (status) { + return Number(String(status).charAt(0) + '00') +} + +/** + * Create a new HTTP Error. + * + * @returns {Error} + * @public + */ + +function createError () { + // so much arity going on ~_~ + var err + var msg + var status = 500 + var props = {} + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i] + if (arg instanceof Error) { + err = arg + status = err.status || err.statusCode || status + continue + } + switch (typeof arg) { + case 'string': + msg = arg + break + case 'number': + status = arg + if (i !== 0) { + deprecate('non-first-argument status code; replace with createError(' + arg + ', ...)') + } + break + case 'object': + props = arg + break + } + } + + if (typeof status === 'number' && (status < 400 || status >= 600)) { + deprecate('non-error status code; use only 4xx or 5xx status codes') + } + + if (typeof status !== 'number' || + (!statuses[status] && (status < 400 || status >= 600))) { + status = 500 + } + + // constructor + var HttpError = createError[status] || createError[codeClass(status)] + + if (!err) { + // create error + err = HttpError + ? new HttpError(msg) + : new Error(msg || statuses[status]) + Error.captureStackTrace(err, createError) + } + + if (!HttpError || !(err instanceof HttpError) || err.status !== status) { + // add properties to generic error + err.expose = status < 500 + err.status = err.statusCode = status + } + + for (var key in props) { + if (key !== 'status' && key !== 'statusCode') { + err[key] = props[key] + } + } + + return err +} + +/** + * Create HTTP error abstract base class. + * @private + */ + +function createHttpErrorConstructor () { + function HttpError () { + throw new TypeError('cannot construct abstract class') + } + + inherits(HttpError, Error) + + return HttpError +} + +/** + * Create a constructor for a client error. + * @private + */ + +function createClientErrorConstructor (HttpError, name, code) { + var className = name.match(/Error$/) ? name : name + 'Error' + + function ClientError (message) { + // create the error object + var msg = message != null ? message : statuses[code] + var err = new Error(msg) + + // capture a stack trace to the construction point + Error.captureStackTrace(err, ClientError) + + // adjust the [[Prototype]] + setPrototypeOf(err, ClientError.prototype) + + // redefine the error message + Object.defineProperty(err, 'message', { + enumerable: true, + configurable: true, + value: msg, + writable: true + }) + + // redefine the error name + Object.defineProperty(err, 'name', { + enumerable: false, + configurable: true, + value: className, + writable: true + }) + + return err + } + + inherits(ClientError, HttpError) + + ClientError.prototype.status = code + ClientError.prototype.statusCode = code + ClientError.prototype.expose = true + + return ClientError +} + +/** + * Create a constructor for a server error. + * @private + */ + +function createServerErrorConstructor (HttpError, name, code) { + var className = name.match(/Error$/) ? name : name + 'Error' + + function ServerError (message) { + // create the error object + var msg = message != null ? message : statuses[code] + var err = new Error(msg) + + // capture a stack trace to the construction point + Error.captureStackTrace(err, ServerError) + + // adjust the [[Prototype]] + setPrototypeOf(err, ServerError.prototype) + + // redefine the error message + Object.defineProperty(err, 'message', { + enumerable: true, + configurable: true, + value: msg, + writable: true + }) + + // redefine the error name + Object.defineProperty(err, 'name', { + enumerable: false, + configurable: true, + value: className, + writable: true + }) + + return err + } + + inherits(ServerError, HttpError) + + ServerError.prototype.status = code + ServerError.prototype.statusCode = code + ServerError.prototype.expose = false + + return ServerError +} + +/** + * Populate the exports object with constructors for every error class. + * @private + */ + +function populateConstructorExports (exports, codes, HttpError) { + codes.forEach(function forEachCode (code) { + var CodeError + var name = toIdentifier(statuses[code]) + + switch (codeClass(code)) { + case 400: + CodeError = createClientErrorConstructor(HttpError, name, code) + break + case 500: + CodeError = createServerErrorConstructor(HttpError, name, code) + break + } + + if (CodeError) { + // export the constructor + exports[code] = CodeError + exports[name] = CodeError + } + }) + + // backwards-compatibility + exports["I'mateapot"] = deprecate.function(exports.ImATeapot, + '"I\'mateapot"; use "ImATeapot" instead') +} + +/** + * Convert a string of words to a JavaScript identifier. + * @private + */ + +function toIdentifier (str) { + return str.split(' ').map(function (token) { + return token.slice(0, 1).toUpperCase() + token.slice(1) + }).join('').replace(/[^ _0-9a-z]/gi, '') +} + + +/***/ }), +/* 130 */ +/***/ (function(module, exports, __webpack_require__) { + +/*! + * depd + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var callSiteToString = __webpack_require__(77).callSiteToString +var eventListenerCount = __webpack_require__(77).eventListenerCount +var relative = __webpack_require__(0).relative + +/** + * Module exports. + */ + +module.exports = depd + +/** + * Get the path to base files on. + */ + +var basePath = process.cwd() + +/** + * Determine if namespace is contained in the string. + */ + +function containsNamespace (str, namespace) { + var val = str.split(/[ ,]+/) + + namespace = String(namespace).toLowerCase() + + for (var i = 0; i < val.length; i++) { + if (!(str = val[i])) continue + + // namespace contained + if (str === '*' || str.toLowerCase() === namespace) { + return true + } + } + + return false +} + +/** + * Convert a data descriptor to accessor descriptor. + */ + +function convertDataDescriptorToAccessor (obj, prop, message) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + var value = descriptor.value + + descriptor.get = function getter () { return value } + + if (descriptor.writable) { + descriptor.set = function setter (val) { return (value = val) } + } + + delete descriptor.value + delete descriptor.writable + + Object.defineProperty(obj, prop, descriptor) + + return descriptor +} + +/** + * Create arguments string to keep arity. + */ + +function createArgumentsString (arity) { + var str = '' + + for (var i = 0; i < arity; i++) { + str += ', arg' + i + } + + return str.substr(2) +} + +/** + * Create stack string from stack. + */ + +function createStackString (stack) { + var str = this.name + ': ' + this.namespace + + if (this.message) { + str += ' deprecated ' + this.message + } + + for (var i = 0; i < stack.length; i++) { + str += '\n at ' + callSiteToString(stack[i]) + } + + return str +} + +/** + * Create deprecate for namespace in caller. + */ + +function depd (namespace) { + if (!namespace) { + throw new TypeError('argument namespace is required') + } + + var stack = getStack() + var site = callSiteLocation(stack[1]) + var file = site[0] + + function deprecate (message) { + // call to self as log + log.call(deprecate, message) + } + + deprecate._file = file + deprecate._ignored = isignored(namespace) + deprecate._namespace = namespace + deprecate._traced = istraced(namespace) + deprecate._warned = Object.create(null) + + deprecate.function = wrapfunction + deprecate.property = wrapproperty + + return deprecate +} + +/** + * Determine if namespace is ignored. + */ + +function isignored (namespace) { + /* istanbul ignore next: tested in a child processs */ + if (process.noDeprecation) { + // --no-deprecation support + return true + } + + var str = process.env.NO_DEPRECATION || '' + + // namespace ignored + return containsNamespace(str, namespace) +} + +/** + * Determine if namespace is traced. + */ + +function istraced (namespace) { + /* istanbul ignore next: tested in a child processs */ + if (process.traceDeprecation) { + // --trace-deprecation support + return true + } + + var str = process.env.TRACE_DEPRECATION || '' + + // namespace traced + return containsNamespace(str, namespace) +} + +/** + * Display deprecation message. + */ + +function log (message, site) { + var haslisteners = eventListenerCount(process, 'deprecation') !== 0 + + // abort early if no destination + if (!haslisteners && this._ignored) { + return + } + + var caller + var callFile + var callSite + var i = 0 + var seen = false + var stack = getStack() + var file = this._file + + if (site) { + // provided site + callSite = callSiteLocation(stack[1]) + callSite.name = site.name + file = callSite[0] + } else { + // get call site + i = 2 + site = callSiteLocation(stack[i]) + callSite = site + } + + // get caller of deprecated thing in relation to file + for (; i < stack.length; i++) { + caller = callSiteLocation(stack[i]) + callFile = caller[0] + + if (callFile === file) { + seen = true + } else if (callFile === this._file) { + file = this._file + } else if (seen) { + break + } + } + + var key = caller + ? site.join(':') + '__' + caller.join(':') + : undefined + + if (key !== undefined && key in this._warned) { + // already warned + return + } + + this._warned[key] = true + + // generate automatic message from call site + if (!message) { + message = callSite === site || !callSite.name + ? defaultMessage(site) + : defaultMessage(callSite) + } + + // emit deprecation if listeners exist + if (haslisteners) { + var err = DeprecationError(this._namespace, message, stack.slice(i)) + process.emit('deprecation', err) + return + } + + // format and write message + var format = process.stderr.isTTY + ? formatColor + : formatPlain + var msg = format.call(this, message, caller, stack.slice(i)) + process.stderr.write(msg + '\n', 'utf8') +} + +/** + * Get call site location as array. + */ + +function callSiteLocation (callSite) { + var file = callSite.getFileName() || '' + var line = callSite.getLineNumber() + var colm = callSite.getColumnNumber() + + if (callSite.isEval()) { + file = callSite.getEvalOrigin() + ', ' + file + } + + var site = [file, line, colm] + + site.callSite = callSite + site.name = callSite.getFunctionName() + + return site +} + +/** + * Generate a default message from the site. + */ + +function defaultMessage (site) { + var callSite = site.callSite + var funcName = site.name + + // make useful anonymous name + if (!funcName) { + funcName = '' + } + + var context = callSite.getThis() + var typeName = context && callSite.getTypeName() + + // ignore useless type name + if (typeName === 'Object') { + typeName = undefined + } + + // make useful type name + if (typeName === 'Function') { + typeName = context.name || typeName + } + + return typeName && callSite.getMethodName() + ? typeName + '.' + funcName + : funcName +} + +/** + * Format deprecation message without color. + */ + +function formatPlain (msg, caller, stack) { + var timestamp = new Date().toUTCString() + + var formatted = timestamp + + ' ' + this._namespace + + ' deprecated ' + msg + + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n at ' + callSiteToString(stack[i]) + } + + return formatted + } + + if (caller) { + formatted += ' at ' + formatLocation(caller) + } + + return formatted +} + +/** + * Format deprecation message with color. + */ + +function formatColor (msg, caller, stack) { + var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan + ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow + ' \x1b[0m' + msg + '\x1b[39m' // reset + + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan + } + + return formatted + } + + if (caller) { + formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan + } + + return formatted +} + +/** + * Format call site location. + */ + +function formatLocation (callSite) { + return relative(basePath, callSite[0]) + + ':' + callSite[1] + + ':' + callSite[2] +} + +/** + * Get the stack as array of call sites. + */ + +function getStack () { + var limit = Error.stackTraceLimit + var obj = {} + var prep = Error.prepareStackTrace + + Error.prepareStackTrace = prepareObjectStackTrace + Error.stackTraceLimit = Math.max(10, limit) + + // capture the stack + Error.captureStackTrace(obj) + + // slice this function off the top + var stack = obj.stack.slice(1) + + Error.prepareStackTrace = prep + Error.stackTraceLimit = limit + + return stack +} + +/** + * Capture call site stack from v8. + */ + +function prepareObjectStackTrace (obj, stack) { + return stack +} + +/** + * Return a wrapped function in a deprecation message. + */ + +function wrapfunction (fn, message) { + if (typeof fn !== 'function') { + throw new TypeError('argument fn must be a function') + } + + var args = createArgumentsString(fn.length) + var deprecate = this // eslint-disable-line no-unused-vars + var stack = getStack() + var site = callSiteLocation(stack[1]) + + site.name = fn.name + + // eslint-disable-next-line no-eval + var deprecatedfn = eval('(function (' + args + ') {\n' + + '"use strict"\n' + + 'log.call(deprecate, message, site)\n' + + 'return fn.apply(this, arguments)\n' + + '})') + + return deprecatedfn +} + +/** + * Wrap property in a deprecation message. + */ + +function wrapproperty (obj, prop, message) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + throw new TypeError('argument obj must be object') + } + + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + + if (!descriptor) { + throw new TypeError('must call property on owner object') + } + + if (!descriptor.configurable) { + throw new TypeError('property must be configurable') + } + + var deprecate = this + var stack = getStack() + var site = callSiteLocation(stack[1]) + + // set site name + site.name = prop + + // convert data descriptor + if ('value' in descriptor) { + descriptor = convertDataDescriptorToAccessor(obj, prop, message) + } + + var get = descriptor.get + var set = descriptor.set + + // wrap getter + if (typeof get === 'function') { + descriptor.get = function getter () { + log.call(deprecate, message, site) + return get.apply(this, arguments) + } + } + + // wrap setter + if (typeof set === 'function') { + descriptor.set = function setter () { + log.call(deprecate, message, site) + return set.apply(this, arguments) + } + } + + Object.defineProperty(obj, prop, descriptor) +} + +/** + * Create DeprecationError for deprecation + */ + +function DeprecationError (namespace, message, stack) { + var error = new Error() + var stackString + + Object.defineProperty(error, 'constructor', { + value: DeprecationError + }) + + Object.defineProperty(error, 'message', { + configurable: true, + enumerable: false, + value: message, + writable: true + }) + + Object.defineProperty(error, 'name', { + enumerable: false, + configurable: true, + value: 'DeprecationError', + writable: true + }) + + Object.defineProperty(error, 'namespace', { + configurable: true, + enumerable: false, + value: namespace, + writable: true + }) + + Object.defineProperty(error, 'stack', { + configurable: true, + enumerable: false, + get: function () { + if (stackString !== undefined) { + return stackString + } + + // prepare stack trace + return (stackString = createStackString.call(this, stack)) + }, + set: function setter (val) { + stackString = val + } + }) + + return error +} + + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + */ + +module.exports = callSiteToString + +/** + * Format a CallSite file location to a string. + */ + +function callSiteFileLocation (callSite) { + var fileName + var fileLocation = '' + + if (callSite.isNative()) { + fileLocation = 'native' + } else if (callSite.isEval()) { + fileName = callSite.getScriptNameOrSourceURL() + if (!fileName) { + fileLocation = callSite.getEvalOrigin() + } + } else { + fileName = callSite.getFileName() + } + + if (fileName) { + fileLocation += fileName + + var lineNumber = callSite.getLineNumber() + if (lineNumber != null) { + fileLocation += ':' + lineNumber + + var columnNumber = callSite.getColumnNumber() + if (columnNumber) { + fileLocation += ':' + columnNumber + } + } + } + + return fileLocation || 'unknown source' +} + +/** + * Format a CallSite to a string. + */ + +function callSiteToString (callSite) { + var addSuffix = true + var fileLocation = callSiteFileLocation(callSite) + var functionName = callSite.getFunctionName() + var isConstructor = callSite.isConstructor() + var isMethodCall = !(callSite.isToplevel() || isConstructor) + var line = '' + + if (isMethodCall) { + var methodName = callSite.getMethodName() + var typeName = getConstructorName(callSite) + + if (functionName) { + if (typeName && functionName.indexOf(typeName) !== 0) { + line += typeName + '.' + } + + line += functionName + + if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) { + line += ' [as ' + methodName + ']' + } + } else { + line += typeName + '.' + (methodName || '') + } + } else if (isConstructor) { + line += 'new ' + (functionName || '') + } else if (functionName) { + line += functionName + } else { + addSuffix = false + line += fileLocation + } + + if (addSuffix) { + line += ' (' + fileLocation + ')' + } + + return line +} + +/** + * Get constructor name of reviver. + */ + +function getConstructorName (obj) { + var receiver = obj.receiver + return (receiver.constructor && receiver.constructor.name) || null +} + + +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * depd + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = eventListenerCount + +/** + * Get the count of listeners on an event emitter of a specific type. + */ + +function eventListenerCount (emitter, type) { + return emitter.listeners(type).length +} + + +/***/ }), +/* 133 */ +/***/ (function(module, exports) { + +module.exports = Object.setPrototypeOf || ({__proto__:[]} instanceof Array ? setProtoOf : mixinProperties); + +function setProtoOf(obj, proto) { + obj.__proto__ = proto; + return obj; +} + +function mixinProperties(obj, proto) { + for (var prop in proto) { + if (!obj.hasOwnProperty(prop)) { + obj[prop] = proto[prop]; + } + } + return obj; +} + + +/***/ }), +/* 134 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var BOMChar = '\uFEFF'; + +exports.PrependBOM = PrependBOMWrapper +function PrependBOMWrapper(encoder, options) { + this.encoder = encoder; + this.addBOM = true; +} + +PrependBOMWrapper.prototype.write = function(str) { + if (this.addBOM) { + str = BOMChar + str; + this.addBOM = false; + } + + return this.encoder.write(str); +} + +PrependBOMWrapper.prototype.end = function() { + return this.encoder.end(); +} + + +//------------------------------------------------------------------------------ + +exports.StripBOM = StripBOMWrapper; +function StripBOMWrapper(decoder, options) { + this.decoder = decoder; + this.pass = false; + this.options = options || {}; +} + +StripBOMWrapper.prototype.write = function(buf) { + var res = this.decoder.write(buf); + if (this.pass || !res) + return res; + + if (res[0] === BOMChar) { + res = res.slice(1); + if (typeof this.options.stripBOM === 'function') + this.options.stripBOM(); + } + + this.pass = true; + return res; +} + +StripBOMWrapper.prototype.end = function() { + return this.decoder.end(); +} + + + +/***/ }), +/* 135 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// Update this array if you add/rename/remove files in this directory. +// We support Browserify by skipping automatic module discovery and requiring modules directly. +var modules = [ + __webpack_require__(136), + __webpack_require__(137), + __webpack_require__(138), + __webpack_require__(139), + __webpack_require__(140), + __webpack_require__(141), + __webpack_require__(142), + __webpack_require__(143), +]; + +// Put all encoding/alias/codec definitions to single object and export it. +for (var i = 0; i < modules.length; i++) { + var module = modules[i]; + for (var enc in module) + if (Object.prototype.hasOwnProperty.call(module, enc)) + exports[enc] = module[enc]; +} + + +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var Buffer = __webpack_require__(2).Buffer; + +// Export Node.js internal encodings. + +module.exports = { + // Encodings + utf8: { type: "_internal", bomAware: true}, + cesu8: { type: "_internal", bomAware: true}, + unicode11utf8: "utf8", + + ucs2: { type: "_internal", bomAware: true}, + utf16le: "ucs2", + + binary: { type: "_internal" }, + base64: { type: "_internal" }, + hex: { type: "_internal" }, + + // Codec. + _internal: InternalCodec, +}; + +//------------------------------------------------------------------------------ + +function InternalCodec(codecOptions, iconv) { + this.enc = codecOptions.encodingName; + this.bomAware = codecOptions.bomAware; + + if (this.enc === "base64") + this.encoder = InternalEncoderBase64; + else if (this.enc === "cesu8") { + this.enc = "utf8"; // Use utf8 for decoding. + this.encoder = InternalEncoderCesu8; + + // Add decoder for versions of Node not supporting CESU-8 + if (new Buffer('eda0bdedb2a9', 'hex').toString() !== '💩') { + this.decoder = InternalDecoderCesu8; + this.defaultCharUnicode = iconv.defaultCharUnicode; + } + } +} + +InternalCodec.prototype.encoder = InternalEncoder; +InternalCodec.prototype.decoder = InternalDecoder; + +//------------------------------------------------------------------------------ + +// We use node.js internal decoder. Its signature is the same as ours. +var StringDecoder = __webpack_require__(79).StringDecoder; + +if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method. + StringDecoder.prototype.end = function() {}; + + +function InternalDecoder(options, codec) { + StringDecoder.call(this, codec.enc); +} + +InternalDecoder.prototype = StringDecoder.prototype; + + +//------------------------------------------------------------------------------ +// Encoder is mostly trivial + +function InternalEncoder(options, codec) { + this.enc = codec.enc; +} + +InternalEncoder.prototype.write = function(str) { + return new Buffer(str, this.enc); +} + +InternalEncoder.prototype.end = function() { +} + + +//------------------------------------------------------------------------------ +// Except base64 encoder, which must keep its state. + +function InternalEncoderBase64(options, codec) { + this.prevStr = ''; +} + +InternalEncoderBase64.prototype.write = function(str) { + str = this.prevStr + str; + var completeQuads = str.length - (str.length % 4); + this.prevStr = str.slice(completeQuads); + str = str.slice(0, completeQuads); + + return new Buffer(str, "base64"); +} + +InternalEncoderBase64.prototype.end = function() { + return new Buffer(this.prevStr, "base64"); +} + + +//------------------------------------------------------------------------------ +// CESU-8 encoder is also special. + +function InternalEncoderCesu8(options, codec) { +} + +InternalEncoderCesu8.prototype.write = function(str) { + var buf = new Buffer(str.length * 3), bufIdx = 0; + for (var i = 0; i < str.length; i++) { + var charCode = str.charCodeAt(i); + // Naive implementation, but it works because CESU-8 is especially easy + // to convert from UTF-16 (which all JS strings are encoded in). + if (charCode < 0x80) + buf[bufIdx++] = charCode; + else if (charCode < 0x800) { + buf[bufIdx++] = 0xC0 + (charCode >>> 6); + buf[bufIdx++] = 0x80 + (charCode & 0x3f); + } + else { // charCode will always be < 0x10000 in javascript. + buf[bufIdx++] = 0xE0 + (charCode >>> 12); + buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f); + buf[bufIdx++] = 0x80 + (charCode & 0x3f); + } + } + return buf.slice(0, bufIdx); +} + +InternalEncoderCesu8.prototype.end = function() { +} + +//------------------------------------------------------------------------------ +// CESU-8 decoder is not implemented in Node v4.0+ + +function InternalDecoderCesu8(options, codec) { + this.acc = 0; + this.contBytes = 0; + this.accBytes = 0; + this.defaultCharUnicode = codec.defaultCharUnicode; +} + +InternalDecoderCesu8.prototype.write = function(buf) { + var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, + res = ''; + for (var i = 0; i < buf.length; i++) { + var curByte = buf[i]; + if ((curByte & 0xC0) !== 0x80) { // Leading byte + if (contBytes > 0) { // Previous code is invalid + res += this.defaultCharUnicode; + contBytes = 0; + } + + if (curByte < 0x80) { // Single-byte code + res += String.fromCharCode(curByte); + } else if (curByte < 0xE0) { // Two-byte code + acc = curByte & 0x1F; + contBytes = 1; accBytes = 1; + } else if (curByte < 0xF0) { // Three-byte code + acc = curByte & 0x0F; + contBytes = 2; accBytes = 1; + } else { // Four or more are not supported for CESU-8. + res += this.defaultCharUnicode; + } + } else { // Continuation byte + if (contBytes > 0) { // We're waiting for it. + acc = (acc << 6) | (curByte & 0x3f); + contBytes--; accBytes++; + if (contBytes === 0) { + // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80) + if (accBytes === 2 && acc < 0x80 && acc > 0) + res += this.defaultCharUnicode; + else if (accBytes === 3 && acc < 0x800) + res += this.defaultCharUnicode; + else + // Actually add character. + res += String.fromCharCode(acc); + } + } else { // Unexpected continuation byte + res += this.defaultCharUnicode; + } + } + } + this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes; + return res; +} + +InternalDecoderCesu8.prototype.end = function() { + var res = 0; + if (this.contBytes > 0) + res += this.defaultCharUnicode; + return res; +} + + +/***/ }), +/* 137 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var Buffer = __webpack_require__(2).Buffer; + +// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js + +// == UTF16-BE codec. ========================================================== + +exports.utf16be = Utf16BECodec; +function Utf16BECodec() { +} + +Utf16BECodec.prototype.encoder = Utf16BEEncoder; +Utf16BECodec.prototype.decoder = Utf16BEDecoder; +Utf16BECodec.prototype.bomAware = true; + + +// -- Encoding + +function Utf16BEEncoder() { +} + +Utf16BEEncoder.prototype.write = function(str) { + var buf = new Buffer(str, 'ucs2'); + for (var i = 0; i < buf.length; i += 2) { + var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp; + } + return buf; +} + +Utf16BEEncoder.prototype.end = function() { +} + + +// -- Decoding + +function Utf16BEDecoder() { + this.overflowByte = -1; +} + +Utf16BEDecoder.prototype.write = function(buf) { + if (buf.length == 0) + return ''; + + var buf2 = new Buffer(buf.length + 1), + i = 0, j = 0; + + if (this.overflowByte !== -1) { + buf2[0] = buf[0]; + buf2[1] = this.overflowByte; + i = 1; j = 2; + } + + for (; i < buf.length-1; i += 2, j+= 2) { + buf2[j] = buf[i+1]; + buf2[j+1] = buf[i]; + } + + this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1; + + return buf2.slice(0, j).toString('ucs2'); +} + +Utf16BEDecoder.prototype.end = function() { +} + + +// == UTF-16 codec ============================================================= +// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic. +// Defaults to UTF-16LE, as it's prevalent and default in Node. +// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le +// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'}); + +// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false). + +exports.utf16 = Utf16Codec; +function Utf16Codec(codecOptions, iconv) { + this.iconv = iconv; +} + +Utf16Codec.prototype.encoder = Utf16Encoder; +Utf16Codec.prototype.decoder = Utf16Decoder; + + +// -- Encoding (pass-through) + +function Utf16Encoder(options, codec) { + options = options || {}; + if (options.addBOM === undefined) + options.addBOM = true; + this.encoder = codec.iconv.getEncoder('utf-16le', options); +} + +Utf16Encoder.prototype.write = function(str) { + return this.encoder.write(str); +} + +Utf16Encoder.prototype.end = function() { + return this.encoder.end(); +} + + +// -- Decoding + +function Utf16Decoder(options, codec) { + this.decoder = null; + this.initialBytes = []; + this.initialBytesLen = 0; + + this.options = options || {}; + this.iconv = codec.iconv; +} + +Utf16Decoder.prototype.write = function(buf) { + if (!this.decoder) { + // Codec is not chosen yet. Accumulate initial bytes. + this.initialBytes.push(buf); + this.initialBytesLen += buf.length; + + if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below) + return ''; + + // We have enough bytes -> detect endianness. + var buf = Buffer.concat(this.initialBytes), + encoding = detectEncoding(buf, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + this.initialBytes.length = this.initialBytesLen = 0; + } + + return this.decoder.write(buf); +} + +Utf16Decoder.prototype.end = function() { + if (!this.decoder) { + var buf = Buffer.concat(this.initialBytes), + encoding = detectEncoding(buf, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + + var res = this.decoder.write(buf), + trail = this.decoder.end(); + + return trail ? (res + trail) : res; + } + return this.decoder.end(); +} + +function detectEncoding(buf, defaultEncoding) { + var enc = defaultEncoding || 'utf-16le'; + + if (buf.length >= 2) { + // Check BOM. + if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM + enc = 'utf-16be'; + else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM + enc = 'utf-16le'; + else { + // No BOM found. Try to deduce encoding from initial content. + // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon. + // So, we count ASCII as if it was LE or BE, and decide from that. + var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions + _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even. + + for (var i = 0; i < _len; i += 2) { + if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++; + if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++; + } + + if (asciiCharsBE > asciiCharsLE) + enc = 'utf-16be'; + else if (asciiCharsBE < asciiCharsLE) + enc = 'utf-16le'; + } + } + + return enc; +} + + + + +/***/ }), +/* 138 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var Buffer = __webpack_require__(2).Buffer; + +// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152 +// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3 + +exports.utf7 = Utf7Codec; +exports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7 +function Utf7Codec(codecOptions, iconv) { + this.iconv = iconv; +}; + +Utf7Codec.prototype.encoder = Utf7Encoder; +Utf7Codec.prototype.decoder = Utf7Decoder; +Utf7Codec.prototype.bomAware = true; + + +// -- Encoding + +var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g; + +function Utf7Encoder(options, codec) { + this.iconv = codec.iconv; +} + +Utf7Encoder.prototype.write = function(str) { + // Naive implementation. + // Non-direct chars are encoded as "+-"; single "+" char is encoded as "+-". + return new Buffer(str.replace(nonDirectChars, function(chunk) { + return "+" + (chunk === '+' ? '' : + this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) + + "-"; + }.bind(this))); +} + +Utf7Encoder.prototype.end = function() { +} + + +// -- Decoding + +function Utf7Decoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = ''; +} + +var base64Regex = /[A-Za-z0-9\/+]/; +var base64Chars = []; +for (var i = 0; i < 256; i++) + base64Chars[i] = base64Regex.test(String.fromCharCode(i)); + +var plusChar = '+'.charCodeAt(0), + minusChar = '-'.charCodeAt(0), + andChar = '&'.charCodeAt(0); + +Utf7Decoder.prototype.write = function(buf) { + var res = "", lastI = 0, + inBase64 = this.inBase64, + base64Accum = this.base64Accum; + + // The decoder is more involved as we must handle chunks in stream. + + for (var i = 0; i < buf.length; i++) { + if (!inBase64) { // We're in direct mode. + // Write direct chars until '+' + if (buf[i] == plusChar) { + res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. + lastI = i+1; + inBase64 = true; + } + } else { // We decode base64. + if (!base64Chars[buf[i]]) { // Base64 ended. + if (i == lastI && buf[i] == minusChar) {// "+-" -> "+" + res += "+"; + } else { + var b64str = base64Accum + buf.slice(lastI, i).toString(); + res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be"); + } + + if (buf[i] != minusChar) // Minus is absorbed after base64. + i--; + + lastI = i+1; + inBase64 = false; + base64Accum = ''; + } + } + } + + if (!inBase64) { + res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. + } else { + var b64str = base64Accum + buf.slice(lastI).toString(); + + var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. + base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. + b64str = b64str.slice(0, canBeDecoded); + + res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be"); + } + + this.inBase64 = inBase64; + this.base64Accum = base64Accum; + + return res; +} + +Utf7Decoder.prototype.end = function() { + var res = ""; + if (this.inBase64 && this.base64Accum.length > 0) + res = this.iconv.decode(new Buffer(this.base64Accum, 'base64'), "utf16-be"); + + this.inBase64 = false; + this.base64Accum = ''; + return res; +} + + +// UTF-7-IMAP codec. +// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3) +// Differences: +// * Base64 part is started by "&" instead of "+" +// * Direct characters are 0x20-0x7E, except "&" (0x26) +// * In Base64, "," is used instead of "/" +// * Base64 must not be used to represent direct characters. +// * No implicit shift back from Base64 (should always end with '-') +// * String must end in non-shifted position. +// * "-&" while in base64 is not allowed. + + +exports.utf7imap = Utf7IMAPCodec; +function Utf7IMAPCodec(codecOptions, iconv) { + this.iconv = iconv; +}; + +Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder; +Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder; +Utf7IMAPCodec.prototype.bomAware = true; + + +// -- Encoding + +function Utf7IMAPEncoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = new Buffer(6); + this.base64AccumIdx = 0; +} + +Utf7IMAPEncoder.prototype.write = function(str) { + var inBase64 = this.inBase64, + base64Accum = this.base64Accum, + base64AccumIdx = this.base64AccumIdx, + buf = new Buffer(str.length*5 + 10), bufIdx = 0; + + for (var i = 0; i < str.length; i++) { + var uChar = str.charCodeAt(i); + if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'. + if (inBase64) { + if (base64AccumIdx > 0) { + bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); + base64AccumIdx = 0; + } + + buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. + inBase64 = false; + } + + if (!inBase64) { + buf[bufIdx++] = uChar; // Write direct character + + if (uChar === andChar) // Ampersand -> '&-' + buf[bufIdx++] = minusChar; + } + + } else { // Non-direct character + if (!inBase64) { + buf[bufIdx++] = andChar; // Write '&', then go to base64 mode. + inBase64 = true; + } + if (inBase64) { + base64Accum[base64AccumIdx++] = uChar >> 8; + base64Accum[base64AccumIdx++] = uChar & 0xFF; + + if (base64AccumIdx == base64Accum.length) { + bufIdx += buf.write(base64Accum.toString('base64').replace(/\//g, ','), bufIdx); + base64AccumIdx = 0; + } + } + } + } + + this.inBase64 = inBase64; + this.base64AccumIdx = base64AccumIdx; + + return buf.slice(0, bufIdx); +} + +Utf7IMAPEncoder.prototype.end = function() { + var buf = new Buffer(10), bufIdx = 0; + if (this.inBase64) { + if (this.base64AccumIdx > 0) { + bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); + this.base64AccumIdx = 0; + } + + buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. + this.inBase64 = false; + } + + return buf.slice(0, bufIdx); +} + + +// -- Decoding + +function Utf7IMAPDecoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = ''; +} + +var base64IMAPChars = base64Chars.slice(); +base64IMAPChars[','.charCodeAt(0)] = true; + +Utf7IMAPDecoder.prototype.write = function(buf) { + var res = "", lastI = 0, + inBase64 = this.inBase64, + base64Accum = this.base64Accum; + + // The decoder is more involved as we must handle chunks in stream. + // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end). + + for (var i = 0; i < buf.length; i++) { + if (!inBase64) { // We're in direct mode. + // Write direct chars until '&' + if (buf[i] == andChar) { + res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. + lastI = i+1; + inBase64 = true; + } + } else { // We decode base64. + if (!base64IMAPChars[buf[i]]) { // Base64 ended. + if (i == lastI && buf[i] == minusChar) { // "&-" -> "&" + res += "&"; + } else { + var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/'); + res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be"); + } + + if (buf[i] != minusChar) // Minus may be absorbed after base64. + i--; + + lastI = i+1; + inBase64 = false; + base64Accum = ''; + } + } + } + + if (!inBase64) { + res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. + } else { + var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/'); + + var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. + base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. + b64str = b64str.slice(0, canBeDecoded); + + res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be"); + } + + this.inBase64 = inBase64; + this.base64Accum = base64Accum; + + return res; +} + +Utf7IMAPDecoder.prototype.end = function() { + var res = ""; + if (this.inBase64 && this.base64Accum.length > 0) + res = this.iconv.decode(new Buffer(this.base64Accum, 'base64'), "utf16-be"); + + this.inBase64 = false; + this.base64Accum = ''; + return res; +} + + + + +/***/ }), +/* 139 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var Buffer = __webpack_require__(2).Buffer; + +// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that +// correspond to encoded bytes (if 128 - then lower half is ASCII). + +exports._sbcs = SBCSCodec; +function SBCSCodec(codecOptions, iconv) { + if (!codecOptions) + throw new Error("SBCS codec is called without the data.") + + // Prepare char buffer for decoding. + if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)) + throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)"); + + if (codecOptions.chars.length === 128) { + var asciiString = ""; + for (var i = 0; i < 128; i++) + asciiString += String.fromCharCode(i); + codecOptions.chars = asciiString + codecOptions.chars; + } + + this.decodeBuf = new Buffer(codecOptions.chars, 'ucs2'); + + // Encoding buffer. + var encodeBuf = new Buffer(65536); + encodeBuf.fill(iconv.defaultCharSingleByte.charCodeAt(0)); + + for (var i = 0; i < codecOptions.chars.length; i++) + encodeBuf[codecOptions.chars.charCodeAt(i)] = i; + + this.encodeBuf = encodeBuf; +} + +SBCSCodec.prototype.encoder = SBCSEncoder; +SBCSCodec.prototype.decoder = SBCSDecoder; + + +function SBCSEncoder(options, codec) { + this.encodeBuf = codec.encodeBuf; +} + +SBCSEncoder.prototype.write = function(str) { + var buf = new Buffer(str.length); + for (var i = 0; i < str.length; i++) + buf[i] = this.encodeBuf[str.charCodeAt(i)]; + + return buf; +} + +SBCSEncoder.prototype.end = function() { +} + + +function SBCSDecoder(options, codec) { + this.decodeBuf = codec.decodeBuf; +} + +SBCSDecoder.prototype.write = function(buf) { + // Strings are immutable in JS -> we use ucs2 buffer to speed up computations. + var decodeBuf = this.decodeBuf; + var newBuf = new Buffer(buf.length*2); + var idx1 = 0, idx2 = 0; + for (var i = 0; i < buf.length; i++) { + idx1 = buf[i]*2; idx2 = i*2; + newBuf[idx2] = decodeBuf[idx1]; + newBuf[idx2+1] = decodeBuf[idx1+1]; + } + return newBuf.toString('ucs2'); +} + +SBCSDecoder.prototype.end = function() { +} + + +/***/ }), +/* 140 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// Manually added data to be used by sbcs codec in addition to generated one. + +module.exports = { + // Not supported by iconv, not sure why. + "10029": "maccenteuro", + "maccenteuro": { + "type": "_sbcs", + "chars": "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ" + }, + + "808": "cp808", + "ibm808": "cp808", + "cp808": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ " + }, + + // Aliases of generated encodings. + "ascii8bit": "ascii", + "usascii": "ascii", + "ansix34": "ascii", + "ansix341968": "ascii", + "ansix341986": "ascii", + "csascii": "ascii", + "cp367": "ascii", + "ibm367": "ascii", + "isoir6": "ascii", + "iso646us": "ascii", + "iso646irv": "ascii", + "us": "ascii", + + "latin1": "iso88591", + "latin2": "iso88592", + "latin3": "iso88593", + "latin4": "iso88594", + "latin5": "iso88599", + "latin6": "iso885910", + "latin7": "iso885913", + "latin8": "iso885914", + "latin9": "iso885915", + "latin10": "iso885916", + + "csisolatin1": "iso88591", + "csisolatin2": "iso88592", + "csisolatin3": "iso88593", + "csisolatin4": "iso88594", + "csisolatincyrillic": "iso88595", + "csisolatinarabic": "iso88596", + "csisolatingreek" : "iso88597", + "csisolatinhebrew": "iso88598", + "csisolatin5": "iso88599", + "csisolatin6": "iso885910", + + "l1": "iso88591", + "l2": "iso88592", + "l3": "iso88593", + "l4": "iso88594", + "l5": "iso88599", + "l6": "iso885910", + "l7": "iso885913", + "l8": "iso885914", + "l9": "iso885915", + "l10": "iso885916", + + "isoir14": "iso646jp", + "isoir57": "iso646cn", + "isoir100": "iso88591", + "isoir101": "iso88592", + "isoir109": "iso88593", + "isoir110": "iso88594", + "isoir144": "iso88595", + "isoir127": "iso88596", + "isoir126": "iso88597", + "isoir138": "iso88598", + "isoir148": "iso88599", + "isoir157": "iso885910", + "isoir166": "tis620", + "isoir179": "iso885913", + "isoir199": "iso885914", + "isoir203": "iso885915", + "isoir226": "iso885916", + + "cp819": "iso88591", + "ibm819": "iso88591", + + "cyrillic": "iso88595", + + "arabic": "iso88596", + "arabic8": "iso88596", + "ecma114": "iso88596", + "asmo708": "iso88596", + + "greek" : "iso88597", + "greek8" : "iso88597", + "ecma118" : "iso88597", + "elot928" : "iso88597", + + "hebrew": "iso88598", + "hebrew8": "iso88598", + + "turkish": "iso88599", + "turkish8": "iso88599", + + "thai": "iso885911", + "thai8": "iso885911", + + "celtic": "iso885914", + "celtic8": "iso885914", + "isoceltic": "iso885914", + + "tis6200": "tis620", + "tis62025291": "tis620", + "tis62025330": "tis620", + + "10000": "macroman", + "10006": "macgreek", + "10007": "maccyrillic", + "10079": "maciceland", + "10081": "macturkish", + + "cspc8codepage437": "cp437", + "cspc775baltic": "cp775", + "cspc850multilingual": "cp850", + "cspcp852": "cp852", + "cspc862latinhebrew": "cp862", + "cpgr": "cp869", + + "msee": "cp1250", + "mscyrl": "cp1251", + "msansi": "cp1252", + "msgreek": "cp1253", + "msturk": "cp1254", + "mshebr": "cp1255", + "msarab": "cp1256", + "winbaltrim": "cp1257", + + "cp20866": "koi8r", + "20866": "koi8r", + "ibm878": "koi8r", + "cskoi8r": "koi8r", + + "cp21866": "koi8u", + "21866": "koi8u", + "ibm1168": "koi8u", + + "strk10482002": "rk1048", + + "tcvn5712": "tcvn", + "tcvn57121": "tcvn", + + "gb198880": "iso646cn", + "cn": "iso646cn", + + "csiso14jisc6220ro": "iso646jp", + "jisc62201969ro": "iso646jp", + "jp": "iso646jp", + + "cshproman8": "hproman8", + "r8": "hproman8", + "roman8": "hproman8", + "xroman8": "hproman8", + "ibm1051": "hproman8", + + "mac": "macintosh", + "csmacintosh": "macintosh", +}; + + + +/***/ }), +/* 141 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script. +module.exports = { + "437": "cp437", + "737": "cp737", + "775": "cp775", + "850": "cp850", + "852": "cp852", + "855": "cp855", + "856": "cp856", + "857": "cp857", + "858": "cp858", + "860": "cp860", + "861": "cp861", + "862": "cp862", + "863": "cp863", + "864": "cp864", + "865": "cp865", + "866": "cp866", + "869": "cp869", + "874": "windows874", + "922": "cp922", + "1046": "cp1046", + "1124": "cp1124", + "1125": "cp1125", + "1129": "cp1129", + "1133": "cp1133", + "1161": "cp1161", + "1162": "cp1162", + "1163": "cp1163", + "1250": "windows1250", + "1251": "windows1251", + "1252": "windows1252", + "1253": "windows1253", + "1254": "windows1254", + "1255": "windows1255", + "1256": "windows1256", + "1257": "windows1257", + "1258": "windows1258", + "28591": "iso88591", + "28592": "iso88592", + "28593": "iso88593", + "28594": "iso88594", + "28595": "iso88595", + "28596": "iso88596", + "28597": "iso88597", + "28598": "iso88598", + "28599": "iso88599", + "28600": "iso885910", + "28601": "iso885911", + "28603": "iso885913", + "28604": "iso885914", + "28605": "iso885915", + "28606": "iso885916", + "windows874": { + "type": "_sbcs", + "chars": "€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" + }, + "win874": "windows874", + "cp874": "windows874", + "windows1250": { + "type": "_sbcs", + "chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" + }, + "win1250": "windows1250", + "cp1250": "windows1250", + "windows1251": { + "type": "_sbcs", + "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" + }, + "win1251": "windows1251", + "cp1251": "windows1251", + "windows1252": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "win1252": "windows1252", + "cp1252": "windows1252", + "windows1253": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" + }, + "win1253": "windows1253", + "cp1253": "windows1253", + "windows1254": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" + }, + "win1254": "windows1254", + "cp1254": "windows1254", + "windows1255": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" + }, + "win1255": "windows1255", + "cp1255": "windows1255", + "windows1256": { + "type": "_sbcs", + "chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے" + }, + "win1256": "windows1256", + "cp1256": "windows1256", + "windows1257": { + "type": "_sbcs", + "chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙" + }, + "win1257": "windows1257", + "cp1257": "windows1257", + "windows1258": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" + }, + "win1258": "windows1258", + "cp1258": "windows1258", + "iso88591": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "cp28591": "iso88591", + "iso88592": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" + }, + "cp28592": "iso88592", + "iso88593": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙" + }, + "cp28593": "iso88593", + "iso88594": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙" + }, + "cp28594": "iso88594", + "iso88595": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ" + }, + "cp28595": "iso88595", + "iso88596": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������" + }, + "cp28596": "iso88596", + "iso88597": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" + }, + "cp28597": "iso88597", + "iso88598": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" + }, + "cp28598": "iso88598", + "iso88599": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" + }, + "cp28599": "iso88599", + "iso885910": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨĶ§ĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ" + }, + "cp28600": "iso885910", + "iso885911": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" + }, + "cp28601": "iso885911", + "iso885913": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’" + }, + "cp28603": "iso885913", + "iso885914": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ" + }, + "cp28604": "iso885914", + "iso885915": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "cp28605": "iso885915", + "iso885916": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Š§š©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ" + }, + "cp28606": "iso885916", + "cp437": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm437": "cp437", + "csibm437": "cp437", + "cp737": { + "type": "_sbcs", + "chars": "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ " + }, + "ibm737": "cp737", + "csibm737": "cp737", + "cp775": { + "type": "_sbcs", + "chars": "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£ØפĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ " + }, + "ibm775": "cp775", + "csibm775": "cp775", + "cp850": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " + }, + "ibm850": "cp850", + "csibm850": "cp850", + "cp852": { + "type": "_sbcs", + "chars": "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ " + }, + "ibm852": "cp852", + "csibm852": "cp852", + "cp855": { + "type": "_sbcs", + "chars": "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ " + }, + "ibm855": "cp855", + "csibm855": "cp855", + "cp856": { + "type": "_sbcs", + "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ " + }, + "ibm856": "cp856", + "csibm856": "cp856", + "cp857": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ " + }, + "ibm857": "cp857", + "csibm857": "cp857", + "cp858": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " + }, + "ibm858": "cp858", + "csibm858": "cp858", + "cp860": { + "type": "_sbcs", + "chars": "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm860": "cp860", + "csibm860": "cp860", + "cp861": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm861": "cp861", + "csibm861": "cp861", + "cp862": { + "type": "_sbcs", + "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm862": "cp862", + "csibm862": "cp862", + "cp863": { + "type": "_sbcs", + "chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm863": "cp863", + "csibm863": "cp863", + "cp864": { + "type": "_sbcs", + "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{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�" + }, + "ibm864": "cp864", + "csibm864": "cp864", + "cp865": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm865": "cp865", + "csibm865": "cp865", + "cp866": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ " + }, + "ibm866": "cp866", + "csibm866": "cp866", + "cp869": { + "type": "_sbcs", + "chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ " + }, + "ibm869": "cp869", + "csibm869": "cp869", + "cp922": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖ×ØÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ" + }, + "ibm922": "cp922", + "csibm922": "cp922", + "cp1046": { + "type": "_sbcs", + "chars": "ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�" + }, + "ibm1046": "cp1046", + "csibm1046": "cp1046", + "cp1124": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ" + }, + "ibm1124": "cp1124", + "csibm1124": "cp1124", + "cp1125": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ " + }, + "ibm1125": "cp1125", + "csibm1125": "cp1125", + "cp1129": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" + }, + "ibm1129": "cp1129", + "csibm1129": "cp1129", + "cp1133": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�" + }, + "ibm1133": "cp1133", + "csibm1133": "cp1133", + "cp1161": { + "type": "_sbcs", + "chars": "��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ " + }, + "ibm1161": "cp1161", + "csibm1161": "cp1161", + "cp1162": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" + }, + "ibm1162": "cp1162", + "csibm1162": "cp1162", + "cp1163": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" + }, + "ibm1163": "cp1163", + "csibm1163": "cp1163", + "maccroatian": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ" + }, + "maccyrillic": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" + }, + "macgreek": { + "type": "_sbcs", + "chars": "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�" + }, + "maciceland": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + }, + "macroman": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + }, + "macromania": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + }, + "macthai": { + "type": "_sbcs", + "chars": "«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����" + }, + "macturkish": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ" + }, + "macukraine": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" + }, + "koi8r": { + "type": "_sbcs", + "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "koi8u": { + "type": "_sbcs", + "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "koi8ru": { + "type": "_sbcs", + "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "koi8t": { + "type": "_sbcs", + "chars": "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "armscii8": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�" + }, + "rk1048": { + "type": "_sbcs", + "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" + }, + "tcvn": { + "type": "_sbcs", + "chars": "\u0000ÚỤ\u0003ỪỬỮ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010ỨỰỲỶỸÝỴ\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ" + }, + "georgianacademy": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "georgianps": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "pt154": { + "type": "_sbcs", + "chars": "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" + }, + "viscii": { + "type": "_sbcs", + "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{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ" + }, + "iso646cn": { + "type": "_sbcs", + "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{|}‾��������������������������������������������������������������������������������������������������������������������������������" + }, + "iso646jp": { + "type": "_sbcs", + "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{|}‾��������������������������������������������������������������������������������������������������������������������������������" + }, + "hproman8": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�" + }, + "macintosh": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + }, + "ascii": { + "type": "_sbcs", + "chars": "��������������������������������������������������������������������������������������������������������������������������������" + }, + "tis620": { + "type": "_sbcs", + "chars": "���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" + } +} + +/***/ }), +/* 142 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var Buffer = __webpack_require__(2).Buffer; + +// Multibyte codec. In this scheme, a character is represented by 1 or more bytes. +// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences. +// To save memory and loading time, we read table files only when requested. + +exports._dbcs = DBCSCodec; + +var UNASSIGNED = -1, + GB18030_CODE = -2, + SEQ_START = -10, + NODE_START = -1000, + UNASSIGNED_NODE = new Array(0x100), + DEF_CHAR = -1; + +for (var i = 0; i < 0x100; i++) + UNASSIGNED_NODE[i] = UNASSIGNED; + + +// Class DBCSCodec reads and initializes mapping tables. +function DBCSCodec(codecOptions, iconv) { + this.encodingName = codecOptions.encodingName; + if (!codecOptions) + throw new Error("DBCS codec is called without the data.") + if (!codecOptions.table) + throw new Error("Encoding '" + this.encodingName + "' has no data."); + + // Load tables. + var mappingTable = codecOptions.table(); + + + // Decode tables: MBCS -> Unicode. + + // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256. + // Trie root is decodeTables[0]. + // Values: >= 0 -> unicode character code. can be > 0xFFFF + // == UNASSIGNED -> unknown/unassigned sequence. + // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence. + // <= NODE_START -> index of the next node in our trie to process next byte. + // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq. + this.decodeTables = []; + this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node. + + // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. + this.decodeTableSeq = []; + + // Actual mapping tables consist of chunks. Use them to fill up decode tables. + for (var i = 0; i < mappingTable.length; i++) + this._addDecodeChunk(mappingTable[i]); + + this.defaultCharUnicode = iconv.defaultCharUnicode; + + + // Encode tables: Unicode -> DBCS. + + // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance. + // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null. + // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.). + // == UNASSIGNED -> no conversion found. Output a default char. + // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence. + this.encodeTable = []; + + // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of + // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key + // means end of sequence (needed when one sequence is a strict subsequence of another). + // Objects are kept separately from encodeTable to increase performance. + this.encodeTableSeq = []; + + // Some chars can be decoded, but need not be encoded. + var skipEncodeChars = {}; + if (codecOptions.encodeSkipVals) + for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) { + var val = codecOptions.encodeSkipVals[i]; + if (typeof val === 'number') + skipEncodeChars[val] = true; + else + for (var j = val.from; j <= val.to; j++) + skipEncodeChars[j] = true; + } + + // Use decode trie to recursively fill out encode tables. + this._fillEncodeTable(0, 0, skipEncodeChars); + + // Add more encoding pairs when needed. + if (codecOptions.encodeAdd) { + for (var uChar in codecOptions.encodeAdd) + if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) + this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]); + } + + this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]; + if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?']; + if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0); + + + // Load & create GB18030 tables when needed. + if (typeof codecOptions.gb18030 === 'function') { + this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges. + + // Add GB18030 decode tables. + var thirdByteNodeIdx = this.decodeTables.length; + var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0); + + var fourthByteNodeIdx = this.decodeTables.length; + var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0); + + for (var i = 0x81; i <= 0xFE; i++) { + var secondByteNodeIdx = NODE_START - this.decodeTables[0][i]; + var secondByteNode = this.decodeTables[secondByteNodeIdx]; + for (var j = 0x30; j <= 0x39; j++) + secondByteNode[j] = NODE_START - thirdByteNodeIdx; + } + for (var i = 0x81; i <= 0xFE; i++) + thirdByteNode[i] = NODE_START - fourthByteNodeIdx; + for (var i = 0x30; i <= 0x39; i++) + fourthByteNode[i] = GB18030_CODE + } +} + +DBCSCodec.prototype.encoder = DBCSEncoder; +DBCSCodec.prototype.decoder = DBCSDecoder; + +// Decoder helpers +DBCSCodec.prototype._getDecodeTrieNode = function(addr) { + var bytes = []; + for (; addr > 0; addr >>= 8) + bytes.push(addr & 0xFF); + if (bytes.length == 0) + bytes.push(0); + + var node = this.decodeTables[0]; + for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie. + var val = node[bytes[i]]; + + if (val == UNASSIGNED) { // Create new node. + node[bytes[i]] = NODE_START - this.decodeTables.length; + this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); + } + else if (val <= NODE_START) { // Existing node. + node = this.decodeTables[NODE_START - val]; + } + else + throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16)); + } + return node; +} + + +DBCSCodec.prototype._addDecodeChunk = function(chunk) { + // First element of chunk is the hex mbcs code where we start. + var curAddr = parseInt(chunk[0], 16); + + // Choose the decoding node where we'll write our chars. + var writeTable = this._getDecodeTrieNode(curAddr); + curAddr = curAddr & 0xFF; + + // Write all other elements of the chunk to the table. + for (var k = 1; k < chunk.length; k++) { + var part = chunk[k]; + if (typeof part === "string") { // String, write as-is. + for (var l = 0; l < part.length;) { + var code = part.charCodeAt(l++); + if (0xD800 <= code && code < 0xDC00) { // Decode surrogate + var codeTrail = part.charCodeAt(l++); + if (0xDC00 <= codeTrail && codeTrail < 0xE000) + writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00); + else + throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]); + } + else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used) + var len = 0xFFF - code + 2; + var seq = []; + for (var m = 0; m < len; m++) + seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq. + + writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; + this.decodeTableSeq.push(seq); + } + else + writeTable[curAddr++] = code; // Basic char + } + } + else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character. + var charCode = writeTable[curAddr - 1] + 1; + for (var l = 0; l < part; l++) + writeTable[curAddr++] = charCode++; + } + else + throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]); + } + if (curAddr > 0xFF) + throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); +} + +// Encoder helpers +DBCSCodec.prototype._getEncodeBucket = function(uCode) { + var high = uCode >> 8; // This could be > 0xFF because of astral characters. + if (this.encodeTable[high] === undefined) + this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand. + return this.encodeTable[high]; +} + +DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 0xFF; + if (bucket[low] <= SEQ_START) + this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it. + else if (bucket[low] == UNASSIGNED) + bucket[low] = dbcsCode; +} + +DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { + + // Get the root of character tree according to first character of the sequence. + var uCode = seq[0]; + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 0xFF; + + var node; + if (bucket[low] <= SEQ_START) { + // There's already a sequence with - use it. + node = this.encodeTableSeq[SEQ_START-bucket[low]]; + } + else { + // There was no sequence object - allocate a new one. + node = {}; + if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence. + bucket[low] = SEQ_START - this.encodeTableSeq.length; + this.encodeTableSeq.push(node); + } + + // Traverse the character tree, allocating new nodes as needed. + for (var j = 1; j < seq.length-1; j++) { + var oldVal = node[uCode]; + if (typeof oldVal === 'object') + node = oldVal; + else { + node = node[uCode] = {} + if (oldVal !== undefined) + node[DEF_CHAR] = oldVal + } + } + + // Set the leaf to given dbcsCode. + uCode = seq[seq.length-1]; + node[uCode] = dbcsCode; +} + +DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { + var node = this.decodeTables[nodeIdx]; + for (var i = 0; i < 0x100; i++) { + var uCode = node[i]; + var mbCode = prefix + i; + if (skipEncodeChars[mbCode]) + continue; + + if (uCode >= 0) + this._setEncodeChar(uCode, mbCode); + else if (uCode <= NODE_START) + this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars); + else if (uCode <= SEQ_START) + this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); + } +} + + + +// == Encoder ================================================================== + +function DBCSEncoder(options, codec) { + // Encoder state + this.leadSurrogate = -1; + this.seqObj = undefined; + + // Static data + this.encodeTable = codec.encodeTable; + this.encodeTableSeq = codec.encodeTableSeq; + this.defaultCharSingleByte = codec.defCharSB; + this.gb18030 = codec.gb18030; +} + +DBCSEncoder.prototype.write = function(str) { + var newBuf = new Buffer(str.length * (this.gb18030 ? 4 : 3)), + leadSurrogate = this.leadSurrogate, + seqObj = this.seqObj, nextChar = -1, + i = 0, j = 0; + + while (true) { + // 0. Get next character. + if (nextChar === -1) { + if (i == str.length) break; + var uCode = str.charCodeAt(i++); + } + else { + var uCode = nextChar; + nextChar = -1; + } + + // 1. Handle surrogates. + if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates. + if (uCode < 0xDC00) { // We've got lead surrogate. + if (leadSurrogate === -1) { + leadSurrogate = uCode; + continue; + } else { + leadSurrogate = uCode; + // Double lead surrogate found. + uCode = UNASSIGNED; + } + } else { // We've got trail surrogate. + if (leadSurrogate !== -1) { + uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00); + leadSurrogate = -1; + } else { + // Incomplete surrogate pair - only trail surrogate found. + uCode = UNASSIGNED; + } + + } + } + else if (leadSurrogate !== -1) { + // Incomplete surrogate pair - only lead surrogate found. + nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char. + leadSurrogate = -1; + } + + // 2. Convert uCode character. + var dbcsCode = UNASSIGNED; + if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence + var resCode = seqObj[uCode]; + if (typeof resCode === 'object') { // Sequence continues. + seqObj = resCode; + continue; + + } else if (typeof resCode == 'number') { // Sequence finished. Write it. + dbcsCode = resCode; + + } else if (resCode == undefined) { // Current character is not part of the sequence. + + // Try default character for this sequence + resCode = seqObj[DEF_CHAR]; + if (resCode !== undefined) { + dbcsCode = resCode; // Found. Write it. + nextChar = uCode; // Current character will be written too in the next iteration. + + } else { + // TODO: What if we have no default? (resCode == undefined) + // Then, we should write first char of the sequence as-is and try the rest recursively. + // Didn't do it for now because no encoding has this situation yet. + // Currently, just skip the sequence and write current char. + } + } + seqObj = undefined; + } + else if (uCode >= 0) { // Regular character + var subtable = this.encodeTable[uCode >> 8]; + if (subtable !== undefined) + dbcsCode = subtable[uCode & 0xFF]; + + if (dbcsCode <= SEQ_START) { // Sequence start + seqObj = this.encodeTableSeq[SEQ_START-dbcsCode]; + continue; + } + + if (dbcsCode == UNASSIGNED && this.gb18030) { + // Use GB18030 algorithm to find character(s) to write. + var idx = findIdx(this.gb18030.uChars, uCode); + if (idx != -1) { + var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); + newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600; + newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260; + newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10; + newBuf[j++] = 0x30 + dbcsCode; + continue; + } + } + } + + // 3. Write dbcsCode character. + if (dbcsCode === UNASSIGNED) + dbcsCode = this.defaultCharSingleByte; + + if (dbcsCode < 0x100) { + newBuf[j++] = dbcsCode; + } + else if (dbcsCode < 0x10000) { + newBuf[j++] = dbcsCode >> 8; // high byte + newBuf[j++] = dbcsCode & 0xFF; // low byte + } + else { + newBuf[j++] = dbcsCode >> 16; + newBuf[j++] = (dbcsCode >> 8) & 0xFF; + newBuf[j++] = dbcsCode & 0xFF; + } + } + + this.seqObj = seqObj; + this.leadSurrogate = leadSurrogate; + return newBuf.slice(0, j); +} + +DBCSEncoder.prototype.end = function() { + if (this.leadSurrogate === -1 && this.seqObj === undefined) + return; // All clean. Most often case. + + var newBuf = new Buffer(10), j = 0; + + if (this.seqObj) { // We're in the sequence. + var dbcsCode = this.seqObj[DEF_CHAR]; + if (dbcsCode !== undefined) { // Write beginning of the sequence. + if (dbcsCode < 0x100) { + newBuf[j++] = dbcsCode; + } + else { + newBuf[j++] = dbcsCode >> 8; // high byte + newBuf[j++] = dbcsCode & 0xFF; // low byte + } + } else { + // See todo above. + } + this.seqObj = undefined; + } + + if (this.leadSurrogate !== -1) { + // Incomplete surrogate pair - only lead surrogate found. + newBuf[j++] = this.defaultCharSingleByte; + this.leadSurrogate = -1; + } + + return newBuf.slice(0, j); +} + +// Export for testing +DBCSEncoder.prototype.findIdx = findIdx; + + +// == Decoder ================================================================== + +function DBCSDecoder(options, codec) { + // Decoder state + this.nodeIdx = 0; + this.prevBuf = new Buffer(0); + + // Static data + this.decodeTables = codec.decodeTables; + this.decodeTableSeq = codec.decodeTableSeq; + this.defaultCharUnicode = codec.defaultCharUnicode; + this.gb18030 = codec.gb18030; +} + +DBCSDecoder.prototype.write = function(buf) { + var newBuf = new Buffer(buf.length*2), + nodeIdx = this.nodeIdx, + prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length, + seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence. + uCode; + + if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later. + prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]); + + for (var i = 0, j = 0; i < buf.length; i++) { + var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset]; + + // Lookup in current trie node. + var uCode = this.decodeTables[nodeIdx][curByte]; + + if (uCode >= 0) { + // Normal character, just use it. + } + else if (uCode === UNASSIGNED) { // Unknown char. + // TODO: Callback with seq. + //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); + i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle). + uCode = this.defaultCharUnicode.charCodeAt(0); + } + else if (uCode === GB18030_CODE) { + var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); + var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30); + var idx = findIdx(this.gb18030.gbChars, ptr); + uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; + } + else if (uCode <= NODE_START) { // Go to next trie node. + nodeIdx = NODE_START - uCode; + continue; + } + else if (uCode <= SEQ_START) { // Output a sequence of chars. + var seq = this.decodeTableSeq[SEQ_START - uCode]; + for (var k = 0; k < seq.length - 1; k++) { + uCode = seq[k]; + newBuf[j++] = uCode & 0xFF; + newBuf[j++] = uCode >> 8; + } + uCode = seq[seq.length-1]; + } + else + throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte); + + // Write the character to buffer, handling higher planes using surrogate pair. + if (uCode > 0xFFFF) { + uCode -= 0x10000; + var uCodeLead = 0xD800 + Math.floor(uCode / 0x400); + newBuf[j++] = uCodeLead & 0xFF; + newBuf[j++] = uCodeLead >> 8; + + uCode = 0xDC00 + uCode % 0x400; + } + newBuf[j++] = uCode & 0xFF; + newBuf[j++] = uCode >> 8; + + // Reset trie node. + nodeIdx = 0; seqStart = i+1; + } + + this.nodeIdx = nodeIdx; + this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset); + return newBuf.slice(0, j).toString('ucs2'); +} + +DBCSDecoder.prototype.end = function() { + var ret = ''; + + // Try to parse all remaining chars. + while (this.prevBuf.length > 0) { + // Skip 1 character in the buffer. + ret += this.defaultCharUnicode; + var buf = this.prevBuf.slice(1); + + // Parse remaining as usual. + this.prevBuf = new Buffer(0); + this.nodeIdx = 0; + if (buf.length > 0) + ret += this.write(buf); + } + + this.nodeIdx = 0; + return ret; +} + +// Binary search for GB18030. Returns largest i such that table[i] <= val. +function findIdx(table, val) { + if (table[0] > val) + return -1; + + var l = 0, r = table.length; + while (l < r-1) { // always table[l] <= val < table[r] + var mid = l + Math.floor((r-l+1)/2); + if (table[mid] <= val) + l = mid; + else + r = mid; + } + return l; +} + + + +/***/ }), +/* 143 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// Description of supported double byte encodings and aliases. +// Tables are not require()-d until they are needed to speed up library load. +// require()-s are direct to support Browserify. + +module.exports = { + + // == Japanese/ShiftJIS ==================================================== + // All japanese encodings are based on JIS X set of standards: + // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF. + // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. + // Has several variations in 1978, 1983, 1990 and 1997. + // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead. + // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233. + // 2 planes, first is superset of 0208, second - revised 0212. + // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx) + + // Byte encodings are: + // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte + // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC. + // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI. + // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes. + // 0x00-0x7F - lower part of 0201 + // 0x8E, 0xA1-0xDF - upper part of 0201 + // (0xA1-0xFE)x2 - 0208 plane (94x94). + // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94). + // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon. + // Used as-is in ISO2022 family. + // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, + // 0201-1976 Roman, 0208-1978, 0208-1983. + // * ISO2022-JP-1: Adds esc seq for 0212-1990. + // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7. + // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2. + // * ISO2022-JP-2004: Adds 0213-2004 Plane 1. + // + // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes. + // + // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html + + 'shiftjis': { + type: '_dbcs', + table: function() { return __webpack_require__(144) }, + encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, + encodeSkipVals: [{from: 0xED40, to: 0xF940}], + }, + 'csshiftjis': 'shiftjis', + 'mskanji': 'shiftjis', + 'sjis': 'shiftjis', + 'windows31j': 'shiftjis', + 'ms31j': 'shiftjis', + 'xsjis': 'shiftjis', + 'windows932': 'shiftjis', + 'ms932': 'shiftjis', + '932': 'shiftjis', + 'cp932': 'shiftjis', + + 'eucjp': { + type: '_dbcs', + table: function() { return __webpack_require__(145) }, + encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, + }, + + // TODO: KDDI extension to Shift_JIS + // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes. + // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars. + + + // == Chinese/GBK ========================================================== + // http://en.wikipedia.org/wiki/GBK + // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder + + // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936 + 'gb2312': 'cp936', + 'gb231280': 'cp936', + 'gb23121980': 'cp936', + 'csgb2312': 'cp936', + 'csiso58gb231280': 'cp936', + 'euccn': 'cp936', + + // Microsoft's CP936 is a subset and approximation of GBK. + 'windows936': 'cp936', + 'ms936': 'cp936', + '936': 'cp936', + 'cp936': { + type: '_dbcs', + table: function() { return __webpack_require__(49) }, + }, + + // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other. + 'gbk': { + type: '_dbcs', + table: function() { return __webpack_require__(49).concat(__webpack_require__(80)) }, + }, + 'xgbk': 'gbk', + 'isoir58': 'gbk', + + // GB18030 is an algorithmic extension of GBK. + // Main source: https://www.w3.org/TR/encoding/#gbk-encoder + // http://icu-project.org/docs/papers/gb18030.html + // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml + // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0 + 'gb18030': { + type: '_dbcs', + table: function() { return __webpack_require__(49).concat(__webpack_require__(80)) }, + gb18030: function() { return __webpack_require__(146) }, + encodeSkipVals: [0x80], + encodeAdd: {'€': 0xA2E3}, + }, + + 'chinese': 'gb18030', + + + // == Korean =============================================================== + // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same. + 'windows949': 'cp949', + 'ms949': 'cp949', + '949': 'cp949', + 'cp949': { + type: '_dbcs', + table: function() { return __webpack_require__(147) }, + }, + + 'cseuckr': 'cp949', + 'csksc56011987': 'cp949', + 'euckr': 'cp949', + 'isoir149': 'cp949', + 'korean': 'cp949', + 'ksc56011987': 'cp949', + 'ksc56011989': 'cp949', + 'ksc5601': 'cp949', + + + // == Big5/Taiwan/Hong Kong ================================================ + // There are lots of tables for Big5 and cp950. Please see the following links for history: + // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html + // Variations, in roughly number of defined chars: + // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT + // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/ + // * Big5-2003 (Taiwan standard) almost superset of cp950. + // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers. + // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. + // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years. + // Plus, it has 4 combining sequences. + // 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 + // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way. + // Implementations are not consistent within browsers; sometimes labeled as just big5. + // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied. + // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31 + // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s. + // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt + // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt + // + // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder + // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong. + + 'windows950': 'cp950', + 'ms950': 'cp950', + '950': 'cp950', + 'cp950': { + type: '_dbcs', + table: function() { return __webpack_require__(81) }, + }, + + // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus. + 'big5': 'big5hkscs', + 'big5hkscs': { + type: '_dbcs', + table: function() { return __webpack_require__(81).concat(__webpack_require__(148)) }, + encodeSkipVals: [0xa2cc], + }, + + 'cnbig5': 'big5hkscs', + 'csbig5': 'big5hkscs', + 'xxbig5': 'big5hkscs', +}; + + +/***/ }), +/* 144 */ +/***/ (function(module, exports) { + +module.exports = [["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","髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"]] + +/***/ }), +/* 145 */ +/***/ (function(module, exports) { + +module.exports = [["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,"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"]] + +/***/ }), +/* 146 */ +/***/ (function(module, exports) { + +module.exports = {"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]} + +/***/ }), +/* 147 */ +/***/ (function(module, exports) { + +module.exports = [["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","爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"]] + +/***/ }), +/* 148 */ +/***/ (function(module, exports) { + +module.exports = [["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","𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"]] + +/***/ }), +/* 149 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Buffer = __webpack_require__(2).Buffer, + Transform = __webpack_require__(5).Transform; + + +// == Exports ================================================================== +module.exports = function(iconv) { + + // Additional Public API. + iconv.encodeStream = function encodeStream(encoding, options) { + return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); + } + + iconv.decodeStream = function decodeStream(encoding, options) { + return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); + } + + iconv.supportsStreams = true; + + + // Not published yet. + iconv.IconvLiteEncoderStream = IconvLiteEncoderStream; + iconv.IconvLiteDecoderStream = IconvLiteDecoderStream; + iconv._collect = IconvLiteDecoderStream.prototype.collect; +}; + + +// == Encoder stream ======================================================= +function IconvLiteEncoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.decodeStrings = false; // We accept only strings, so we don't need to decode them. + Transform.call(this, options); +} + +IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteEncoderStream } +}); + +IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { + if (typeof chunk != 'string') + return done(new Error("Iconv encoding stream needs strings as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) this.push(res); + done(); + } + catch (e) { + done(e); + } +} + +IconvLiteEncoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) this.push(res); + done(); + } + catch (e) { + done(e); + } +} + +IconvLiteEncoderStream.prototype.collect = function(cb) { + var chunks = []; + this.on('error', cb); + this.on('data', function(chunk) { chunks.push(chunk); }); + this.on('end', function() { + cb(null, Buffer.concat(chunks)); + }); + return this; +} + + +// == Decoder stream ======================================================= +function IconvLiteDecoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.encoding = this.encoding = 'utf8'; // We output strings. + Transform.call(this, options); +} + +IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteDecoderStream } +}); + +IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { + if (!Buffer.isBuffer(chunk)) + return done(new Error("Iconv decoding stream needs buffers as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) this.push(res, this.encoding); + done(); + } + catch (e) { + done(e); + } +} + +IconvLiteDecoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) this.push(res, this.encoding); + done(); + } + catch (e) { + done(e); + } +} + +IconvLiteDecoderStream.prototype.collect = function(cb) { + var res = ''; + this.on('error', cb); + this.on('data', function(chunk) { res += chunk; }); + this.on('end', function() { + cb(null, res); + }); + return this; +} + + + +/***/ }), +/* 150 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var Buffer = __webpack_require__(2).Buffer; + +// == Extend Node primitives to use iconv-lite ================================= + +module.exports = function (iconv) { + var original = undefined; // Place to keep original methods. + + // Node authors rewrote Buffer internals to make it compatible with + // Uint8Array and we cannot patch key functions since then. + iconv.supportsNodeEncodingsExtension = !(new Buffer(0) instanceof Uint8Array); + + iconv.extendNodeEncodings = function extendNodeEncodings() { + if (original) return; + original = {}; + + if (!iconv.supportsNodeEncodingsExtension) { + console.error("ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node"); + console.error("See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility"); + return; + } + + var nodeNativeEncodings = { + 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, + 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true, + }; + + Buffer.isNativeEncoding = function(enc) { + return enc && nodeNativeEncodings[enc.toLowerCase()]; + } + + // -- SlowBuffer ----------------------------------------------------------- + var SlowBuffer = __webpack_require__(2).SlowBuffer; + + original.SlowBufferToString = SlowBuffer.prototype.toString; + SlowBuffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.SlowBufferToString.call(this, encoding, start, end); + + // Otherwise, use our decoding method. + if (typeof start == 'undefined') start = 0; + if (typeof end == 'undefined') end = this.length; + return iconv.decode(this.slice(start, end), encoding); + } + + original.SlowBufferWrite = SlowBuffer.prototype.write; + SlowBuffer.prototype.write = function(string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.SlowBufferWrite.call(this, string, offset, length, encoding); + + if (string.length > 0 && (length < 0 || offset < 0)) + throw new RangeError('attempt to write beyond buffer bounds'); + + // Otherwise, use our encoding method. + var buf = iconv.encode(string, encoding); + if (buf.length < length) length = buf.length; + buf.copy(this, offset, 0, length); + return length; + } + + // -- Buffer --------------------------------------------------------------- + + original.BufferIsEncoding = Buffer.isEncoding; + Buffer.isEncoding = function(encoding) { + return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding); + } + + original.BufferByteLength = Buffer.byteLength; + Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) { + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.BufferByteLength.call(this, str, encoding); + + // Slow, I know, but we don't have a better way yet. + return iconv.encode(str, encoding).length; + } + + original.BufferToString = Buffer.prototype.toString; + Buffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.BufferToString.call(this, encoding, start, end); + + // Otherwise, use our decoding method. + if (typeof start == 'undefined') start = 0; + if (typeof end == 'undefined') end = this.length; + return iconv.decode(this.slice(start, end), encoding); + } + + original.BufferWrite = Buffer.prototype.write; + Buffer.prototype.write = function(string, offset, length, encoding) { + var _offset = offset, _length = length, _encoding = encoding; + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.BufferWrite.call(this, string, _offset, _length, _encoding); + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + + if (string.length > 0 && (length < 0 || offset < 0)) + throw new RangeError('attempt to write beyond buffer bounds'); + + // Otherwise, use our encoding method. + var buf = iconv.encode(string, encoding); + if (buf.length < length) length = buf.length; + buf.copy(this, offset, 0, length); + return length; + + // TODO: Set _charsWritten. + } + + + // -- Readable ------------------------------------------------------------- + if (iconv.supportsStreams) { + var Readable = __webpack_require__(5).Readable; + + original.ReadableSetEncoding = Readable.prototype.setEncoding; + Readable.prototype.setEncoding = function setEncoding(enc, options) { + // Use our own decoder, it has the same interface. + // We cannot use original function as it doesn't handle BOM-s. + this._readableState.decoder = iconv.getDecoder(enc, options); + this._readableState.encoding = enc; + } + + Readable.prototype.collect = iconv._collect; + } + } + + // Remove iconv-lite Node primitive extensions. + iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() { + if (!iconv.supportsNodeEncodingsExtension) + return; + if (!original) + throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.") + + delete Buffer.isNativeEncoding; + + var SlowBuffer = __webpack_require__(2).SlowBuffer; + + SlowBuffer.prototype.toString = original.SlowBufferToString; + SlowBuffer.prototype.write = original.SlowBufferWrite; + + Buffer.isEncoding = original.BufferIsEncoding; + Buffer.byteLength = original.BufferByteLength; + Buffer.prototype.toString = original.BufferToString; + Buffer.prototype.write = original.BufferWrite; + + if (iconv.supportsStreams) { + var Readable = __webpack_require__(5).Readable; + + Readable.prototype.setEncoding = original.ReadableSetEncoding; + delete Readable.prototype.collect; + } + + original = undefined; + } +} + + +/***/ }), +/* 151 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * ee-first + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = first + +/** + * Get the first event in a set of event emitters and event pairs. + * + * @param {array} stuff + * @param {function} done + * @public + */ + +function first(stuff, done) { + if (!Array.isArray(stuff)) + throw new TypeError('arg must be an array of [ee, events...] arrays') + + var cleanups = [] + + for (var i = 0; i < stuff.length; i++) { + var arr = stuff[i] + + if (!Array.isArray(arr) || arr.length < 2) + throw new TypeError('each array member must be [ee, events...]') + + var ee = arr[0] + + for (var j = 1; j < arr.length; j++) { + var event = arr[j] + var fn = listener(event, callback) + + // listen to the event + ee.on(event, fn) + // push this listener to the list of cleanups + cleanups.push({ + ee: ee, + event: event, + fn: fn, + }) + } + } + + function callback() { + cleanup() + done.apply(null, arguments) + } + + function cleanup() { + var x + for (var i = 0; i < cleanups.length; i++) { + x = cleanups[i] + x.ee.removeListener(x.event, x.fn) + } + } + + function thunk(fn) { + done = fn + } + + thunk.cancel = cleanup + + return thunk +} + +/** + * Create the event listener. + * @private + */ + +function listener(event, done) { + return function onevent(arg1) { + var args = new Array(arguments.length) + var ee = this + var err = event === 'error' + ? arg1 + : null + + // copy args to prevent arguments escaping scope + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + + done(err, ee, event, args) + } +} + + +/***/ }), +/* 152 */ +/***/ (function(module, exports) { + +module.exports = require("zlib"); + +/***/ }), +/* 153 */ +/***/ (function(module, exports) { + +/*! + * media-typer + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * RegExp to match *( ";" parameter ) in RFC 2616 sec 3.7 + * + * parameter = token "=" ( token | quoted-string ) + * token = 1* + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) + * qdtext = > + * quoted-pair = "\" CHAR + * CHAR = + * TEXT = + * LWS = [CRLF] 1*( SP | HT ) + * CRLF = CR LF + * CR = + * LF = + * SP = + * SHT = + * CTL = + * OCTET = + */ +var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u0020-\u007e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g; +var textRegExp = /^[\u0020-\u007e\u0080-\u00ff]+$/ +var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/ + +/** + * RegExp to match quoted-pair in RFC 2616 + * + * quoted-pair = "\" CHAR + * CHAR = + */ +var qescRegExp = /\\([\u0000-\u007f])/g; + +/** + * RegExp to match chars that must be quoted-pair in RFC 2616 + */ +var quoteRegExp = /([\\"])/g; + +/** + * RegExp to match type in RFC 6838 + * + * type-name = restricted-name + * subtype-name = restricted-name + * restricted-name = restricted-name-first *126restricted-name-chars + * restricted-name-first = ALPHA / DIGIT + * restricted-name-chars = ALPHA / DIGIT / "!" / "#" / + * "$" / "&" / "-" / "^" / "_" + * restricted-name-chars =/ "." ; Characters before first dot always + * ; specify a facet name + * restricted-name-chars =/ "+" ; Characters after last plus always + * ; specify a structured syntax suffix + * ALPHA = %x41-5A / %x61-7A ; A-Z / a-z + * DIGIT = %x30-39 ; 0-9 + */ +var subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/ +var typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/ +var typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/; + +/** + * Module exports. + */ + +exports.format = format +exports.parse = parse + +/** + * Format object to media type. + * + * @param {object} obj + * @return {string} + * @api public + */ + +function format(obj) { + if (!obj || typeof obj !== 'object') { + throw new TypeError('argument obj is required') + } + + var parameters = obj.parameters + var subtype = obj.subtype + var suffix = obj.suffix + var type = obj.type + + if (!type || !typeNameRegExp.test(type)) { + throw new TypeError('invalid type') + } + + if (!subtype || !subtypeNameRegExp.test(subtype)) { + throw new TypeError('invalid subtype') + } + + // format as type/subtype + var string = type + '/' + subtype + + // append +suffix + if (suffix) { + if (!typeNameRegExp.test(suffix)) { + throw new TypeError('invalid suffix') + } + + string += '+' + suffix + } + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + if (!tokenRegExp.test(param)) { + throw new TypeError('invalid parameter name') + } + + string += '; ' + param + '=' + qstring(parameters[param]) + } + } + + return string +} + +/** + * Parse media type to object. + * + * @param {string|object} string + * @return {Object} + * @api public + */ + +function parse(string) { + if (!string) { + throw new TypeError('argument string is required') + } + + // support req/res-like objects as argument + if (typeof string === 'object') { + string = getcontenttype(string) + } + + if (typeof string !== 'string') { + throw new TypeError('argument string is required to be a string') + } + + var index = string.indexOf(';') + var type = index !== -1 + ? string.substr(0, index) + : string + + var key + var match + var obj = splitType(type) + var params = {} + var value + + paramRegExp.lastIndex = index + + while (match = paramRegExp.exec(string)) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(qescRegExp, '$1') + } + + params[key] = value + } + + if (index !== -1 && index !== string.length) { + throw new TypeError('invalid parameter format') + } + + obj.parameters = params + + return obj +} + +/** + * Get content-type from req/res objects. + * + * @param {object} + * @return {Object} + * @api private + */ + +function getcontenttype(obj) { + if (typeof obj.getHeader === 'function') { + // res-like + return obj.getHeader('content-type') + } + + if (typeof obj.headers === 'object') { + // req-like + return obj.headers && obj.headers['content-type'] + } +} + +/** + * Quote a string if necessary. + * + * @param {string} val + * @return {string} + * @api private + */ + +function qstring(val) { + var str = String(val) + + // no need to quote tokens + if (tokenRegExp.test(str)) { + return str + } + + if (str.length > 0 && !textRegExp.test(str)) { + throw new TypeError('invalid parameter value') + } + + return '"' + str.replace(quoteRegExp, '\\$1') + '"' +} + +/** + * Simply "type/subtype+siffx" into parts. + * + * @param {string} string + * @return {Object} + * @api private + */ + +function splitType(string) { + var match = typeRegExp.exec(string.toLowerCase()) + + if (!match) { + throw new TypeError('invalid media type') + } + + var type = match[1] + var subtype = match[2] + var suffix + + // suffix after last + + var index = subtype.lastIndexOf('+') + if (index !== -1) { + suffix = subtype.substr(index + 1) + subtype = subtype.substr(0, index) + } + + var obj = { + type: type, + subtype: subtype, + suffix: suffix + } + + return obj +} + + +/***/ }), +/* 154 */ +/***/ (function(module, exports, __webpack_require__) { + +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = __webpack_require__(155) + + +/***/ }), +/* 155 */ +/***/ (function(module, exports) { + +module.exports = {"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana"},"application/3gpp-ims+xml":{"source":"iana"},"application/a2l":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana"},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","extensions":["atomsvc"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana"},"application/bacnet-xdd+zip":{"source":"iana"},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana"},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana"},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/cbor":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana"},"application/ccxml+xml":{"source":"iana","extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana"},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana"},"application/cellml+xml":{"source":"iana"},"application/cfw":{"source":"iana"},"application/clue_info+xml":{"source":"iana"},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana"},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana"},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana"},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana"},"application/cstadata+xml":{"source":"iana"},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana"},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana"},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/docbook+xml":{"source":"apache","extensions":["dbk"]},"application/dskpp+xml":{"source":"iana"},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/emergencycalldata.comment+xml":{"source":"iana"},"application/emergencycalldata.control+xml":{"source":"iana"},"application/emergencycalldata.deviceinfo+xml":{"source":"iana"},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana"},"application/emergencycalldata.serviceinfo+xml":{"source":"iana"},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana"},"application/emergencycalldata.veds+xml":{"source":"iana"},"application/emma+xml":{"source":"iana","extensions":["emma"]},"application/emotionml+xml":{"source":"iana"},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana"},"application/epub+zip":{"source":"iana","extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana"},"application/fhir+xml":{"source":"iana"},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false,"extensions":["woff"]},"application/framework-attributes+xml":{"source":"iana"},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geoxacml+xml":{"source":"iana"},"application/gml+xml":{"source":"iana","extensions":["gml"]},"application/gpx+xml":{"source":"apache","extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana"},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana"},"application/ibe-pkg-reply+xml":{"source":"iana"},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana"},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana"},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana"},"application/kpml-response+xml":{"source":"iana"},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana"},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana"},"application/lost+xml":{"source":"iana","extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana"},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","extensions":["mads"]},"application/manifest+json":{"charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana"},"application/mathml-presentation+xml":{"source":"iana"},"application/mbms-associated-procedure-description+xml":{"source":"iana"},"application/mbms-deregister+xml":{"source":"iana"},"application/mbms-envelope+xml":{"source":"iana"},"application/mbms-msk+xml":{"source":"iana"},"application/mbms-msk-response+xml":{"source":"iana"},"application/mbms-protection-description+xml":{"source":"iana"},"application/mbms-reception-report+xml":{"source":"iana"},"application/mbms-register+xml":{"source":"iana"},"application/mbms-register-response+xml":{"source":"iana"},"application/mbms-schedule+xml":{"source":"iana"},"application/mbms-user-service-description+xml":{"source":"iana"},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana"},"application/media_control+xml":{"source":"iana"},"application/mediaservercontrol+xml":{"source":"iana","extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","extensions":["meta4"]},"application/mets+xml":{"source":"iana","extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mmt-usd+xml":{"source":"iana"},"application/mods+xml":{"source":"iana","extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana"},"application/mrb-publish+xml":{"source":"iana"},"application/msc-ivr+xml":{"source":"iana"},"application/msc-mixer+xml":{"source":"iana"},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana"},"application/n-triples":{"source":"iana"},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana"},"application/news-groupinfo":{"source":"iana"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana"},"application/node":{"source":"iana"},"application/nss":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p2p-overlay+xml":{"source":"iana"},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana"},"application/pidf-diff+xml":{"source":"iana"},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","extensions":["pls"]},"application/poc-settings+xml":{"source":"iana"},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana"},"application/provenance+xml":{"source":"iana"},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.hpub+zip":{"source":"iana"},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana"},"application/pskc+xml":{"source":"iana","extensions":["pskcxml"]},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf"]},"application/reginfo+xml":{"source":"iana","extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","extensions":["rld"]},"application/rfc+xml":{"source":"iana"},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana"},"application/rls-services+xml":{"source":"iana","extensions":["rs"]},"application/route-apd+xml":{"source":"iana"},"application/route-s-tsid+xml":{"source":"iana"},"application/route-usd+xml":{"source":"iana"},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana"},"application/samlmetadata+xml":{"source":"iana"},"application/sbml+xml":{"source":"iana","extensions":["sbml"]},"application/scaip+xml":{"source":"iana"},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/sep+xml":{"source":"iana"},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","extensions":["shf"]},"application/sieve":{"source":"iana"},"application/simple-filter+xml":{"source":"iana"},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","extensions":["srx"]},"application/spirits-event+xml":{"source":"iana"},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","extensions":["grxml"]},"application/sru+xml":{"source":"iana","extensions":["sru"]},"application/ssdl+xml":{"source":"apache","extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","extensions":["ssml"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/tei+xml":{"source":"iana","extensions":["tei","teicorpus"]},"application/thraud+xml":{"source":"iana","extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tnauthlist":{"source":"iana"},"application/trig":{"source":"iana"},"application/ttml+xml":{"source":"iana"},"application/tve-trigger":{"source":"iana"},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana"},"application/urc-ressheet+xml":{"source":"iana"},"application/urc-targetdesc+xml":{"source":"iana"},"application/urc-uisocketdesc+xml":{"source":"iana"},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana"},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana"},"application/vnd.3gpp-prose+xml":{"source":"iana"},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana"},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana"},"application/vnd.3gpp.bsf+xml":{"source":"iana"},"application/vnd.3gpp.gmop+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana"},"application/vnd.3gpp.mid-call+xml":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana"},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana"},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana"},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana"},"application/vnd.3gpp.ussd+xml":{"source":"iana"},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana"},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","extensions":["mpkg"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana"},"application/vnd.balsamiq.bmml+xml":{"source":"iana"},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana"},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana"},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana"},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","extensions":["wbs"]},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana"},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana"},"application/vnd.cybank":{"source":"iana"},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume-movie":{"source":"iana"},"application/vnd.desmume.movie":{"source":"apache"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana"},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana"},"application/vnd.dvb.notif-container+xml":{"source":"iana"},"application/vnd.dvb.notif-generic+xml":{"source":"iana"},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana"},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana"},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana"},"application/vnd.dvb.notif-init+xml":{"source":"iana"},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana"},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana"},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana"},"application/vnd.eszigno3+xml":{"source":"iana","extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana"},"application/vnd.etsi.asic-e+zip":{"source":"iana"},"application/vnd.etsi.asic-s+zip":{"source":"iana"},"application/vnd.etsi.cug+xml":{"source":"iana"},"application/vnd.etsi.iptvcommand+xml":{"source":"iana"},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana"},"application/vnd.etsi.iptvprofile+xml":{"source":"iana"},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana"},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana"},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana"},"application/vnd.etsi.iptvservice+xml":{"source":"iana"},"application/vnd.etsi.iptvsync+xml":{"source":"iana"},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana"},"application/vnd.etsi.mcid+xml":{"source":"iana"},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana"},"application/vnd.etsi.pstn+xml":{"source":"iana"},"application/vnd.etsi.sci+xml":{"source":"iana"},"application/vnd.etsi.simservs+xml":{"source":"iana"},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana"},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana"},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana"},"application/vnd.gov.sk.e-form+zip":{"source":"iana"},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana"},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana"},"application/vnd.imagemeter.image+zip":{"source":"iana"},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana"},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana"},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana"},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana"},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana"},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana"},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana"},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana"},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana"},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","extensions":["lasxml"]},"application/vnd.liberty-request+xml":{"source":"iana"},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","extensions":["lbe"]},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana"},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana"},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana"},"application/vnd.marlin.drm.license+xml":{"source":"iana"},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana"},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana"},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana"},"application/vnd.ms-printing.printticket+xml":{"source":"apache"},"application/vnd.ms-printschematicket+xml":{"source":"iana"},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana"},"application/vnd.nokia.iptv.config+xml":{"source":"iana"},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana"},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana"},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana"},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana"},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana"},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana"},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana"},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana"},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana"},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana"},"application/vnd.oipf.spdlist+xml":{"source":"iana"},"application/vnd.oipf.ueprofile+xml":{"source":"iana"},"application/vnd.oipf.userprofile+xml":{"source":"iana"},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana"},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana"},"application/vnd.oma.bcast.imd+xml":{"source":"iana"},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana"},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana"},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana"},"application/vnd.oma.bcast.sprov+xml":{"source":"iana"},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana"},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana"},"application/vnd.oma.cab-pcc+xml":{"source":"iana"},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana"},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana"},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana"},"application/vnd.oma.group-usage-list+xml":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana"},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana"},"application/vnd.oma.poc.final-report+xml":{"source":"iana"},"application/vnd.oma.poc.groups+xml":{"source":"iana"},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana"},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana"},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana"},"application/vnd.oma.xcap-directory+xml":{"source":"iana"},"application/vnd.omads-email+xml":{"source":"iana"},"application/vnd.omads-file+xml":{"source":"iana"},"application/vnd.omads-folder+xml":{"source":"iana"},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana"},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana"},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana"},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana"},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana"},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana"},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos+xml":{"source":"iana"},"application/vnd.paos.xml":{"source":"apache"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana"},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana"},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana"},"application/vnd.radisys.msml+xml":{"source":"iana"},"application/vnd.radisys.msml-audit+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana"},"application/vnd.radisys.msml-conf+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana"},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana"},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.software602.filler.form+xml":{"source":"iana"},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana"},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana"},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana"},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana"},"application/vnd.wv.ssp+xml":{"source":"iana"},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana"},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana"},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"apache","extensions":["der","crt","pem"]},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana"},"application/xaml+xml":{"source":"apache","extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana"},"application/xcap-caps+xml":{"source":"iana"},"application/xcap-diff+xml":{"source":"iana","extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana"},"application/xcap-error+xml":{"source":"iana"},"application/xcap-ns+xml":{"source":"iana"},"application/xcon-conference-info+xml":{"source":"iana"},"application/xcon-conference-info-diff+xml":{"source":"iana"},"application/xenc+xml":{"source":"iana","extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache"},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana"},"application/xmpp+xml":{"source":"iana"},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","extensions":["xpl"]},"application/xslt+xml":{"source":"iana","extensions":["xslt"]},"application/xspf+xml":{"source":"apache","extensions":["xspf"]},"application/xv+xml":{"source":"iana","extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana"},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana"},"application/yin+xml":{"source":"iana","extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana"},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana"},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana"},"image/apng":{"compressible":false,"extensions":["apng"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana"},"image/emf":{"source":"iana"},"image/fits":{"source":"iana"},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana"},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana"},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana"},"image/tiff":{"source":"iana","compressible":false,"extensions":["tiff","tif"]},"image/tiff-fx":{"source":"iana"},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana"},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana"},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana"},"image/vnd.valve.source.texture":{"source":"iana"},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana"},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana"},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/vnd.collada+xml":{"source":"iana","extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana"},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana"},"model/vnd.parasolid.transmit.binary":{"source":"iana"},"model/vnd.parasolid.transmit.text":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.valve.source.compiled-map":{"source":"iana"},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana"},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana"},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana","compressible":false},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shex":{"extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana"},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vp8":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}} + +/***/ }), +/* 156 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + */ + +var bytes = __webpack_require__(18) +var debug = __webpack_require__(4)('body-parser:raw') +var read = __webpack_require__(36) +var typeis = __webpack_require__(20) + +/** + * Module exports. + */ + +module.exports = raw + +/** + * Create a middleware to parse raw bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function raw (options) { + var opts = options || {} + + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/octet-stream' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function rawParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // read + read(req, res, next, parse, debug, { + encoding: null, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} + + +/***/ }), +/* 157 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + */ + +var bytes = __webpack_require__(18) +var contentType = __webpack_require__(33) +var debug = __webpack_require__(4)('body-parser:text') +var read = __webpack_require__(36) +var typeis = __webpack_require__(20) + +/** + * Module exports. + */ + +module.exports = text + +/** + * Create a middleware to parse text bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function text (options) { + var opts = options || {} + + var defaultCharset = opts.defaultCharset || 'utf-8' + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'text/plain' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function textParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // get charset + var charset = getCharset(req) || defaultCharset + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} + + +/***/ }), +/* 158 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var bytes = __webpack_require__(18) +var contentType = __webpack_require__(33) +var createError = __webpack_require__(34) +var debug = __webpack_require__(4)('body-parser:urlencoded') +var deprecate = __webpack_require__(7)('body-parser') +var read = __webpack_require__(36) +var typeis = __webpack_require__(20) + +/** + * Module exports. + */ + +module.exports = urlencoded + +/** + * Cache of parser modules. + */ + +var parsers = Object.create(null) + +/** + * Create a middleware to parse urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function urlencoded (options) { + var opts = options || {} + + // notice because option default will flip in next major + if (opts.extended === undefined) { + deprecate('undefined extended: provide extended option') + } + + var extended = opts.extended !== false + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/x-www-form-urlencoded' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate query parser + var queryparse = extended + ? extendedparser(opts) + : simpleparser(opts) + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + return body.length + ? queryparse(body) + : {} + } + + return function urlencodedParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset + var charset = getCharset(req) || 'utf-8' + if (charset !== 'utf-8') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset, + type: 'charset.unsupported' + })) + return + } + + // read + read(req, res, next, parse, debug, { + debug: debug, + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the extended query parser. + * + * @param {object} options + */ + +function extendedparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + var parse = parser('qs') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters', { + type: 'parameters.too.many' + }) + } + + var arrayLimit = Math.max(100, paramCount) + + debug('parse extended urlencoding') + return parse(body, { + allowPrototypes: true, + arrayLimit: arrayLimit, + depth: Infinity, + parameterLimit: parameterLimit + }) + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Count the number of parameters, stopping once limit reached + * + * @param {string} body + * @param {number} limit + * @api private + */ + +function parameterCount (body, limit) { + var count = 0 + var index = 0 + + while ((index = body.indexOf('&', index)) !== -1) { + count++ + index++ + + if (count === limit) { + return undefined + } + } + + return count +} + +/** + * Get parser for module name dynamically. + * + * @param {string} name + * @return {function} + * @api private + */ + +function parser (name) { + var mod = parsers[name] + + if (mod !== undefined) { + return mod.parse + } + + // this uses a switch for static require analysis + switch (name) { + case 'qs': + mod = __webpack_require__(50) + break + case 'querystring': + mod = __webpack_require__(86) + break + } + + // store to prevent invoking require() + parsers[name] = mod + + return mod.parse +} + +/** + * Get the simple query parser. + * + * @param {object} options + */ + +function simpleparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + var parse = parser('querystring') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters', { + type: 'parameters.too.many' + }) + } + + debug('parse urlencoding') + return parse(body, undefined, undefined, {maxKeys: parameterLimit}) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} + + +/***/ }), +/* 159 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(84); +var formats = __webpack_require__(85); + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { // eslint-disable-line func-name-matching + return prefix + '[]'; + }, + indices: function indices(prefix, key) { // eslint-disable-line func-name-matching + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { // eslint-disable-line func-name-matching + return prefix; + } +}; + +var toISO = Date.prototype.toISOString; + +var defaults = { + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var stringify = function stringify( // eslint-disable-line func-name-matching + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix; + } + + obj = ''; + } + + if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (Array.isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + if (Array.isArray(obj)) { + values = values.concat(stringify( + obj[key], + generateArrayPrefix(prefix, key), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } else { + values = values.concat(stringify( + obj[key], + prefix + (allowDots ? '.' + key : '[' + key + ']'), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + } + + return values; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = opts ? utils.assign({}, opts) : {}; + + if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; + var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; + var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; + var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder; + var sort = typeof options.sort === 'function' ? options.sort : null; + var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; + var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; + var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly; + if (typeof options.format === 'undefined') { + options.format = formats['default']; + } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { + throw new TypeError('Unknown format option provided.'); + } + var formatter = formats.formatters[options.format]; + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (Array.isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (options.arrayFormat in arrayPrefixGenerators) { + arrayFormat = options.arrayFormat; + } else if ('indices' in options) { + arrayFormat = options.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (sort) { + objKeys.sort(sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + keys = keys.concat(stringify( + obj[key], + key, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encode ? encoder : null, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + + var joined = keys.join(delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + return joined.length > 0 ? prefix + joined : ''; +}; + + +/***/ }), +/* 160 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(84); + +var has = Object.prototype.hasOwnProperty; + +var defaults = { + allowDots: false, + allowPrototypes: false, + arrayLimit: 20, + decoder: utils.decode, + delimiter: '&', + depth: 5, + parameterLimit: 1000, + plainObjects: false, + strictNullHandling: false +}; + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + + for (var i = 0; i < parts.length; ++i) { + var part = parts[i]; + + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; + + var key, val; + if (pos === -1) { + key = options.decoder(part, defaults.decoder); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder); + val = options.decoder(part.slice(pos + 1), defaults.decoder); + } + if (has.call(obj, key)) { + obj[key] = [].concat(obj[key]).concat(val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function (chain, val, options) { + var leaf = val; + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]') { + obj = []; + obj = obj.concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys + // that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options); +}; + +module.exports = function (str, opts) { + var options = opts ? utils.assign({}, opts) : {}; + + if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + options.ignoreQueryPrefix = options.ignoreQueryPrefix === true; + options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; + options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; + options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; + options.parseArrays = options.parseArrays !== false; + options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; + options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; + options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; + options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; + options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; + options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; + + +/***/ }), +/* 161 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * merge-descriptors + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = merge + +/** + * Module variables. + * @private + */ + +var hasOwnProperty = Object.prototype.hasOwnProperty + +/** + * Merge the property descriptors of `src` into `dest` + * + * @param {object} dest Object to add descriptors to + * @param {object} src Object to clone descriptors from + * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties + * @returns {object} Reference to dest + * @public + */ + +function merge(dest, src, redefine) { + if (!dest) { + throw new TypeError('argument dest is required') + } + + if (!src) { + throw new TypeError('argument src is required') + } + + if (redefine === undefined) { + // Default to true + redefine = true + } + + Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) { + if (!redefine && hasOwnProperty.call(dest, name)) { + // Skip desriptor + return + } + + // Copy descriptor + var descriptor = Object.getOwnPropertyDescriptor(src, name) + Object.defineProperty(dest, name, descriptor) + }) + + return dest +} + + +/***/ }), +/* 162 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var finalhandler = __webpack_require__(163); +var Router = __webpack_require__(88); +var methods = __webpack_require__(51); +var middleware = __webpack_require__(165); +var query = __webpack_require__(91); +var debug = __webpack_require__(4)('express:application'); +var View = __webpack_require__(166); +var http = __webpack_require__(41); +var compileETag = __webpack_require__(12).compileETag; +var compileQueryParser = __webpack_require__(12).compileQueryParser; +var compileTrust = __webpack_require__(12).compileTrust; +var deprecate = __webpack_require__(7)('express'); +var flatten = __webpack_require__(40); +var merge = __webpack_require__(42); +var resolve = __webpack_require__(0).resolve; +var setPrototypeOf = __webpack_require__(35) +var slice = Array.prototype.slice; + +/** + * Application prototype. + */ + +var app = exports = module.exports = {}; + +/** + * Variable for trust proxy inheritance back-compat + * @private + */ + +var trustProxyDefaultSymbol = '@@symbol:trust_proxy_default'; + +/** + * Initialize the server. + * + * - setup default configuration + * - setup default middleware + * - setup route reflection methods + * + * @private + */ + +app.init = function init() { + this.cache = {}; + this.engines = {}; + this.settings = {}; + + this.defaultConfiguration(); +}; + +/** + * Initialize application configuration. + * @private + */ + +app.defaultConfiguration = function defaultConfiguration() { + var env = "development" || 'development'; + + // default settings + this.enable('x-powered-by'); + this.set('etag', 'weak'); + this.set('env', env); + this.set('query parser', 'extended'); + this.set('subdomain offset', 2); + this.set('trust proxy', false); + + // trust proxy inherit back-compat + Object.defineProperty(this.settings, trustProxyDefaultSymbol, { + configurable: true, + value: true + }); + + debug('booting in %s mode', env); + + this.on('mount', function onmount(parent) { + // inherit trust proxy + if (this.settings[trustProxyDefaultSymbol] === true + && typeof parent.settings['trust proxy fn'] === 'function') { + delete this.settings['trust proxy']; + delete this.settings['trust proxy fn']; + } + + // inherit protos + setPrototypeOf(this.request, parent.request) + setPrototypeOf(this.response, parent.response) + setPrototypeOf(this.engines, parent.engines) + setPrototypeOf(this.settings, parent.settings) + }); + + // setup locals + this.locals = Object.create(null); + + // top-most app is mounted at / + this.mountpath = '/'; + + // default locals + this.locals.settings = this.settings; + + // default configuration + this.set('view', View); + this.set('views', resolve('views')); + this.set('jsonp callback name', 'callback'); + + if (env === 'production') { + this.enable('view cache'); + } + + Object.defineProperty(this, 'router', { + get: function() { + throw new Error('\'app.router\' is deprecated!\nPlease see the 3.x to 4.x migration guide for details on how to update your app.'); + } + }); +}; + +/** + * lazily adds the base router if it has not yet been added. + * + * We cannot add the base router in the defaultConfiguration because + * it reads app settings which might be set after that has run. + * + * @private + */ +app.lazyrouter = function lazyrouter() { + if (!this._router) { + this._router = new Router({ + caseSensitive: this.enabled('case sensitive routing'), + strict: this.enabled('strict routing') + }); + + this._router.use(query(this.get('query parser fn'))); + this._router.use(middleware.init(this)); + } +}; + +/** + * Dispatch a req, res pair into the application. Starts pipeline processing. + * + * If no callback is provided, then default error handlers will respond + * in the event of an error bubbling through the stack. + * + * @private + */ + +app.handle = function handle(req, res, callback) { + var router = this._router; + + // final handler + var done = callback || finalhandler(req, res, { + env: this.get('env'), + onerror: logerror.bind(this) + }); + + // no routes + if (!router) { + debug('no routes defined on app'); + done(); + return; + } + + router.handle(req, res, done); +}; + +/** + * Proxy `Router#use()` to add middleware to the app router. + * See Router#use() documentation for details. + * + * If the _fn_ parameter is an express app, then it will be + * mounted at the _route_ specified. + * + * @public + */ + +app.use = function use(fn) { + var offset = 0; + var path = '/'; + + // default path to '/' + // disambiguate app.use([fn]) + if (typeof fn !== 'function') { + var arg = fn; + + while (Array.isArray(arg) && arg.length !== 0) { + arg = arg[0]; + } + + // first arg is the path + if (typeof arg !== 'function') { + offset = 1; + path = fn; + } + } + + var fns = flatten(slice.call(arguments, offset)); + + if (fns.length === 0) { + throw new TypeError('app.use() requires a middleware function') + } + + // setup router + this.lazyrouter(); + var router = this._router; + + fns.forEach(function (fn) { + // non-express app + if (!fn || !fn.handle || !fn.set) { + return router.use(path, fn); + } + + debug('.use app under %s', path); + fn.mountpath = path; + fn.parent = this; + + // restore .app property on req and res + router.use(path, function mounted_app(req, res, next) { + var orig = req.app; + fn.handle(req, res, function (err) { + setPrototypeOf(req, orig.request) + setPrototypeOf(res, orig.response) + next(err); + }); + }); + + // mounted an app + fn.emit('mount', this); + }, this); + + return this; +}; + +/** + * Proxy to the app `Router#route()` + * Returns a new `Route` instance for the _path_. + * + * Routes are isolated middleware stacks for specific paths. + * See the Route api docs for details. + * + * @public + */ + +app.route = function route(path) { + this.lazyrouter(); + return this._router.route(path); +}; + +/** + * Register the given template engine callback `fn` + * as `ext`. + * + * By default will `require()` the engine based on the + * file extension. For example if you try to render + * a "foo.ejs" file Express will invoke the following internally: + * + * app.engine('ejs', require('ejs').__express); + * + * For engines that do not provide `.__express` out of the box, + * or if you wish to "map" a different extension to the template engine + * you may use this method. For example mapping the EJS template engine to + * ".html" files: + * + * app.engine('html', require('ejs').renderFile); + * + * In this case EJS provides a `.renderFile()` method with + * the same signature that Express expects: `(path, options, callback)`, + * though note that it aliases this method as `ejs.__express` internally + * so if you're using ".ejs" extensions you dont need to do anything. + * + * Some template engines do not follow this convention, the + * [Consolidate.js](https://github.com/tj/consolidate.js) + * library was created to map all of node's popular template + * engines to follow this convention, thus allowing them to + * work seamlessly within Express. + * + * @param {String} ext + * @param {Function} fn + * @return {app} for chaining + * @public + */ + +app.engine = function engine(ext, fn) { + if (typeof fn !== 'function') { + throw new Error('callback function required'); + } + + // get file extension + var extension = ext[0] !== '.' + ? '.' + ext + : ext; + + // store engine + this.engines[extension] = fn; + + return this; +}; + +/** + * Proxy to `Router#param()` with one added api feature. The _name_ parameter + * can be an array of names. + * + * See the Router#param() docs for more details. + * + * @param {String|Array} name + * @param {Function} fn + * @return {app} for chaining + * @public + */ + +app.param = function param(name, fn) { + this.lazyrouter(); + + if (Array.isArray(name)) { + for (var i = 0; i < name.length; i++) { + this.param(name[i], fn); + } + + return this; + } + + this._router.param(name, fn); + + return this; +}; + +/** + * Assign `setting` to `val`, or return `setting`'s value. + * + * app.set('foo', 'bar'); + * app.set('foo'); + * // => "bar" + * + * Mounted servers inherit their parent server's settings. + * + * @param {String} setting + * @param {*} [val] + * @return {Server} for chaining + * @public + */ + +app.set = function set(setting, val) { + if (arguments.length === 1) { + // app.get(setting) + return this.settings[setting]; + } + + debug('set "%s" to %o', setting, val); + + // set value + this.settings[setting] = val; + + // trigger matched settings + switch (setting) { + case 'etag': + this.set('etag fn', compileETag(val)); + break; + case 'query parser': + this.set('query parser fn', compileQueryParser(val)); + break; + case 'trust proxy': + this.set('trust proxy fn', compileTrust(val)); + + // trust proxy inherit back-compat + Object.defineProperty(this.settings, trustProxyDefaultSymbol, { + configurable: true, + value: false + }); + + break; + } + + return this; +}; + +/** + * Return the app's absolute pathname + * based on the parent(s) that have + * mounted it. + * + * For example if the application was + * mounted as "/admin", which itself + * was mounted as "/blog" then the + * return value would be "/blog/admin". + * + * @return {String} + * @private + */ + +app.path = function path() { + return this.parent + ? this.parent.path() + this.mountpath + : ''; +}; + +/** + * Check if `setting` is enabled (truthy). + * + * app.enabled('foo') + * // => false + * + * app.enable('foo') + * app.enabled('foo') + * // => true + * + * @param {String} setting + * @return {Boolean} + * @public + */ + +app.enabled = function enabled(setting) { + return Boolean(this.set(setting)); +}; + +/** + * Check if `setting` is disabled. + * + * app.disabled('foo') + * // => true + * + * app.enable('foo') + * app.disabled('foo') + * // => false + * + * @param {String} setting + * @return {Boolean} + * @public + */ + +app.disabled = function disabled(setting) { + return !this.set(setting); +}; + +/** + * Enable `setting`. + * + * @param {String} setting + * @return {app} for chaining + * @public + */ + +app.enable = function enable(setting) { + return this.set(setting, true); +}; + +/** + * Disable `setting`. + * + * @param {String} setting + * @return {app} for chaining + * @public + */ + +app.disable = function disable(setting) { + return this.set(setting, false); +}; + +/** + * Delegate `.VERB(...)` calls to `router.VERB(...)`. + */ + +methods.forEach(function(method){ + app[method] = function(path){ + if (method === 'get' && arguments.length === 1) { + // app.get(setting) + return this.set(path); + } + + this.lazyrouter(); + + var route = this._router.route(path); + route[method].apply(route, slice.call(arguments, 1)); + return this; + }; +}); + +/** + * Special-cased "all" method, applying the given route `path`, + * middleware, and callback to _every_ HTTP method. + * + * @param {String} path + * @param {Function} ... + * @return {app} for chaining + * @public + */ + +app.all = function all(path) { + this.lazyrouter(); + + var route = this._router.route(path); + var args = slice.call(arguments, 1); + + for (var i = 0; i < methods.length; i++) { + route[methods[i]].apply(route, args); + } + + return this; +}; + +// del -> delete alias + +app.del = deprecate.function(app.delete, 'app.del: Use app.delete instead'); + +/** + * Render the given view `name` name with `options` + * and a callback accepting an error and the + * rendered template string. + * + * Example: + * + * app.render('email', { name: 'Tobi' }, function(err, html){ + * // ... + * }) + * + * @param {String} name + * @param {Object|Function} options or fn + * @param {Function} callback + * @public + */ + +app.render = function render(name, options, callback) { + var cache = this.cache; + var done = callback; + var engines = this.engines; + var opts = options; + var renderOptions = {}; + var view; + + // support callback function as second arg + if (typeof options === 'function') { + done = options; + opts = {}; + } + + // merge app.locals + merge(renderOptions, this.locals); + + // merge options._locals + if (opts._locals) { + merge(renderOptions, opts._locals); + } + + // merge options + merge(renderOptions, opts); + + // set .cache unless explicitly provided + if (renderOptions.cache == null) { + renderOptions.cache = this.enabled('view cache'); + } + + // primed cache + if (renderOptions.cache) { + view = cache[name]; + } + + // view + if (!view) { + var View = this.get('view'); + + view = new View(name, { + defaultEngine: this.get('view engine'), + root: this.get('views'), + engines: engines + }); + + if (!view.path) { + var dirs = Array.isArray(view.root) && view.root.length > 1 + ? 'directories "' + view.root.slice(0, -1).join('", "') + '" or "' + view.root[view.root.length - 1] + '"' + : 'directory "' + view.root + '"' + var err = new Error('Failed to lookup view "' + name + '" in views ' + dirs); + err.view = view; + return done(err); + } + + // prime the cache + if (renderOptions.cache) { + cache[name] = view; + } + } + + // render + tryRender(view, renderOptions, done); +}; + +/** + * Listen for connections. + * + * A node `http.Server` is returned, with this + * application (which is a `Function`) as its + * callback. If you wish to create both an HTTP + * and HTTPS server you may do so with the "http" + * and "https" modules as shown here: + * + * var http = require('http') + * , https = require('https') + * , express = require('express') + * , app = express(); + * + * http.createServer(app).listen(80); + * https.createServer({ ... }, app).listen(443); + * + * @return {http.Server} + * @public + */ + +app.listen = function listen() { + var server = http.createServer(this); + return server.listen.apply(server, arguments); +}; + +/** + * Log error using console.error. + * + * @param {Error} err + * @private + */ + +function logerror(err) { + /* istanbul ignore next */ + if (this.get('env') !== 'test') console.error(err.stack || err.toString()); +} + +/** + * Try rendering a view. + * @private + */ + +function tryRender(view, options, callback) { + try { + view.render(options, callback); + } catch (err) { + callback(err); + } +} + + +/***/ }), +/* 163 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * finalhandler + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var debug = __webpack_require__(4)('finalhandler') +var encodeUrl = __webpack_require__(38) +var escapeHtml = __webpack_require__(39) +var onFinished = __webpack_require__(37) +var parseUrl = __webpack_require__(21) +var statuses = __webpack_require__(19) +var unpipe = __webpack_require__(82) + +/** + * Module variables. + * @private + */ + +var DOUBLE_SPACE_REGEXP = /\x20{2}/g +var NEWLINE_REGEXP = /\n/g + +/* istanbul ignore next */ +var defer = typeof setImmediate === 'function' + ? setImmediate + : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) } +var isFinished = onFinished.isFinished + +/** + * Create a minimal HTML document. + * + * @param {string} message + * @private + */ + +function createHtmlDocument (message) { + var body = escapeHtml(message) + .replace(NEWLINE_REGEXP, '
') + .replace(DOUBLE_SPACE_REGEXP, '  ') + + return '\n' + + '\n' + + '\n' + + '\n' + + 'Error\n' + + '\n' + + '\n' + + '
' + body + '
\n' + + '\n' + + '\n' +} + +/** + * Module exports. + * @public + */ + +module.exports = finalhandler + +/** + * Create a function to handle the final response. + * + * @param {Request} req + * @param {Response} res + * @param {Object} [options] + * @return {Function} + * @public + */ + +function finalhandler (req, res, options) { + var opts = options || {} + + // get environment + var env = opts.env || "development" || 'development' + + // get error callback + var onerror = opts.onerror + + return function (err) { + var headers + var msg + var status + + // ignore 404 on in-flight response + if (!err && headersSent(res)) { + debug('cannot 404 after headers sent') + return + } + + // unhandled error + if (err) { + // respect status code from error + status = getErrorStatusCode(err) + + if (status === undefined) { + // fallback to status code on response + status = getResponseStatusCode(res) + } else { + // respect headers from error + headers = getErrorHeaders(err) + } + + // get error message + msg = getErrorMessage(err, status, env) + } else { + // not found + status = 404 + msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req)) + } + + debug('default %s', status) + + // schedule onerror callback + if (err && onerror) { + defer(onerror, err, req, res) + } + + // cannot actually respond + if (headersSent(res)) { + debug('cannot %d after headers sent', status) + req.socket.destroy() + return + } + + // send response + send(req, res, status, headers, msg) + } +} + +/** + * Get headers from Error object. + * + * @param {Error} err + * @return {object} + * @private + */ + +function getErrorHeaders (err) { + if (!err.headers || typeof err.headers !== 'object') { + return undefined + } + + var headers = Object.create(null) + var keys = Object.keys(err.headers) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + headers[key] = err.headers[key] + } + + return headers +} + +/** + * Get message from Error object, fallback to status message. + * + * @param {Error} err + * @param {number} status + * @param {string} env + * @return {string} + * @private + */ + +function getErrorMessage (err, status, env) { + var msg + + if (env !== 'production') { + // use err.stack, which typically includes err.message + msg = err.stack + + // fallback to err.toString() when possible + if (!msg && typeof err.toString === 'function') { + msg = err.toString() + } + } + + return msg || statuses[status] +} + +/** + * Get status code from Error object. + * + * @param {Error} err + * @return {number} + * @private + */ + +function getErrorStatusCode (err) { + // check err.status + if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) { + return err.status + } + + // check err.statusCode + if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) { + return err.statusCode + } + + return undefined +} + +/** + * Get resource name for the request. + * + * This is typically just the original pathname of the request + * but will fallback to "resource" is that cannot be determined. + * + * @param {IncomingMessage} req + * @return {string} + * @private + */ + +function getResourceName (req) { + try { + return parseUrl.original(req).pathname + } catch (e) { + return 'resource' + } +} + +/** + * Get status code from response. + * + * @param {OutgoingMessage} res + * @return {number} + * @private + */ + +function getResponseStatusCode (res) { + var status = res.statusCode + + // default status code to 500 if outside valid range + if (typeof status !== 'number' || status < 400 || status > 599) { + status = 500 + } + + return status +} + +/** + * Determine if the response headers have been sent. + * + * @param {object} res + * @returns {boolean} + * @private + */ + +function headersSent (res) { + return typeof res.headersSent !== 'boolean' + ? Boolean(res._header) + : res.headersSent +} + +/** + * Send response. + * + * @param {IncomingMessage} req + * @param {OutgoingMessage} res + * @param {number} status + * @param {object} headers + * @param {string} message + * @private + */ + +function send (req, res, status, headers, message) { + function write () { + // response body + var body = createHtmlDocument(message) + + // response status + res.statusCode = status + res.statusMessage = statuses[status] + + // response headers + setHeaders(res, headers) + + // security headers + res.setHeader('Content-Security-Policy', "default-src 'self'") + res.setHeader('X-Content-Type-Options', 'nosniff') + + // standard headers + res.setHeader('Content-Type', 'text/html; charset=utf-8') + res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8')) + + if (req.method === 'HEAD') { + res.end() + return + } + + res.end(body, 'utf8') + } + + if (isFinished(req)) { + write() + return + } + + // unpipe everything from the request + unpipe(req) + + // flush the request + onFinished(req, write) + req.resume() +} + +/** + * Set response headers from an object. + * + * @param {OutgoingMessage} res + * @param {object} headers + * @private + */ + +function setHeaders (res, headers) { + if (!headers) { + return + } + + var keys = Object.keys(headers) + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + res.setHeader(key, headers[key]) + } +} + + +/***/ }), +/* 164 */ +/***/ (function(module, exports) { + +/** + * Expose `pathtoRegexp`. + */ + +module.exports = pathtoRegexp; + +/** + * Match matching groups in a regular expression. + */ +var MATCHING_GROUP_REGEXP = /\((?!\?)/g; + +/** + * Normalize the given path string, + * returning a regular expression. + * + * An empty array should be passed, + * which will contain the placeholder + * key names. For example "/user/:id" will + * then contain ["id"]. + * + * @param {String|RegExp|Array} path + * @param {Array} keys + * @param {Object} options + * @return {RegExp} + * @api private + */ + +function pathtoRegexp(path, keys, options) { + options = options || {}; + keys = keys || []; + var strict = options.strict; + var end = options.end !== false; + var flags = options.sensitive ? '' : 'i'; + var extraOffset = 0; + var keysOffset = keys.length; + var i = 0; + var name = 0; + var m; + + if (path instanceof RegExp) { + while (m = MATCHING_GROUP_REGEXP.exec(path.source)) { + keys.push({ + name: name++, + optional: false, + offset: m.index + }); + } + + return path; + } + + if (Array.isArray(path)) { + // Map array parts into regexps and return their source. We also pass + // the same keys and options instance into every generation to get + // consistent matching groups before we join the sources together. + path = path.map(function (value) { + return pathtoRegexp(value, keys, options).source; + }); + + return new RegExp('(?:' + path.join('|') + ')', flags); + } + + path = ('^' + path + (strict ? '' : path[path.length - 1] === '/' ? '?' : '/?')) + .replace(/\/\(/g, '/(?:') + .replace(/([\/\.])/g, '\\$1') + .replace(/(\\\/)?(\\\.)?:(\w+)(\(.*?\))?(\*)?(\?)?/g, function (match, slash, format, key, capture, star, optional, offset) { + slash = slash || ''; + format = format || ''; + capture = capture || '([^\\/' + format + ']+?)'; + optional = optional || ''; + + keys.push({ + name: key, + optional: !!optional, + offset: offset + extraOffset + }); + + var result = '' + + (optional ? '' : slash) + + '(?:' + + format + (optional ? slash : '') + capture + + (star ? '((?:[\\/' + format + '].+?)?)' : '') + + ')' + + optional; + + extraOffset += result.length - match.length; + + return result; + }) + .replace(/\*/g, function (star, index) { + var len = keys.length + + while (len-- > keysOffset && keys[len].offset > index) { + keys[len].offset += 3; // Replacement length minus asterisk length. + } + + return '(.*)'; + }); + + // This is a workaround for handling unnamed matching groups. + while (m = MATCHING_GROUP_REGEXP.exec(path)) { + var escapeCount = 0; + var index = m.index; + + while (path.charAt(--index) === '\\') { + escapeCount++; + } + + // It's possible to escape the bracket. + if (escapeCount % 2 === 1) { + continue; + } + + if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) { + keys.splice(keysOffset + i, 0, { + name: name++, // Unnamed matching groups must be consistently linear. + optional: false, + offset: m.index + }); + } + + i++; + } + + // If the path is non-ending, match until the end or a slash. + path += (end ? '$' : (path[path.length - 1] === '/' ? '' : '(?=\\/|$)')); + + return new RegExp(path, flags); +}; + + +/***/ }), +/* 165 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var setPrototypeOf = __webpack_require__(35) + +/** + * Initialization middleware, exposing the + * request and response to each other, as well + * as defaulting the X-Powered-By header field. + * + * @param {Function} app + * @return {Function} + * @api private + */ + +exports.init = function(app){ + return function expressInit(req, res, next){ + if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express'); + req.res = res; + res.req = req; + req.next = next; + + setPrototypeOf(req, app.request) + setPrototypeOf(res, app.response) + + res.locals = res.locals || Object.create(null); + + next(); + }; +}; + + + +/***/ }), +/* 166 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var debug = __webpack_require__(4)('express:view'); +var path = __webpack_require__(0); +var fs = __webpack_require__(8); + +/** + * Module variables. + * @private + */ + +var dirname = path.dirname; +var basename = path.basename; +var extname = path.extname; +var join = path.join; +var resolve = path.resolve; + +/** + * Module exports. + * @public + */ + +module.exports = View; + +/** + * Initialize a new `View` with the given `name`. + * + * Options: + * + * - `defaultEngine` the default template engine name + * - `engines` template engine require() cache + * - `root` root path for view lookup + * + * @param {string} name + * @param {object} options + * @public + */ + +function View(name, options) { + var opts = options || {}; + + this.defaultEngine = opts.defaultEngine; + this.ext = extname(name); + this.name = name; + this.root = opts.root; + + if (!this.ext && !this.defaultEngine) { + throw new Error('No default engine was specified and no extension was provided.'); + } + + var fileName = name; + + if (!this.ext) { + // get extension from default engine name + this.ext = this.defaultEngine[0] !== '.' + ? '.' + this.defaultEngine + : this.defaultEngine; + + fileName += this.ext; + } + + if (!opts.engines[this.ext]) { + // load engine + var mod = this.ext.substr(1) + debug('require "%s"', mod) + + // default engine export + var fn = !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()).__express + + if (typeof fn !== 'function') { + throw new Error('Module "' + mod + '" does not provide a view engine.') + } + + opts.engines[this.ext] = fn + } + + // store loaded engine + this.engine = opts.engines[this.ext]; + + // lookup path + this.path = this.lookup(fileName); +} + +/** + * Lookup view by the given `name` + * + * @param {string} name + * @private + */ + +View.prototype.lookup = function lookup(name) { + var path; + var roots = [].concat(this.root); + + debug('lookup "%s"', name); + + for (var i = 0; i < roots.length && !path; i++) { + var root = roots[i]; + + // resolve the path + var loc = resolve(root, name); + var dir = dirname(loc); + var file = basename(loc); + + // resolve the file + path = this.resolve(dir, file); + } + + return path; +}; + +/** + * Render with the given options. + * + * @param {object} options + * @param {function} callback + * @private + */ + +View.prototype.render = function render(options, callback) { + debug('render "%s"', this.path); + this.engine(this.path, options, callback); +}; + +/** + * Resolve the file within the given directory. + * + * @param {string} dir + * @param {string} file + * @private + */ + +View.prototype.resolve = function resolve(dir, file) { + var ext = this.ext; + + // . + var path = join(dir, file); + var stat = tryStat(path); + + if (stat && stat.isFile()) { + return path; + } + + // /index. + path = join(dir, basename(file, ext), 'index' + ext); + stat = tryStat(path); + + if (stat && stat.isFile()) { + return path; + } +}; + +/** + * Return a stat, maybe. + * + * @param {string} path + * @return {fs.Stats} + * @private + */ + +function tryStat(path) { + debug('stat "%s"', path); + + try { + return fs.statSync(path); + } catch (e) { + return undefined; + } +} + + +/***/ }), +/* 167 */ +/***/ (function(module, exports) { + +function webpackEmptyContext(req) { + throw new Error("Cannot find module '" + req + "'."); +} +webpackEmptyContext.keys = function() { return []; }; +webpackEmptyContext.resolve = webpackEmptyContext; +module.exports = webpackEmptyContext; +webpackEmptyContext.id = 167; + +/***/ }), +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * destroy + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var ReadStream = __webpack_require__(8).ReadStream +var Stream = __webpack_require__(5) + +/** + * Module exports. + * @public + */ + +module.exports = destroy + +/** + * Destroy a stream. + * + * @param {object} stream + * @public + */ + +function destroy(stream) { + if (stream instanceof ReadStream) { + return destroyReadStream(stream) + } + + if (!(stream instanceof Stream)) { + return stream + } + + if (typeof stream.destroy === 'function') { + stream.destroy() + } + + return stream +} + +/** + * Destroy a ReadStream. + * + * @param {object} stream + * @private + */ + +function destroyReadStream(stream) { + stream.destroy() + + if (typeof stream.close === 'function') { + // node.js core bug work-around + stream.on('open', onOpenClose) + } + + return stream +} + +/** + * On open handler to close stream. + * @private + */ + +function onOpenClose() { + if (typeof this.fd === 'number') { + // actually close down the fd + this.close() + } +} + + +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { + +var path = __webpack_require__(0); +var fs = __webpack_require__(8); + +function Mime() { + // Map of extension -> mime type + this.types = Object.create(null); + + // Map of mime type -> extension + this.extensions = Object.create(null); +} + +/** + * Define mimetype -> extension mappings. Each key is a mime-type that maps + * to an array of extensions associated with the type. The first extension is + * used as the default extension for the type. + * + * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); + * + * @param map (Object) type definitions + */ +Mime.prototype.define = function (map) { + for (var type in map) { + var exts = map[type]; + for (var i = 0; i < exts.length; i++) { + if (process.env.DEBUG_MIME && this.types[exts[i]]) { + console.warn((this._loading || "define()").replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + + this.types[exts[i]] + ' to ' + type); + } + + this.types[exts[i]] = type; + } + + // Default extension is the first one we encounter + if (!this.extensions[type]) { + this.extensions[type] = exts[0]; + } + } +}; + +/** + * Load an Apache2-style ".types" file + * + * This may be called multiple times (it's expected). Where files declare + * overlapping types/extensions, the last file wins. + * + * @param file (String) path of file to load. + */ +Mime.prototype.load = function(file) { + this._loading = file; + // Read file and split into lines + var map = {}, + content = fs.readFileSync(file, 'ascii'), + lines = content.split(/[\r\n]+/); + + lines.forEach(function(line) { + // Clean up whitespace/comments, and split into fields + var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); + map[fields.shift()] = fields; + }); + + this.define(map); + + this._loading = null; +}; + +/** + * Lookup a mime type based on extension + */ +Mime.prototype.lookup = function(path, fallback) { + var ext = path.replace(/^.*[\.\/\\]/, '').toLowerCase(); + + return this.types[ext] || fallback || this.default_type; +}; + +/** + * Return file extension associated with a mime type + */ +Mime.prototype.extension = function(mimeType) { + var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); + return this.extensions[type]; +}; + +// Default instance +var mime = new Mime(); + +// Define built-in types +mime.define(__webpack_require__(170)); + +// Default type +mime.default_type = mime.lookup('bin'); + +// +// Additional API specific to the default instance +// + +mime.Mime = Mime; + +/** + * Lookup a charset based on mime type. + */ +mime.charsets = { + lookup: function(mimeType, fallback) { + // Assume text types are utf8 + return (/^text\/|^application\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback; + } +}; + +module.exports = mime; + + +/***/ }), +/* 170 */ +/***/ (function(module, exports) { + +module.exports = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/bdoc":["bdoc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":["woff"],"application/font-woff2":["woff2"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-otf":["otf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-ttf":["ttf","ttc"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["iso"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["exe"],"application/x-msdownload":["exe","dll","com","bat","msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","wmz","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["prc","pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["3gpp"],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp3":["mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/wav":["wav"],"audio/wave":["wav"],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["ra"],"audio/x-wav":["wav"],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/otf":["otf"],"image/apng":["apng"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jpeg":["jpeg","jpg","jpe"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["bmp"],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/rtf":["rtf"],"text/sgml":["sgml","sgm"],"text/slim":["slim","slm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/xml":["xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]} + +/***/ }), +/* 171 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * forwarded + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = forwarded + +/** + * Get all addresses in the request, using the `X-Forwarded-For` header. + * + * @param {object} req + * @return {array} + * @public + */ + +function forwarded (req) { + if (!req) { + throw new TypeError('argument req is required') + } + + // simple header parsing + var proxyAddrs = parse(req.headers['x-forwarded-for'] || '') + var socketAddr = req.connection.remoteAddress + var addrs = [socketAddr].concat(proxyAddrs) + + // return all addresses + return addrs +} + +/** + * Parse the X-Forwarded-For header. + * + * @param {string} header + * @private + */ + +function parse (header) { + var end = header.length + var list = [] + var start = header.length + + // gather addresses, backwards + for (var i = header.length - 1; i >= 0; i--) { + switch (header.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + } + break + case 0x2c: /* , */ + if (start !== end) { + list.push(header.substring(start, end)) + } + start = end = i + break + default: + start = i + break + } + } + + // final address + if (start !== end) { + list.push(header.substring(start, end)) + } + + return list +} + + +/***/ }), +/* 172 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {(function() { + var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex; + + ipaddr = {}; + + root = this; + + if ((typeof module !== "undefined" && module !== null) && module.exports) { + module.exports = ipaddr; + } else { + root['ipaddr'] = ipaddr; + } + + matchCIDR = function(first, second, partSize, cidrBits) { + var part, shift; + if (first.length !== second.length) { + throw new Error("ipaddr: cannot match CIDR for objects with different lengths"); + } + part = 0; + while (cidrBits > 0) { + shift = partSize - cidrBits; + if (shift < 0) { + shift = 0; + } + if (first[part] >> shift !== second[part] >> shift) { + return false; + } + cidrBits -= partSize; + part += 1; + } + return true; + }; + + ipaddr.subnetMatch = function(address, rangeList, defaultName) { + var k, len, rangeName, rangeSubnets, subnet; + if (defaultName == null) { + defaultName = 'unicast'; + } + for (rangeName in rangeList) { + rangeSubnets = rangeList[rangeName]; + if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) { + rangeSubnets = [rangeSubnets]; + } + for (k = 0, len = rangeSubnets.length; k < len; k++) { + subnet = rangeSubnets[k]; + if (address.kind() === subnet[0].kind()) { + if (address.match.apply(address, subnet)) { + return rangeName; + } + } + } + } + return defaultName; + }; + + ipaddr.IPv4 = (function() { + function IPv4(octets) { + var k, len, octet; + if (octets.length !== 4) { + throw new Error("ipaddr: ipv4 octet count should be 4"); + } + for (k = 0, len = octets.length; k < len; k++) { + octet = octets[k]; + if (!((0 <= octet && octet <= 255))) { + throw new Error("ipaddr: ipv4 octet should fit in 8 bits"); + } + } + this.octets = octets; + } + + IPv4.prototype.kind = function() { + return 'ipv4'; + }; + + IPv4.prototype.toString = function() { + return this.octets.join("."); + }; + + IPv4.prototype.toNormalizedString = function() { + return this.toString(); + }; + + IPv4.prototype.toByteArray = function() { + return this.octets.slice(0); + }; + + IPv4.prototype.match = function(other, cidrRange) { + var ref; + if (cidrRange === void 0) { + ref = other, other = ref[0], cidrRange = ref[1]; + } + if (other.kind() !== 'ipv4') { + throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one"); + } + return matchCIDR(this.octets, other.octets, 8, cidrRange); + }; + + IPv4.prototype.SpecialRanges = { + unspecified: [[new IPv4([0, 0, 0, 0]), 8]], + broadcast: [[new IPv4([255, 255, 255, 255]), 32]], + multicast: [[new IPv4([224, 0, 0, 0]), 4]], + linkLocal: [[new IPv4([169, 254, 0, 0]), 16]], + loopback: [[new IPv4([127, 0, 0, 0]), 8]], + carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]], + "private": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]], + reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]] + }; + + IPv4.prototype.range = function() { + return ipaddr.subnetMatch(this, this.SpecialRanges); + }; + + IPv4.prototype.toIPv4MappedAddress = function() { + return ipaddr.IPv6.parse("::ffff:" + (this.toString())); + }; + + IPv4.prototype.prefixLengthFromSubnetMask = function() { + var cidr, i, k, octet, stop, zeros, zerotable; + zerotable = { + 0: 8, + 128: 7, + 192: 6, + 224: 5, + 240: 4, + 248: 3, + 252: 2, + 254: 1, + 255: 0 + }; + cidr = 0; + stop = false; + for (i = k = 3; k >= 0; i = k += -1) { + octet = this.octets[i]; + if (octet in zerotable) { + zeros = zerotable[octet]; + if (stop && zeros !== 0) { + return null; + } + if (zeros !== 8) { + stop = true; + } + cidr += zeros; + } else { + return null; + } + } + return 32 - cidr; + }; + + return IPv4; + + })(); + + ipv4Part = "(0?\\d+|0x[a-f0-9]+)"; + + ipv4Regexes = { + fourOctet: new RegExp("^" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$", 'i'), + longValue: new RegExp("^" + ipv4Part + "$", 'i') + }; + + ipaddr.IPv4.parser = function(string) { + var match, parseIntAuto, part, shift, value; + parseIntAuto = function(string) { + if (string[0] === "0" && string[1] !== "x") { + return parseInt(string, 8); + } else { + return parseInt(string); + } + }; + if (match = string.match(ipv4Regexes.fourOctet)) { + return (function() { + var k, len, ref, results; + ref = match.slice(1, 6); + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(parseIntAuto(part)); + } + return results; + })(); + } else if (match = string.match(ipv4Regexes.longValue)) { + value = parseIntAuto(match[1]); + if (value > 0xffffffff || value < 0) { + throw new Error("ipaddr: address outside defined range"); + } + return ((function() { + var k, results; + results = []; + for (shift = k = 0; k <= 24; shift = k += 8) { + results.push((value >> shift) & 0xff); + } + return results; + })()).reverse(); + } else { + return null; + } + }; + + ipaddr.IPv6 = (function() { + function IPv6(parts, zoneId) { + var i, k, l, len, part, ref; + if (parts.length === 16) { + this.parts = []; + for (i = k = 0; k <= 14; i = k += 2) { + this.parts.push((parts[i] << 8) | parts[i + 1]); + } + } else if (parts.length === 8) { + this.parts = parts; + } else { + throw new Error("ipaddr: ipv6 part count should be 8 or 16"); + } + ref = this.parts; + for (l = 0, len = ref.length; l < len; l++) { + part = ref[l]; + if (!((0 <= part && part <= 0xffff))) { + throw new Error("ipaddr: ipv6 part should fit in 16 bits"); + } + } + if (zoneId) { + this.zoneId = zoneId; + } + } + + IPv6.prototype.kind = function() { + return 'ipv6'; + }; + + IPv6.prototype.toString = function() { + return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::'); + }; + + IPv6.prototype.toByteArray = function() { + var bytes, k, len, part, ref; + bytes = []; + ref = this.parts; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + bytes.push(part >> 8); + bytes.push(part & 0xff); + } + return bytes; + }; + + IPv6.prototype.toNormalizedString = function() { + var addr, part, suffix; + addr = ((function() { + var k, len, ref, results; + ref = this.parts; + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(part.toString(16)); + } + return results; + }).call(this)).join(":"); + suffix = ''; + if (this.zoneId) { + suffix = '%' + this.zoneId; + } + return addr + suffix; + }; + + IPv6.prototype.match = function(other, cidrRange) { + var ref; + if (cidrRange === void 0) { + ref = other, other = ref[0], cidrRange = ref[1]; + } + if (other.kind() !== 'ipv6') { + throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one"); + } + return matchCIDR(this.parts, other.parts, 16, cidrRange); + }; + + IPv6.prototype.SpecialRanges = { + unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128], + linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10], + multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8], + loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128], + uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7], + ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96], + rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96], + rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96], + '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16], + teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32], + reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]] + }; + + IPv6.prototype.range = function() { + return ipaddr.subnetMatch(this, this.SpecialRanges); + }; + + IPv6.prototype.isIPv4MappedAddress = function() { + return this.range() === 'ipv4Mapped'; + }; + + IPv6.prototype.toIPv4Address = function() { + var high, low, ref; + if (!this.isIPv4MappedAddress()) { + throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4"); + } + ref = this.parts.slice(-2), high = ref[0], low = ref[1]; + return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]); + }; + + IPv6.prototype.prefixLengthFromSubnetMask = function() { + var cidr, i, k, part, stop, zeros, zerotable; + zerotable = { + 0: 16, + 32768: 15, + 49152: 14, + 57344: 13, + 61440: 12, + 63488: 11, + 64512: 10, + 65024: 9, + 65280: 8, + 65408: 7, + 65472: 6, + 65504: 5, + 65520: 4, + 65528: 3, + 65532: 2, + 65534: 1, + 65535: 0 + }; + cidr = 0; + stop = false; + for (i = k = 7; k >= 0; i = k += -1) { + part = this.parts[i]; + if (part in zerotable) { + zeros = zerotable[part]; + if (stop && zeros !== 0) { + return null; + } + if (zeros !== 16) { + stop = true; + } + cidr += zeros; + } else { + return null; + } + } + return 128 - cidr; + }; + + return IPv6; + + })(); + + ipv6Part = "(?:[0-9a-f]+::?)+"; + + zoneIndex = "%[0-9a-z]{1,}"; + + ipv6Regexes = { + zoneIndex: new RegExp(zoneIndex, 'i'), + "native": new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?(" + zoneIndex + ")?$", 'i'), + transitional: new RegExp(("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)") + (ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part) + ("(" + zoneIndex + ")?$"), 'i') + }; + + expandIPv6 = function(string, parts) { + var colonCount, lastColon, part, replacement, replacementCount, zoneId; + if (string.indexOf('::') !== string.lastIndexOf('::')) { + return null; + } + zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0]; + if (zoneId) { + zoneId = zoneId.substring(1); + string = string.replace(/%.+$/, ''); + } + colonCount = 0; + lastColon = -1; + while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) { + colonCount++; + } + if (string.substr(0, 2) === '::') { + colonCount--; + } + if (string.substr(-2, 2) === '::') { + colonCount--; + } + if (colonCount > parts) { + return null; + } + replacementCount = parts - colonCount; + replacement = ':'; + while (replacementCount--) { + replacement += '0:'; + } + string = string.replace('::', replacement); + if (string[0] === ':') { + string = string.slice(1); + } + if (string[string.length - 1] === ':') { + string = string.slice(0, -1); + } + parts = (function() { + var k, len, ref, results; + ref = string.split(":"); + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(parseInt(part, 16)); + } + return results; + })(); + return { + parts: parts, + zoneId: zoneId + }; + }; + + ipaddr.IPv6.parser = function(string) { + var addr, k, len, match, octet, octets, zoneId; + if (ipv6Regexes['native'].test(string)) { + return expandIPv6(string, 8); + } else if (match = string.match(ipv6Regexes['transitional'])) { + zoneId = match[6] || ''; + addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6); + if (addr.parts) { + octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])]; + for (k = 0, len = octets.length; k < len; k++) { + octet = octets[k]; + if (!((0 <= octet && octet <= 255))) { + return null; + } + } + addr.parts.push(octets[0] << 8 | octets[1]); + addr.parts.push(octets[2] << 8 | octets[3]); + return { + parts: addr.parts, + zoneId: addr.zoneId + }; + } + } + return null; + }; + + ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) { + return this.parser(string) !== null; + }; + + ipaddr.IPv4.isValid = function(string) { + var e; + try { + new this(this.parser(string)); + return true; + } catch (error1) { + e = error1; + return false; + } + }; + + ipaddr.IPv4.isValidFourPartDecimal = function(string) { + if (ipaddr.IPv4.isValid(string) && string.match(/^\d+(\.\d+){3}$/)) { + return true; + } else { + return false; + } + }; + + ipaddr.IPv6.isValid = function(string) { + var addr, e; + if (typeof string === "string" && string.indexOf(":") === -1) { + return false; + } + try { + addr = this.parser(string); + new this(addr.parts, addr.zoneId); + return true; + } catch (error1) { + e = error1; + return false; + } + }; + + ipaddr.IPv4.parse = function(string) { + var parts; + parts = this.parser(string); + if (parts === null) { + throw new Error("ipaddr: string is not formatted like ip address"); + } + return new this(parts); + }; + + ipaddr.IPv6.parse = function(string) { + var addr; + addr = this.parser(string); + if (addr.parts === null) { + throw new Error("ipaddr: string is not formatted like ip address"); + } + return new this(addr.parts, addr.zoneId); + }; + + ipaddr.IPv4.parseCIDR = function(string) { + var maskLength, match; + if (match = string.match(/^(.+)\/(\d+)$/)) { + maskLength = parseInt(match[2]); + if (maskLength >= 0 && maskLength <= 32) { + return [this.parse(match[1]), maskLength]; + } + } + throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range"); + }; + + ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) { + var filledOctetCount, j, octets; + prefix = parseInt(prefix); + if (prefix < 0 || prefix > 32) { + throw new Error('ipaddr: invalid IPv4 prefix length'); + } + octets = [0, 0, 0, 0]; + j = 0; + filledOctetCount = Math.floor(prefix / 8); + while (j < filledOctetCount) { + octets[j] = 255; + j++; + } + if (filledOctetCount < 4) { + octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8); + } + return new this(octets); + }; + + ipaddr.IPv4.broadcastAddressFromCIDR = function(string) { + var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets; + try { + cidr = this.parseCIDR(string); + ipInterfaceOctets = cidr[0].toByteArray(); + subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); + octets = []; + i = 0; + while (i < 4) { + octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255); + i++; + } + return new this(octets); + } catch (error1) { + error = error1; + throw new Error('ipaddr: the address does not have IPv4 CIDR format'); + } + }; + + ipaddr.IPv4.networkAddressFromCIDR = function(string) { + var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets; + try { + cidr = this.parseCIDR(string); + ipInterfaceOctets = cidr[0].toByteArray(); + subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); + octets = []; + i = 0; + while (i < 4) { + octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10)); + i++; + } + return new this(octets); + } catch (error1) { + error = error1; + throw new Error('ipaddr: the address does not have IPv4 CIDR format'); + } + }; + + ipaddr.IPv6.parseCIDR = function(string) { + var maskLength, match; + if (match = string.match(/^(.+)\/(\d+)$/)) { + maskLength = parseInt(match[2]); + if (maskLength >= 0 && maskLength <= 128) { + return [this.parse(match[1]), maskLength]; + } + } + throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range"); + }; + + ipaddr.isValid = function(string) { + return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string); + }; + + ipaddr.parse = function(string) { + if (ipaddr.IPv6.isValid(string)) { + return ipaddr.IPv6.parse(string); + } else if (ipaddr.IPv4.isValid(string)) { + return ipaddr.IPv4.parse(string); + } else { + throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format"); + } + }; + + ipaddr.parseCIDR = function(string) { + var e; + try { + return ipaddr.IPv6.parseCIDR(string); + } catch (error1) { + e = error1; + try { + return ipaddr.IPv4.parseCIDR(string); + } catch (error1) { + e = error1; + throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format"); + } + } + }; + + ipaddr.fromByteArray = function(bytes) { + var length; + length = bytes.length; + if (length === 4) { + return new ipaddr.IPv4(bytes); + } else if (length === 16) { + return new ipaddr.IPv6(bytes); + } else { + throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address"); + } + }; + + ipaddr.process = function(string) { + var addr; + addr = this.parse(string); + if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) { + return addr.toIPv4Address(); + } else { + return addr; + } + }; + +}).call(this); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(173)(module))) + +/***/ }), +/* 173 */ +/***/ (function(module, exports) { + +module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + if(!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function() { + return module.i; + } + }); + module.webpackPolyfill = 1; + } + return module; +}; + + +/***/ }), +/* 174 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var accepts = __webpack_require__(175); +var deprecate = __webpack_require__(7)('express'); +var isIP = __webpack_require__(76).isIP; +var typeis = __webpack_require__(20); +var http = __webpack_require__(41); +var fresh = __webpack_require__(95); +var parseRange = __webpack_require__(96); +var parse = __webpack_require__(21); +var proxyaddr = __webpack_require__(97); + +/** + * Request prototype. + * @public + */ + +var req = Object.create(http.IncomingMessage.prototype) + +/** + * Module exports. + * @public + */ + +module.exports = req + +/** + * Return request header. + * + * The `Referrer` header field is special-cased, + * both `Referrer` and `Referer` are interchangeable. + * + * Examples: + * + * req.get('Content-Type'); + * // => "text/plain" + * + * req.get('content-type'); + * // => "text/plain" + * + * req.get('Something'); + * // => undefined + * + * Aliased as `req.header()`. + * + * @param {String} name + * @return {String} + * @public + */ + +req.get = +req.header = function header(name) { + if (!name) { + throw new TypeError('name argument is required to req.get'); + } + + if (typeof name !== 'string') { + throw new TypeError('name must be a string to req.get'); + } + + var lc = name.toLowerCase(); + + switch (lc) { + case 'referer': + case 'referrer': + return this.headers.referrer + || this.headers.referer; + default: + return this.headers[lc]; + } +}; + +/** + * To do: update docs. + * + * Check if the given `type(s)` is acceptable, returning + * the best match when true, otherwise `undefined`, in which + * case you should respond with 406 "Not Acceptable". + * + * The `type` value may be a single MIME type string + * such as "application/json", an extension name + * such as "json", a comma-delimited list such as "json, html, text/plain", + * an argument list such as `"json", "html", "text/plain"`, + * or an array `["json", "html", "text/plain"]`. When a list + * or array is given, the _best_ match, if any is returned. + * + * Examples: + * + * // Accept: text/html + * req.accepts('html'); + * // => "html" + * + * // Accept: text/*, application/json + * req.accepts('html'); + * // => "html" + * req.accepts('text/html'); + * // => "text/html" + * req.accepts('json, text'); + * // => "json" + * req.accepts('application/json'); + * // => "application/json" + * + * // Accept: text/*, application/json + * req.accepts('image/png'); + * req.accepts('png'); + * // => undefined + * + * // Accept: text/*;q=.5, application/json + * req.accepts(['html', 'json']); + * req.accepts('html', 'json'); + * req.accepts('html, json'); + * // => "json" + * + * @param {String|Array} type(s) + * @return {String|Array|Boolean} + * @public + */ + +req.accepts = function(){ + var accept = accepts(this); + return accept.types.apply(accept, arguments); +}; + +/** + * Check if the given `encoding`s are accepted. + * + * @param {String} ...encoding + * @return {String|Array} + * @public + */ + +req.acceptsEncodings = function(){ + var accept = accepts(this); + return accept.encodings.apply(accept, arguments); +}; + +req.acceptsEncoding = deprecate.function(req.acceptsEncodings, + 'req.acceptsEncoding: Use acceptsEncodings instead'); + +/** + * Check if the given `charset`s are acceptable, + * otherwise you should respond with 406 "Not Acceptable". + * + * @param {String} ...charset + * @return {String|Array} + * @public + */ + +req.acceptsCharsets = function(){ + var accept = accepts(this); + return accept.charsets.apply(accept, arguments); +}; + +req.acceptsCharset = deprecate.function(req.acceptsCharsets, + 'req.acceptsCharset: Use acceptsCharsets instead'); + +/** + * Check if the given `lang`s are acceptable, + * otherwise you should respond with 406 "Not Acceptable". + * + * @param {String} ...lang + * @return {String|Array} + * @public + */ + +req.acceptsLanguages = function(){ + var accept = accepts(this); + return accept.languages.apply(accept, arguments); +}; + +req.acceptsLanguage = deprecate.function(req.acceptsLanguages, + 'req.acceptsLanguage: Use acceptsLanguages instead'); + +/** + * Parse Range header field, capping to the given `size`. + * + * Unspecified ranges such as "0-" require knowledge of your resource length. In + * the case of a byte range this is of course the total number of bytes. If the + * Range header field is not given `undefined` is returned, `-1` when unsatisfiable, + * and `-2` when syntactically invalid. + * + * When ranges are returned, the array has a "type" property which is the type of + * range that is required (most commonly, "bytes"). Each array element is an object + * with a "start" and "end" property for the portion of the range. + * + * The "combine" option can be set to `true` and overlapping & adjacent ranges + * will be combined into a single range. + * + * NOTE: remember that ranges are inclusive, so for example "Range: users=0-3" + * should respond with 4 users when available, not 3. + * + * @param {number} size + * @param {object} [options] + * @param {boolean} [options.combine=false] + * @return {number|array} + * @public + */ + +req.range = function range(size, options) { + var range = this.get('Range'); + if (!range) return; + return parseRange(size, range, options); +}; + +/** + * Return the value of param `name` when present or `defaultValue`. + * + * - Checks route placeholders, ex: _/user/:id_ + * - Checks body params, ex: id=12, {"id":12} + * - Checks query string params, ex: ?id=12 + * + * To utilize request bodies, `req.body` + * should be an object. This can be done by using + * the `bodyParser()` middleware. + * + * @param {String} name + * @param {Mixed} [defaultValue] + * @return {String} + * @public + */ + +req.param = function param(name, defaultValue) { + var params = this.params || {}; + var body = this.body || {}; + var query = this.query || {}; + + var args = arguments.length === 1 + ? 'name' + : 'name, default'; + deprecate('req.param(' + args + '): Use req.params, req.body, or req.query instead'); + + if (null != params[name] && params.hasOwnProperty(name)) return params[name]; + if (null != body[name]) return body[name]; + if (null != query[name]) return query[name]; + + return defaultValue; +}; + +/** + * Check if the incoming request contains the "Content-Type" + * header field, and it contains the give mime `type`. + * + * Examples: + * + * // With Content-Type: text/html; charset=utf-8 + * req.is('html'); + * req.is('text/html'); + * req.is('text/*'); + * // => true + * + * // When Content-Type is application/json + * req.is('json'); + * req.is('application/json'); + * req.is('application/*'); + * // => true + * + * req.is('html'); + * // => false + * + * @param {String|Array} types... + * @return {String|false|null} + * @public + */ + +req.is = function is(types) { + var arr = types; + + // support flattened arguments + if (!Array.isArray(types)) { + arr = new Array(arguments.length); + for (var i = 0; i < arr.length; i++) { + arr[i] = arguments[i]; + } + } + + return typeis(this, arr); +}; + +/** + * Return the protocol string "http" or "https" + * when requested with TLS. When the "trust proxy" + * setting trusts the socket address, the + * "X-Forwarded-Proto" header field will be trusted + * and used if present. + * + * If you're running behind a reverse proxy that + * supplies https for you this may be enabled. + * + * @return {String} + * @public + */ + +defineGetter(req, 'protocol', function protocol(){ + var proto = this.connection.encrypted + ? 'https' + : 'http'; + var trust = this.app.get('trust proxy fn'); + + if (!trust(this.connection.remoteAddress, 0)) { + return proto; + } + + // Note: X-Forwarded-Proto is normally only ever a + // single value, but this is to be safe. + var header = this.get('X-Forwarded-Proto') || proto + var index = header.indexOf(',') + + return index !== -1 + ? header.substring(0, index).trim() + : header.trim() +}); + +/** + * Short-hand for: + * + * req.protocol === 'https' + * + * @return {Boolean} + * @public + */ + +defineGetter(req, 'secure', function secure(){ + return this.protocol === 'https'; +}); + +/** + * Return the remote address from the trusted proxy. + * + * The is the remote address on the socket unless + * "trust proxy" is set. + * + * @return {String} + * @public + */ + +defineGetter(req, 'ip', function ip(){ + var trust = this.app.get('trust proxy fn'); + return proxyaddr(this, trust); +}); + +/** + * When "trust proxy" is set, trusted proxy addresses + client. + * + * For example if the value were "client, proxy1, proxy2" + * you would receive the array `["client", "proxy1", "proxy2"]` + * where "proxy2" is the furthest down-stream and "proxy1" and + * "proxy2" were trusted. + * + * @return {Array} + * @public + */ + +defineGetter(req, 'ips', function ips() { + var trust = this.app.get('trust proxy fn'); + var addrs = proxyaddr.all(this, trust); + + // reverse the order (to farthest -> closest) + // and remove socket address + addrs.reverse().pop() + + return addrs +}); + +/** + * Return subdomains as an array. + * + * Subdomains are the dot-separated parts of the host before the main domain of + * the app. By default, the domain of the app is assumed to be the last two + * parts of the host. This can be changed by setting "subdomain offset". + * + * For example, if the domain is "tobi.ferrets.example.com": + * If "subdomain offset" is not set, req.subdomains is `["ferrets", "tobi"]`. + * If "subdomain offset" is 3, req.subdomains is `["tobi"]`. + * + * @return {Array} + * @public + */ + +defineGetter(req, 'subdomains', function subdomains() { + var hostname = this.hostname; + + if (!hostname) return []; + + var offset = this.app.get('subdomain offset'); + var subdomains = !isIP(hostname) + ? hostname.split('.').reverse() + : [hostname]; + + return subdomains.slice(offset); +}); + +/** + * Short-hand for `url.parse(req.url).pathname`. + * + * @return {String} + * @public + */ + +defineGetter(req, 'path', function path() { + return parse(this).pathname; +}); + +/** + * Parse the "Host" header field to a hostname. + * + * When the "trust proxy" setting trusts the socket + * address, the "X-Forwarded-Host" header field will + * be trusted. + * + * @return {String} + * @public + */ + +defineGetter(req, 'hostname', function hostname(){ + var trust = this.app.get('trust proxy fn'); + var host = this.get('X-Forwarded-Host'); + + if (!host || !trust(this.connection.remoteAddress, 0)) { + host = this.get('Host'); + } + + if (!host) return; + + // IPv6 literal support + var offset = host[0] === '[' + ? host.indexOf(']') + 1 + : 0; + var index = host.indexOf(':', offset); + + return index !== -1 + ? host.substring(0, index) + : host; +}); + +// TODO: change req.host to return host in next major + +defineGetter(req, 'host', deprecate.function(function host(){ + return this.hostname; +}, 'req.host: Use req.hostname instead')); + +/** + * Check if the request is fresh, aka + * Last-Modified and/or the ETag + * still match. + * + * @return {Boolean} + * @public + */ + +defineGetter(req, 'fresh', function(){ + var method = this.method; + var res = this.res + var status = res.statusCode + + // GET or HEAD for weak freshness validation only + if ('GET' !== method && 'HEAD' !== method) return false; + + // 2xx or 304 as per rfc2616 14.26 + if ((status >= 200 && status < 300) || 304 === status) { + return fresh(this.headers, { + 'etag': res.get('ETag'), + 'last-modified': res.get('Last-Modified') + }) + } + + return false; +}); + +/** + * Check if the request is stale, aka + * "Last-Modified" and / or the "ETag" for the + * resource has changed. + * + * @return {Boolean} + * @public + */ + +defineGetter(req, 'stale', function stale(){ + return !this.fresh; +}); + +/** + * Check if the request was an _XMLHttpRequest_. + * + * @return {Boolean} + * @public + */ + +defineGetter(req, 'xhr', function xhr(){ + var val = this.get('X-Requested-With') || ''; + return val.toLowerCase() === 'xmlhttprequest'; +}); + +/** + * Helper function for creating a getter on an object. + * + * @param {Object} obj + * @param {String} name + * @param {Function} getter + * @private + */ +function defineGetter(obj, name, getter) { + Object.defineProperty(obj, name, { + configurable: true, + enumerable: true, + get: getter + }); +} + + +/***/ }), +/* 175 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * accepts + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var Negotiator = __webpack_require__(176) +var mime = __webpack_require__(83) + +/** + * Module exports. + * @public + */ + +module.exports = Accepts + +/** + * Create a new Accepts object for the given req. + * + * @param {object} req + * @public + */ + +function Accepts (req) { + if (!(this instanceof Accepts)) { + return new Accepts(req) + } + + this.headers = req.headers + this.negotiator = new Negotiator(req) +} + +/** + * Check if the given `type(s)` is acceptable, returning + * the best match when true, otherwise `undefined`, in which + * case you should respond with 406 "Not Acceptable". + * + * The `type` value may be a single mime type string + * such as "application/json", the extension name + * such as "json" or an array `["json", "html", "text/plain"]`. When a list + * or array is given the _best_ match, if any is returned. + * + * Examples: + * + * // Accept: text/html + * this.types('html'); + * // => "html" + * + * // Accept: text/*, application/json + * this.types('html'); + * // => "html" + * this.types('text/html'); + * // => "text/html" + * this.types('json', 'text'); + * // => "json" + * this.types('application/json'); + * // => "application/json" + * + * // Accept: text/*, application/json + * this.types('image/png'); + * this.types('png'); + * // => undefined + * + * // Accept: text/*;q=.5, application/json + * this.types(['html', 'json']); + * this.types('html', 'json'); + * // => "json" + * + * @param {String|Array} types... + * @return {String|Array|Boolean} + * @public + */ + +Accepts.prototype.type = +Accepts.prototype.types = function (types_) { + var types = types_ + + // support flattened arguments + if (types && !Array.isArray(types)) { + types = new Array(arguments.length) + for (var i = 0; i < types.length; i++) { + types[i] = arguments[i] + } + } + + // no types, return all requested types + if (!types || types.length === 0) { + return this.negotiator.mediaTypes() + } + + // no accept header, return first given type + if (!this.headers.accept) { + return types[0] + } + + var mimes = types.map(extToMime) + var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)) + var first = accepts[0] + + return first + ? types[mimes.indexOf(first)] + : false +} + +/** + * Return accepted encodings or best fit based on `encodings`. + * + * Given `Accept-Encoding: gzip, deflate` + * an array sorted by quality is returned: + * + * ['gzip', 'deflate'] + * + * @param {String|Array} encodings... + * @return {String|Array} + * @public + */ + +Accepts.prototype.encoding = +Accepts.prototype.encodings = function (encodings_) { + var encodings = encodings_ + + // support flattened arguments + if (encodings && !Array.isArray(encodings)) { + encodings = new Array(arguments.length) + for (var i = 0; i < encodings.length; i++) { + encodings[i] = arguments[i] + } + } + + // no encodings, return all requested encodings + if (!encodings || encodings.length === 0) { + return this.negotiator.encodings() + } + + return this.negotiator.encodings(encodings)[0] || false +} + +/** + * Return accepted charsets or best fit based on `charsets`. + * + * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5` + * an array sorted by quality is returned: + * + * ['utf-8', 'utf-7', 'iso-8859-1'] + * + * @param {String|Array} charsets... + * @return {String|Array} + * @public + */ + +Accepts.prototype.charset = +Accepts.prototype.charsets = function (charsets_) { + var charsets = charsets_ + + // support flattened arguments + if (charsets && !Array.isArray(charsets)) { + charsets = new Array(arguments.length) + for (var i = 0; i < charsets.length; i++) { + charsets[i] = arguments[i] + } + } + + // no charsets, return all requested charsets + if (!charsets || charsets.length === 0) { + return this.negotiator.charsets() + } + + return this.negotiator.charsets(charsets)[0] || false +} + +/** + * Return accepted languages or best fit based on `langs`. + * + * Given `Accept-Language: en;q=0.8, es, pt` + * an array sorted by quality is returned: + * + * ['es', 'pt', 'en'] + * + * @param {String|Array} langs... + * @return {Array|String} + * @public + */ + +Accepts.prototype.lang = +Accepts.prototype.langs = +Accepts.prototype.language = +Accepts.prototype.languages = function (languages_) { + var languages = languages_ + + // support flattened arguments + if (languages && !Array.isArray(languages)) { + languages = new Array(arguments.length) + for (var i = 0; i < languages.length; i++) { + languages[i] = arguments[i] + } + } + + // no languages, return all requested languages + if (!languages || languages.length === 0) { + return this.negotiator.languages() + } + + return this.negotiator.languages(languages)[0] || false +} + +/** + * Convert extnames to mime. + * + * @param {String} type + * @return {String} + * @private + */ + +function extToMime (type) { + return type.indexOf('/') === -1 + ? mime.lookup(type) + : type +} + +/** + * Check if mime is valid. + * + * @param {String} type + * @return {String} + * @private + */ + +function validMime (type) { + return typeof type === 'string' +} + + +/***/ }), +/* 176 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * negotiator + * Copyright(c) 2012 Federico Romero + * Copyright(c) 2012-2014 Isaac Z. Schlueter + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Cached loaded submodules. + * @private + */ + +var modules = Object.create(null); + +/** + * Module exports. + * @public + */ + +module.exports = Negotiator; +module.exports.Negotiator = Negotiator; + +/** + * Create a Negotiator instance from a request. + * @param {object} request + * @public + */ + +function Negotiator(request) { + if (!(this instanceof Negotiator)) { + return new Negotiator(request); + } + + this.request = request; +} + +Negotiator.prototype.charset = function charset(available) { + var set = this.charsets(available); + return set && set[0]; +}; + +Negotiator.prototype.charsets = function charsets(available) { + var preferredCharsets = loadModule('charset').preferredCharsets; + return preferredCharsets(this.request.headers['accept-charset'], available); +}; + +Negotiator.prototype.encoding = function encoding(available) { + var set = this.encodings(available); + return set && set[0]; +}; + +Negotiator.prototype.encodings = function encodings(available) { + var preferredEncodings = loadModule('encoding').preferredEncodings; + return preferredEncodings(this.request.headers['accept-encoding'], available); +}; + +Negotiator.prototype.language = function language(available) { + var set = this.languages(available); + return set && set[0]; +}; + +Negotiator.prototype.languages = function languages(available) { + var preferredLanguages = loadModule('language').preferredLanguages; + return preferredLanguages(this.request.headers['accept-language'], available); +}; + +Negotiator.prototype.mediaType = function mediaType(available) { + var set = this.mediaTypes(available); + return set && set[0]; +}; + +Negotiator.prototype.mediaTypes = function mediaTypes(available) { + var preferredMediaTypes = loadModule('mediaType').preferredMediaTypes; + return preferredMediaTypes(this.request.headers.accept, available); +}; + +// Backwards compatibility +Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; +Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; +Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; +Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; +Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; +Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; +Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; +Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; + +/** + * Load the given module. + * @private + */ + +function loadModule(moduleName) { + var module = modules[moduleName]; + + if (module !== undefined) { + return module; + } + + // This uses a switch for static require analysis + switch (moduleName) { + case 'charset': + module = __webpack_require__(177); + break; + case 'encoding': + module = __webpack_require__(178); + break; + case 'language': + module = __webpack_require__(179); + break; + case 'mediaType': + module = __webpack_require__(180); + break; + default: + throw new Error('Cannot find module \'' + moduleName + '\''); + } + + // Store to prevent invoking require() + modules[moduleName] = module; + + return module; +} + + +/***/ }), +/* 177 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * negotiator + * Copyright(c) 2012 Isaac Z. Schlueter + * Copyright(c) 2014 Federico Romero + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = preferredCharsets; +module.exports.preferredCharsets = preferredCharsets; + +/** + * Module variables. + * @private + */ + +var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; + +/** + * Parse the Accept-Charset header. + * @private + */ + +function parseAcceptCharset(accept) { + var accepts = accept.split(','); + + for (var i = 0, j = 0; i < accepts.length; i++) { + var charset = parseCharset(accepts[i].trim(), i); + + if (charset) { + accepts[j++] = charset; + } + } + + // trim accepts + accepts.length = j; + + return accepts; +} + +/** + * Parse a charset from the Accept-Charset header. + * @private + */ + +function parseCharset(str, i) { + var match = simpleCharsetRegExp.exec(str); + if (!match) return null; + + var charset = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(';') + for (var i = 0; i < params.length; i ++) { + var p = params[i].trim().split('='); + if (p[0] === 'q') { + q = parseFloat(p[1]); + break; + } + } + } + + return { + charset: charset, + q: q, + i: i + }; +} + +/** + * Get the priority of a charset. + * @private + */ + +function getCharsetPriority(charset, accepted, index) { + var priority = {o: -1, q: 0, s: 0}; + + for (var i = 0; i < accepted.length; i++) { + var spec = specify(charset, accepted[i], index); + + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + + return priority; +} + +/** + * Get the specificity of the charset. + * @private + */ + +function specify(charset, spec, index) { + var s = 0; + if(spec.charset.toLowerCase() === charset.toLowerCase()){ + s |= 1; + } else if (spec.charset !== '*' ) { + return null + } + + return { + i: index, + o: spec.i, + q: spec.q, + s: s + } +} + +/** + * Get the preferred charsets from an Accept-Charset header. + * @public + */ + +function preferredCharsets(accept, provided) { + // RFC 2616 sec 14.2: no header = * + var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || ''); + + if (!provided) { + // sorted list of all charsets + return accepts + .filter(isQuality) + .sort(compareSpecs) + .map(getFullCharset); + } + + var priorities = provided.map(function getPriority(type, index) { + return getCharsetPriority(type, accepts, index); + }); + + // sorted list of accepted charsets + return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) { + return provided[priorities.indexOf(priority)]; + }); +} + +/** + * Compare two specs. + * @private + */ + +function compareSpecs(a, b) { + return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; +} + +/** + * Get full charset string. + * @private + */ + +function getFullCharset(spec) { + return spec.charset; +} + +/** + * Check if a spec has any quality. + * @private + */ + +function isQuality(spec) { + return spec.q > 0; +} + + +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * negotiator + * Copyright(c) 2012 Isaac Z. Schlueter + * Copyright(c) 2014 Federico Romero + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = preferredEncodings; +module.exports.preferredEncodings = preferredEncodings; + +/** + * Module variables. + * @private + */ + +var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; + +/** + * Parse the Accept-Encoding header. + * @private + */ + +function parseAcceptEncoding(accept) { + var accepts = accept.split(','); + var hasIdentity = false; + var minQuality = 1; + + for (var i = 0, j = 0; i < accepts.length; i++) { + var encoding = parseEncoding(accepts[i].trim(), i); + + if (encoding) { + accepts[j++] = encoding; + hasIdentity = hasIdentity || specify('identity', encoding); + minQuality = Math.min(minQuality, encoding.q || 1); + } + } + + if (!hasIdentity) { + /* + * If identity doesn't explicitly appear in the accept-encoding header, + * it's added to the list of acceptable encoding with the lowest q + */ + accepts[j++] = { + encoding: 'identity', + q: minQuality, + i: i + }; + } + + // trim accepts + accepts.length = j; + + return accepts; +} + +/** + * Parse an encoding from the Accept-Encoding header. + * @private + */ + +function parseEncoding(str, i) { + var match = simpleEncodingRegExp.exec(str); + if (!match) return null; + + var encoding = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(';'); + for (var i = 0; i < params.length; i ++) { + var p = params[i].trim().split('='); + if (p[0] === 'q') { + q = parseFloat(p[1]); + break; + } + } + } + + return { + encoding: encoding, + q: q, + i: i + }; +} + +/** + * Get the priority of an encoding. + * @private + */ + +function getEncodingPriority(encoding, accepted, index) { + var priority = {o: -1, q: 0, s: 0}; + + for (var i = 0; i < accepted.length; i++) { + var spec = specify(encoding, accepted[i], index); + + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + + return priority; +} + +/** + * Get the specificity of the encoding. + * @private + */ + +function specify(encoding, spec, index) { + var s = 0; + if(spec.encoding.toLowerCase() === encoding.toLowerCase()){ + s |= 1; + } else if (spec.encoding !== '*' ) { + return null + } + + return { + i: index, + o: spec.i, + q: spec.q, + s: s + } +}; + +/** + * Get the preferred encodings from an Accept-Encoding header. + * @public + */ + +function preferredEncodings(accept, provided) { + var accepts = parseAcceptEncoding(accept || ''); + + if (!provided) { + // sorted list of all encodings + return accepts + .filter(isQuality) + .sort(compareSpecs) + .map(getFullEncoding); + } + + var priorities = provided.map(function getPriority(type, index) { + return getEncodingPriority(type, accepts, index); + }); + + // sorted list of accepted encodings + return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) { + return provided[priorities.indexOf(priority)]; + }); +} + +/** + * Compare two specs. + * @private + */ + +function compareSpecs(a, b) { + return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; +} + +/** + * Get full encoding string. + * @private + */ + +function getFullEncoding(spec) { + return spec.encoding; +} + +/** + * Check if a spec has any quality. + * @private + */ + +function isQuality(spec) { + return spec.q > 0; +} + + +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * negotiator + * Copyright(c) 2012 Isaac Z. Schlueter + * Copyright(c) 2014 Federico Romero + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = preferredLanguages; +module.exports.preferredLanguages = preferredLanguages; + +/** + * Module variables. + * @private + */ + +var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/; + +/** + * Parse the Accept-Language header. + * @private + */ + +function parseAcceptLanguage(accept) { + var accepts = accept.split(','); + + for (var i = 0, j = 0; i < accepts.length; i++) { + var langauge = parseLanguage(accepts[i].trim(), i); + + if (langauge) { + accepts[j++] = langauge; + } + } + + // trim accepts + accepts.length = j; + + return accepts; +} + +/** + * Parse a language from the Accept-Language header. + * @private + */ + +function parseLanguage(str, i) { + var match = simpleLanguageRegExp.exec(str); + if (!match) return null; + + var prefix = match[1], + suffix = match[2], + full = prefix; + + if (suffix) full += "-" + suffix; + + var q = 1; + if (match[3]) { + var params = match[3].split(';') + for (var i = 0; i < params.length; i ++) { + var p = params[i].split('='); + if (p[0] === 'q') q = parseFloat(p[1]); + } + } + + return { + prefix: prefix, + suffix: suffix, + q: q, + i: i, + full: full + }; +} + +/** + * Get the priority of a language. + * @private + */ + +function getLanguagePriority(language, accepted, index) { + var priority = {o: -1, q: 0, s: 0}; + + for (var i = 0; i < accepted.length; i++) { + var spec = specify(language, accepted[i], index); + + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + + return priority; +} + +/** + * Get the specificity of the language. + * @private + */ + +function specify(language, spec, index) { + var p = parseLanguage(language) + if (!p) return null; + var s = 0; + if(spec.full.toLowerCase() === p.full.toLowerCase()){ + s |= 4; + } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) { + s |= 2; + } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) { + s |= 1; + } else if (spec.full !== '*' ) { + return null + } + + return { + i: index, + o: spec.i, + q: spec.q, + s: s + } +}; + +/** + * Get the preferred languages from an Accept-Language header. + * @public + */ + +function preferredLanguages(accept, provided) { + // RFC 2616 sec 14.4: no header = * + var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || ''); + + if (!provided) { + // sorted list of all languages + return accepts + .filter(isQuality) + .sort(compareSpecs) + .map(getFullLanguage); + } + + var priorities = provided.map(function getPriority(type, index) { + return getLanguagePriority(type, accepts, index); + }); + + // sorted list of accepted languages + return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) { + return provided[priorities.indexOf(priority)]; + }); +} + +/** + * Compare two specs. + * @private + */ + +function compareSpecs(a, b) { + return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; +} + +/** + * Get full language string. + * @private + */ + +function getFullLanguage(spec) { + return spec.full; +} + +/** + * Check if a spec has any quality. + * @private + */ + +function isQuality(spec) { + return spec.q > 0; +} + + +/***/ }), +/* 180 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * negotiator + * Copyright(c) 2012 Isaac Z. Schlueter + * Copyright(c) 2014 Federico Romero + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = preferredMediaTypes; +module.exports.preferredMediaTypes = preferredMediaTypes; + +/** + * Module variables. + * @private + */ + +var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/; + +/** + * Parse the Accept header. + * @private + */ + +function parseAccept(accept) { + var accepts = splitMediaTypes(accept); + + for (var i = 0, j = 0; i < accepts.length; i++) { + var mediaType = parseMediaType(accepts[i].trim(), i); + + if (mediaType) { + accepts[j++] = mediaType; + } + } + + // trim accepts + accepts.length = j; + + return accepts; +} + +/** + * Parse a media type from the Accept header. + * @private + */ + +function parseMediaType(str, i) { + var match = simpleMediaTypeRegExp.exec(str); + if (!match) return null; + + var params = Object.create(null); + var q = 1; + var subtype = match[2]; + var type = match[1]; + + if (match[3]) { + var kvps = splitParameters(match[3]).map(splitKeyValuePair); + + for (var j = 0; j < kvps.length; j++) { + var pair = kvps[j]; + var key = pair[0].toLowerCase(); + var val = pair[1]; + + // get the value, unwrapping quotes + var value = val && val[0] === '"' && val[val.length - 1] === '"' + ? val.substr(1, val.length - 2) + : val; + + if (key === 'q') { + q = parseFloat(value); + break; + } + + // store parameter + params[key] = value; + } + } + + return { + type: type, + subtype: subtype, + params: params, + q: q, + i: i + }; +} + +/** + * Get the priority of a media type. + * @private + */ + +function getMediaTypePriority(type, accepted, index) { + var priority = {o: -1, q: 0, s: 0}; + + for (var i = 0; i < accepted.length; i++) { + var spec = specify(type, accepted[i], index); + + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + + return priority; +} + +/** + * Get the specificity of the media type. + * @private + */ + +function specify(type, spec, index) { + var p = parseMediaType(type); + var s = 0; + + if (!p) { + return null; + } + + if(spec.type.toLowerCase() == p.type.toLowerCase()) { + s |= 4 + } else if(spec.type != '*') { + return null; + } + + if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) { + s |= 2 + } else if(spec.subtype != '*') { + return null; + } + + var keys = Object.keys(spec.params); + if (keys.length > 0) { + if (keys.every(function (k) { + return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase(); + })) { + s |= 1 + } else { + return null + } + } + + return { + i: index, + o: spec.i, + q: spec.q, + s: s, + } +} + +/** + * Get the preferred media types from an Accept header. + * @public + */ + +function preferredMediaTypes(accept, provided) { + // RFC 2616 sec 14.2: no header = */* + var accepts = parseAccept(accept === undefined ? '*/*' : accept || ''); + + if (!provided) { + // sorted list of all types + return accepts + .filter(isQuality) + .sort(compareSpecs) + .map(getFullType); + } + + var priorities = provided.map(function getPriority(type, index) { + return getMediaTypePriority(type, accepts, index); + }); + + // sorted list of accepted types + return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) { + return provided[priorities.indexOf(priority)]; + }); +} + +/** + * Compare two specs. + * @private + */ + +function compareSpecs(a, b) { + return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; +} + +/** + * Get full type string. + * @private + */ + +function getFullType(spec) { + return spec.type + '/' + spec.subtype; +} + +/** + * Check if a spec has any quality. + * @private + */ + +function isQuality(spec) { + return spec.q > 0; +} + +/** + * Count the number of quotes in a string. + * @private + */ + +function quoteCount(string) { + var count = 0; + var index = 0; + + while ((index = string.indexOf('"', index)) !== -1) { + count++; + index++; + } + + return count; +} + +/** + * Split a key value pair. + * @private + */ + +function splitKeyValuePair(str) { + var index = str.indexOf('='); + var key; + var val; + + if (index === -1) { + key = str; + } else { + key = str.substr(0, index); + val = str.substr(index + 1); + } + + return [key, val]; +} + +/** + * Split an Accept header into media types. + * @private + */ + +function splitMediaTypes(accept) { + var accepts = accept.split(','); + + for (var i = 1, j = 0; i < accepts.length; i++) { + if (quoteCount(accepts[j]) % 2 == 0) { + accepts[++j] = accepts[i]; + } else { + accepts[j] += ',' + accepts[i]; + } + } + + // trim accepts + accepts.length = j + 1; + + return accepts; +} + +/** + * Split a string of parameters. + * @private + */ + +function splitParameters(str) { + var parameters = str.split(';'); + + for (var i = 1, j = 0; i < parameters.length; i++) { + if (quoteCount(parameters[j]) % 2 == 0) { + parameters[++j] = parameters[i]; + } else { + parameters[j] += ';' + parameters[i]; + } + } + + // trim parameters + parameters.length = j + 1; + + for (var i = 0; i < parameters.length; i++) { + parameters[i] = parameters[i].trim(); + } + + return parameters; +} + + +/***/ }), +/* 181 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var Buffer = __webpack_require__(92).Buffer +var contentDisposition = __webpack_require__(93); +var deprecate = __webpack_require__(7)('express'); +var encodeUrl = __webpack_require__(38); +var escapeHtml = __webpack_require__(39); +var http = __webpack_require__(41); +var isAbsolute = __webpack_require__(12).isAbsolute; +var onFinished = __webpack_require__(37); +var path = __webpack_require__(0); +var statuses = __webpack_require__(19) +var merge = __webpack_require__(42); +var sign = __webpack_require__(182).sign; +var normalizeType = __webpack_require__(12).normalizeType; +var normalizeTypes = __webpack_require__(12).normalizeTypes; +var setCharset = __webpack_require__(12).setCharset; +var cookie = __webpack_require__(183); +var send = __webpack_require__(52); +var extname = path.extname; +var mime = send.mime; +var resolve = path.resolve; +var vary = __webpack_require__(184); + +/** + * Response prototype. + * @public + */ + +var res = Object.create(http.ServerResponse.prototype) + +/** + * Module exports. + * @public + */ + +module.exports = res + +/** + * Module variables. + * @private + */ + +var charsetRegExp = /;\s*charset\s*=/; + +/** + * Set status `code`. + * + * @param {Number} code + * @return {ServerResponse} + * @public + */ + +res.status = function status(code) { + this.statusCode = code; + return this; +}; + +/** + * Set Link header field with the given `links`. + * + * Examples: + * + * res.links({ + * next: 'http://api.example.com/users?page=2', + * last: 'http://api.example.com/users?page=5' + * }); + * + * @param {Object} links + * @return {ServerResponse} + * @public + */ + +res.links = function(links){ + var link = this.get('Link') || ''; + if (link) link += ', '; + return this.set('Link', link + Object.keys(links).map(function(rel){ + return '<' + links[rel] + '>; rel="' + rel + '"'; + }).join(', ')); +}; + +/** + * Send a response. + * + * Examples: + * + * res.send(Buffer.from('wahoo')); + * res.send({ some: 'json' }); + * res.send('

some html

'); + * + * @param {string|number|boolean|object|Buffer} body + * @public + */ + +res.send = function send(body) { + var chunk = body; + var encoding; + var req = this.req; + var type; + + // settings + var app = this.app; + + // allow status / body + if (arguments.length === 2) { + // res.send(body, status) backwards compat + if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') { + deprecate('res.send(body, status): Use res.status(status).send(body) instead'); + this.statusCode = arguments[1]; + } else { + deprecate('res.send(status, body): Use res.status(status).send(body) instead'); + this.statusCode = arguments[0]; + chunk = arguments[1]; + } + } + + // disambiguate res.send(status) and res.send(status, num) + if (typeof chunk === 'number' && arguments.length === 1) { + // res.send(status) will set status message as text string + if (!this.get('Content-Type')) { + this.type('txt'); + } + + deprecate('res.send(status): Use res.sendStatus(status) instead'); + this.statusCode = chunk; + chunk = statuses[chunk] + } + + switch (typeof chunk) { + // string defaulting to html + case 'string': + if (!this.get('Content-Type')) { + this.type('html'); + } + break; + case 'boolean': + case 'number': + case 'object': + if (chunk === null) { + chunk = ''; + } else if (Buffer.isBuffer(chunk)) { + if (!this.get('Content-Type')) { + this.type('bin'); + } + } else { + return this.json(chunk); + } + break; + } + + // write strings in utf-8 + if (typeof chunk === 'string') { + encoding = 'utf8'; + type = this.get('Content-Type'); + + // reflect this in content-type + if (typeof type === 'string') { + this.set('Content-Type', setCharset(type, 'utf-8')); + } + } + + // determine if ETag should be generated + var etagFn = app.get('etag fn') + var generateETag = !this.get('ETag') && typeof etagFn === 'function' + + // populate Content-Length + var len + if (chunk !== undefined) { + if (Buffer.isBuffer(chunk)) { + // get length of Buffer + len = chunk.length + } else if (!generateETag && chunk.length < 1000) { + // just calculate length when no ETag + small chunk + len = Buffer.byteLength(chunk, encoding) + } else { + // convert chunk to Buffer and calculate + chunk = Buffer.from(chunk, encoding) + encoding = undefined; + len = chunk.length + } + + this.set('Content-Length', len); + } + + // populate ETag + var etag; + if (generateETag && len !== undefined) { + if ((etag = etagFn(chunk, encoding))) { + this.set('ETag', etag); + } + } + + // freshness + if (req.fresh) this.statusCode = 304; + + // strip irrelevant headers + if (204 === this.statusCode || 304 === this.statusCode) { + this.removeHeader('Content-Type'); + this.removeHeader('Content-Length'); + this.removeHeader('Transfer-Encoding'); + chunk = ''; + } + + if (req.method === 'HEAD') { + // skip body for HEAD + this.end(); + } else { + // respond + this.end(chunk, encoding); + } + + return this; +}; + +/** + * Send JSON response. + * + * Examples: + * + * res.json(null); + * res.json({ user: 'tj' }); + * + * @param {string|number|boolean|object} obj + * @public + */ + +res.json = function json(obj) { + var val = obj; + + // allow status / body + if (arguments.length === 2) { + // res.json(body, status) backwards compat + if (typeof arguments[1] === 'number') { + deprecate('res.json(obj, status): Use res.status(status).json(obj) instead'); + this.statusCode = arguments[1]; + } else { + deprecate('res.json(status, obj): Use res.status(status).json(obj) instead'); + this.statusCode = arguments[0]; + val = arguments[1]; + } + } + + // settings + var app = this.app; + var escape = app.get('json escape') + var replacer = app.get('json replacer'); + var spaces = app.get('json spaces'); + var body = stringify(val, replacer, spaces, escape) + + // content-type + if (!this.get('Content-Type')) { + this.set('Content-Type', 'application/json'); + } + + return this.send(body); +}; + +/** + * Send JSON response with JSONP callback support. + * + * Examples: + * + * res.jsonp(null); + * res.jsonp({ user: 'tj' }); + * + * @param {string|number|boolean|object} obj + * @public + */ + +res.jsonp = function jsonp(obj) { + var val = obj; + + // allow status / body + if (arguments.length === 2) { + // res.json(body, status) backwards compat + if (typeof arguments[1] === 'number') { + deprecate('res.jsonp(obj, status): Use res.status(status).json(obj) instead'); + this.statusCode = arguments[1]; + } else { + deprecate('res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead'); + this.statusCode = arguments[0]; + val = arguments[1]; + } + } + + // settings + var app = this.app; + var escape = app.get('json escape') + var replacer = app.get('json replacer'); + var spaces = app.get('json spaces'); + var body = stringify(val, replacer, spaces, escape) + var callback = this.req.query[app.get('jsonp callback name')]; + + // content-type + if (!this.get('Content-Type')) { + this.set('X-Content-Type-Options', 'nosniff'); + this.set('Content-Type', 'application/json'); + } + + // fixup callback + if (Array.isArray(callback)) { + callback = callback[0]; + } + + // jsonp + if (typeof callback === 'string' && callback.length !== 0) { + this.set('X-Content-Type-Options', 'nosniff'); + this.set('Content-Type', 'text/javascript'); + + // restrict callback charset + callback = callback.replace(/[^\[\]\w$.]/g, ''); + + // replace chars not allowed in JavaScript that are in JSON + body = body + .replace(/\u2028/g, '\\u2028') + .replace(/\u2029/g, '\\u2029'); + + // the /**/ is a specific security mitigation for "Rosetta Flash JSONP abuse" + // the typeof check is just to reduce client error noise + body = '/**/ typeof ' + callback + ' === \'function\' && ' + callback + '(' + body + ');'; + } + + return this.send(body); +}; + +/** + * Send given HTTP status code. + * + * Sets the response status to `statusCode` and the body of the + * response to the standard description from node's http.STATUS_CODES + * or the statusCode number if no description. + * + * Examples: + * + * res.sendStatus(200); + * + * @param {number} statusCode + * @public + */ + +res.sendStatus = function sendStatus(statusCode) { + var body = statuses[statusCode] || String(statusCode) + + this.statusCode = statusCode; + this.type('txt'); + + return this.send(body); +}; + +/** + * Transfer the file at the given `path`. + * + * Automatically sets the _Content-Type_ response header field. + * The callback `callback(err)` is invoked when the transfer is complete + * or when an error occurs. Be sure to check `res.sentHeader` + * if you wish to attempt responding, as the header and some data + * may have already been transferred. + * + * Options: + * + * - `maxAge` defaulting to 0 (can be string converted by `ms`) + * - `root` root directory for relative filenames + * - `headers` object of headers to serve with file + * - `dotfiles` serve dotfiles, defaulting to false; can be `"allow"` to send them + * + * Other options are passed along to `send`. + * + * Examples: + * + * The following example illustrates how `res.sendFile()` may + * be used as an alternative for the `static()` middleware for + * dynamic situations. The code backing `res.sendFile()` is actually + * the same code, so HTTP cache support etc is identical. + * + * app.get('/user/:uid/photos/:file', function(req, res){ + * var uid = req.params.uid + * , file = req.params.file; + * + * req.user.mayViewFilesFrom(uid, function(yes){ + * if (yes) { + * res.sendFile('/uploads/' + uid + '/' + file); + * } else { + * res.send(403, 'Sorry! you cant see that.'); + * } + * }); + * }); + * + * @public + */ + +res.sendFile = function sendFile(path, options, callback) { + var done = callback; + var req = this.req; + var res = this; + var next = req.next; + var opts = options || {}; + + if (!path) { + throw new TypeError('path argument is required to res.sendFile'); + } + + // support function as second arg + if (typeof options === 'function') { + done = options; + opts = {}; + } + + if (!opts.root && !isAbsolute(path)) { + throw new TypeError('path must be absolute or specify root to res.sendFile'); + } + + // create file stream + var pathname = encodeURI(path); + var file = send(req, pathname, opts); + + // transfer + sendfile(res, file, opts, function (err) { + if (done) return done(err); + if (err && err.code === 'EISDIR') return next(); + + // next() all but write errors + if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') { + next(err); + } + }); +}; + +/** + * Transfer the file at the given `path`. + * + * Automatically sets the _Content-Type_ response header field. + * The callback `callback(err)` is invoked when the transfer is complete + * or when an error occurs. Be sure to check `res.sentHeader` + * if you wish to attempt responding, as the header and some data + * may have already been transferred. + * + * Options: + * + * - `maxAge` defaulting to 0 (can be string converted by `ms`) + * - `root` root directory for relative filenames + * - `headers` object of headers to serve with file + * - `dotfiles` serve dotfiles, defaulting to false; can be `"allow"` to send them + * + * Other options are passed along to `send`. + * + * Examples: + * + * The following example illustrates how `res.sendfile()` may + * be used as an alternative for the `static()` middleware for + * dynamic situations. The code backing `res.sendfile()` is actually + * the same code, so HTTP cache support etc is identical. + * + * app.get('/user/:uid/photos/:file', function(req, res){ + * var uid = req.params.uid + * , file = req.params.file; + * + * req.user.mayViewFilesFrom(uid, function(yes){ + * if (yes) { + * res.sendfile('/uploads/' + uid + '/' + file); + * } else { + * res.send(403, 'Sorry! you cant see that.'); + * } + * }); + * }); + * + * @public + */ + +res.sendfile = function (path, options, callback) { + var done = callback; + var req = this.req; + var res = this; + var next = req.next; + var opts = options || {}; + + // support function as second arg + if (typeof options === 'function') { + done = options; + opts = {}; + } + + // create file stream + var file = send(req, path, opts); + + // transfer + sendfile(res, file, opts, function (err) { + if (done) return done(err); + if (err && err.code === 'EISDIR') return next(); + + // next() all but write errors + if (err && err.code !== 'ECONNABORT' && err.syscall !== 'write') { + next(err); + } + }); +}; + +res.sendfile = deprecate.function(res.sendfile, + 'res.sendfile: Use res.sendFile instead'); + +/** + * Transfer the file at the given `path` as an attachment. + * + * Optionally providing an alternate attachment `filename`, + * and optional callback `callback(err)`. The callback is invoked + * when the data transfer is complete, or when an error has + * ocurred. Be sure to check `res.headersSent` if you plan to respond. + * + * Optionally providing an `options` object to use with `res.sendFile()`. + * This function will set the `Content-Disposition` header, overriding + * any `Content-Disposition` header passed as header options in order + * to set the attachment and filename. + * + * This method uses `res.sendFile()`. + * + * @public + */ + +res.download = function download (path, filename, options, callback) { + var done = callback; + var name = filename; + var opts = options || null + + // support function as second or third arg + if (typeof filename === 'function') { + done = filename; + name = null; + opts = null + } else if (typeof options === 'function') { + done = options + opts = null + } + + // set Content-Disposition when file is sent + var headers = { + 'Content-Disposition': contentDisposition(name || path) + }; + + // merge user-provided headers + if (opts && opts.headers) { + var keys = Object.keys(opts.headers) + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + if (key.toLowerCase() !== 'content-disposition') { + headers[key] = opts.headers[key] + } + } + } + + // merge user-provided options + opts = Object.create(opts) + opts.headers = headers + + // Resolve the full path for sendFile + var fullPath = resolve(path); + + // send file + return this.sendFile(fullPath, opts, done) +}; + +/** + * Set _Content-Type_ response header with `type` through `mime.lookup()` + * when it does not contain "/", or set the Content-Type to `type` otherwise. + * + * Examples: + * + * res.type('.html'); + * res.type('html'); + * res.type('json'); + * res.type('application/json'); + * res.type('png'); + * + * @param {String} type + * @return {ServerResponse} for chaining + * @public + */ + +res.contentType = +res.type = function contentType(type) { + var ct = type.indexOf('/') === -1 + ? mime.lookup(type) + : type; + + return this.set('Content-Type', ct); +}; + +/** + * Respond to the Acceptable formats using an `obj` + * of mime-type callbacks. + * + * This method uses `req.accepted`, an array of + * acceptable types ordered by their quality values. + * When "Accept" is not present the _first_ callback + * is invoked, otherwise the first match is used. When + * no match is performed the server responds with + * 406 "Not Acceptable". + * + * Content-Type is set for you, however if you choose + * you may alter this within the callback using `res.type()` + * or `res.set('Content-Type', ...)`. + * + * res.format({ + * 'text/plain': function(){ + * res.send('hey'); + * }, + * + * 'text/html': function(){ + * res.send('

hey

'); + * }, + * + * 'appliation/json': function(){ + * res.send({ message: 'hey' }); + * } + * }); + * + * In addition to canonicalized MIME types you may + * also use extnames mapped to these types: + * + * res.format({ + * text: function(){ + * res.send('hey'); + * }, + * + * html: function(){ + * res.send('

hey

'); + * }, + * + * json: function(){ + * res.send({ message: 'hey' }); + * } + * }); + * + * By default Express passes an `Error` + * with a `.status` of 406 to `next(err)` + * if a match is not made. If you provide + * a `.default` callback it will be invoked + * instead. + * + * @param {Object} obj + * @return {ServerResponse} for chaining + * @public + */ + +res.format = function(obj){ + var req = this.req; + var next = req.next; + + var fn = obj.default; + if (fn) delete obj.default; + var keys = Object.keys(obj); + + var key = keys.length > 0 + ? req.accepts(keys) + : false; + + this.vary("Accept"); + + if (key) { + this.set('Content-Type', normalizeType(key).value); + obj[key](req, this, next); + } else if (fn) { + fn(); + } else { + var err = new Error('Not Acceptable'); + err.status = err.statusCode = 406; + err.types = normalizeTypes(keys).map(function(o){ return o.value }); + next(err); + } + + return this; +}; + +/** + * Set _Content-Disposition_ header to _attachment_ with optional `filename`. + * + * @param {String} filename + * @return {ServerResponse} + * @public + */ + +res.attachment = function attachment(filename) { + if (filename) { + this.type(extname(filename)); + } + + this.set('Content-Disposition', contentDisposition(filename)); + + return this; +}; + +/** + * Append additional header `field` with value `val`. + * + * Example: + * + * res.append('Link', ['', '']); + * res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly'); + * res.append('Warning', '199 Miscellaneous warning'); + * + * @param {String} field + * @param {String|Array} val + * @return {ServerResponse} for chaining + * @public + */ + +res.append = function append(field, val) { + var prev = this.get(field); + var value = val; + + if (prev) { + // concat the new and prev vals + value = Array.isArray(prev) ? prev.concat(val) + : Array.isArray(val) ? [prev].concat(val) + : [prev, val]; + } + + return this.set(field, value); +}; + +/** + * Set header `field` to `val`, or pass + * an object of header fields. + * + * Examples: + * + * res.set('Foo', ['bar', 'baz']); + * res.set('Accept', 'application/json'); + * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' }); + * + * Aliased as `res.header()`. + * + * @param {String|Object} field + * @param {String|Array} val + * @return {ServerResponse} for chaining + * @public + */ + +res.set = +res.header = function header(field, val) { + if (arguments.length === 2) { + var value = Array.isArray(val) + ? val.map(String) + : String(val); + + // add charset to content-type + if (field.toLowerCase() === 'content-type') { + if (Array.isArray(value)) { + throw new TypeError('Content-Type cannot be set to an Array'); + } + if (!charsetRegExp.test(value)) { + var charset = mime.charsets.lookup(value.split(';')[0]); + if (charset) value += '; charset=' + charset.toLowerCase(); + } + } + + this.setHeader(field, value); + } else { + for (var key in field) { + this.set(key, field[key]); + } + } + return this; +}; + +/** + * Get value for header `field`. + * + * @param {String} field + * @return {String} + * @public + */ + +res.get = function(field){ + return this.getHeader(field); +}; + +/** + * Clear cookie `name`. + * + * @param {String} name + * @param {Object} [options] + * @return {ServerResponse} for chaining + * @public + */ + +res.clearCookie = function clearCookie(name, options) { + var opts = merge({ expires: new Date(1), path: '/' }, options); + + return this.cookie(name, '', opts); +}; + +/** + * Set cookie `name` to `value`, with the given `options`. + * + * Options: + * + * - `maxAge` max-age in milliseconds, converted to `expires` + * - `signed` sign the cookie + * - `path` defaults to "/" + * + * Examples: + * + * // "Remember Me" for 15 minutes + * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); + * + * // save as above + * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) + * + * @param {String} name + * @param {String|Object} value + * @param {Object} [options] + * @return {ServerResponse} for chaining + * @public + */ + +res.cookie = function (name, value, options) { + var opts = merge({}, options); + var secret = this.req.secret; + var signed = opts.signed; + + if (signed && !secret) { + throw new Error('cookieParser("secret") required for signed cookies'); + } + + var val = typeof value === 'object' + ? 'j:' + JSON.stringify(value) + : String(value); + + if (signed) { + val = 's:' + sign(val, secret); + } + + if ('maxAge' in opts) { + opts.expires = new Date(Date.now() + opts.maxAge); + opts.maxAge /= 1000; + } + + if (opts.path == null) { + opts.path = '/'; + } + + this.append('Set-Cookie', cookie.serialize(name, String(val), opts)); + + return this; +}; + +/** + * Set the location header to `url`. + * + * The given `url` can also be "back", which redirects + * to the _Referrer_ or _Referer_ headers or "/". + * + * Examples: + * + * res.location('/foo/bar').; + * res.location('http://example.com'); + * res.location('../login'); + * + * @param {String} url + * @return {ServerResponse} for chaining + * @public + */ + +res.location = function location(url) { + var loc = url; + + // "back" is an alias for the referrer + if (url === 'back') { + loc = this.req.get('Referrer') || '/'; + } + + // set location + return this.set('Location', encodeUrl(loc)); +}; + +/** + * Redirect to the given `url` with optional response `status` + * defaulting to 302. + * + * The resulting `url` is determined by `res.location()`, so + * it will play nicely with mounted apps, relative paths, + * `"back"` etc. + * + * Examples: + * + * res.redirect('/foo/bar'); + * res.redirect('http://example.com'); + * res.redirect(301, 'http://example.com'); + * res.redirect('../login'); // /blog/post/1 -> /blog/login + * + * @public + */ + +res.redirect = function redirect(url) { + var address = url; + var body; + var status = 302; + + // allow status / url + if (arguments.length === 2) { + if (typeof arguments[0] === 'number') { + status = arguments[0]; + address = arguments[1]; + } else { + deprecate('res.redirect(url, status): Use res.redirect(status, url) instead'); + status = arguments[1]; + } + } + + // Set location header + address = this.location(address).get('Location'); + + // Support text/{plain,html} by default + this.format({ + text: function(){ + body = statuses[status] + '. Redirecting to ' + address + }, + + html: function(){ + var u = escapeHtml(address); + body = '

' + statuses[status] + '. Redirecting to ' + u + '

' + }, + + default: function(){ + body = ''; + } + }); + + // Respond + this.statusCode = status; + this.set('Content-Length', Buffer.byteLength(body)); + + if (this.req.method === 'HEAD') { + this.end(); + } else { + this.end(body); + } +}; + +/** + * Add `field` to Vary. If already present in the Vary set, then + * this call is simply ignored. + * + * @param {Array|String} field + * @return {ServerResponse} for chaining + * @public + */ + +res.vary = function(field){ + // checks for back-compat + if (!field || (Array.isArray(field) && !field.length)) { + deprecate('res.vary(): Provide a field name'); + return this; + } + + vary(this, field); + + return this; +}; + +/** + * Render `view` with the given `options` and optional callback `fn`. + * When a callback function is given a response will _not_ be made + * automatically, otherwise a response of _200_ and _text/html_ is given. + * + * Options: + * + * - `cache` boolean hinting to the engine it should cache + * - `filename` filename of the view being rendered + * + * @public + */ + +res.render = function render(view, options, callback) { + var app = this.req.app; + var done = callback; + var opts = options || {}; + var req = this.req; + var self = this; + + // support callback function as second arg + if (typeof options === 'function') { + done = options; + opts = {}; + } + + // merge res.locals + opts._locals = self.locals; + + // default callback to respond + done = done || function (err, str) { + if (err) return req.next(err); + self.send(str); + }; + + // render + app.render(view, opts, done); +}; + +// pipe the send file stream +function sendfile(res, file, options, callback) { + var done = false; + var streaming; + + // request aborted + function onaborted() { + if (done) return; + done = true; + + var err = new Error('Request aborted'); + err.code = 'ECONNABORTED'; + callback(err); + } + + // directory + function ondirectory() { + if (done) return; + done = true; + + var err = new Error('EISDIR, read'); + err.code = 'EISDIR'; + callback(err); + } + + // errors + function onerror(err) { + if (done) return; + done = true; + callback(err); + } + + // ended + function onend() { + if (done) return; + done = true; + callback(); + } + + // file + function onfile() { + streaming = false; + } + + // finished + function onfinish(err) { + if (err && err.code === 'ECONNRESET') return onaborted(); + if (err) return onerror(err); + if (done) return; + + setImmediate(function () { + if (streaming !== false && !done) { + onaborted(); + return; + } + + if (done) return; + done = true; + callback(); + }); + } + + // streaming + function onstream() { + streaming = true; + } + + file.on('directory', ondirectory); + file.on('end', onend); + file.on('error', onerror); + file.on('file', onfile); + file.on('stream', onstream); + onFinished(res, onfinish); + + if (options.headers) { + // set headers on successful transfer + file.on('headers', function headers(res) { + var obj = options.headers; + var keys = Object.keys(obj); + + for (var i = 0; i < keys.length; i++) { + var k = keys[i]; + res.setHeader(k, obj[k]); + } + }); + } + + // pipe + file.pipe(res); +} + +/** + * Stringify JSON, like JSON.stringify, but v8 optimized, with the + * ability to escape characters that can trigger HTML sniffing. + * + * @param {*} value + * @param {function} replaces + * @param {number} spaces + * @param {boolean} escape + * @returns {string} + * @private + */ + +function stringify (value, replacer, spaces, escape) { + // v8 checks arguments.length for optimizing simple call + // https://bugs.chromium.org/p/v8/issues/detail?id=4730 + var json = replacer || spaces + ? JSON.stringify(value, replacer, spaces) + : JSON.stringify(value); + + if (escape) { + json = json.replace(/[<>&]/g, function (c) { + switch (c.charCodeAt(0)) { + case 0x3c: + return '\\u003c' + case 0x3e: + return '\\u003e' + case 0x26: + return '\\u0026' + default: + return c + } + }) + } + + return json +} + + +/***/ }), +/* 182 */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * Module dependencies. + */ + +var crypto = __webpack_require__(43); + +/** + * Sign the given `val` with `secret`. + * + * @param {String} val + * @param {String} secret + * @return {String} + * @api private + */ + +exports.sign = function(val, secret){ + if ('string' != typeof val) throw new TypeError("Cookie value must be provided as a string."); + if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); + return val + '.' + crypto + .createHmac('sha256', secret) + .update(val) + .digest('base64') + .replace(/\=+$/, ''); +}; + +/** + * Unsign and decode the given `val` with `secret`, + * returning `false` if the signature is invalid. + * + * @param {String} val + * @param {String} secret + * @return {String|Boolean} + * @api private + */ + +exports.unsign = function(val, secret){ + if ('string' != typeof val) throw new TypeError("Signed cookie string must be provided."); + if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); + var str = val.slice(0, val.lastIndexOf('.')) + , mac = exports.sign(str, secret); + + return sha1(mac) == sha1(val) ? str : false; +}; + +/** + * Private + */ + +function sha1(str){ + return crypto.createHash('sha1').update(str).digest('hex'); +} + + +/***/ }), +/* 183 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +exports.parse = parse; +exports.serialize = serialize; + +/** + * Module variables. + * @private + */ + +var decode = decodeURIComponent; +var encode = encodeURIComponent; +var pairSplitRegExp = /; */; + +/** + * RegExp to match field-content in RFC 7230 sec 3.2 + * + * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] + * field-vchar = VCHAR / obs-text + * obs-text = %x80-FF + */ + +var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; + +/** + * Parse a cookie header. + * + * Parse the given cookie header string into an object + * The object has the various cookies as keys(names) => values + * + * @param {string} str + * @param {object} [options] + * @return {object} + * @public + */ + +function parse(str, options) { + if (typeof str !== 'string') { + throw new TypeError('argument str must be a string'); + } + + var obj = {} + var opt = options || {}; + var pairs = str.split(pairSplitRegExp); + var dec = opt.decode || decode; + + for (var i = 0; i < pairs.length; i++) { + var pair = pairs[i]; + var eq_idx = pair.indexOf('='); + + // skip things that don't look like key=value + if (eq_idx < 0) { + continue; + } + + var key = pair.substr(0, eq_idx).trim() + var val = pair.substr(++eq_idx, pair.length).trim(); + + // quoted values + if ('"' == val[0]) { + val = val.slice(1, -1); + } + + // only assign once + if (undefined == obj[key]) { + obj[key] = tryDecode(val, dec); + } + } + + return obj; +} + +/** + * Serialize data into a cookie header. + * + * Serialize the a name value pair into a cookie string suitable for + * http headers. An optional options object specified cookie parameters. + * + * serialize('foo', 'bar', { httpOnly: true }) + * => "foo=bar; httpOnly" + * + * @param {string} name + * @param {string} val + * @param {object} [options] + * @return {string} + * @public + */ + +function serialize(name, val, options) { + var opt = options || {}; + var enc = opt.encode || encode; + + if (typeof enc !== 'function') { + throw new TypeError('option encode is invalid'); + } + + if (!fieldContentRegExp.test(name)) { + throw new TypeError('argument name is invalid'); + } + + var value = enc(val); + + if (value && !fieldContentRegExp.test(value)) { + throw new TypeError('argument val is invalid'); + } + + var str = name + '=' + value; + + if (null != opt.maxAge) { + var maxAge = opt.maxAge - 0; + if (isNaN(maxAge)) throw new Error('maxAge should be a Number'); + str += '; Max-Age=' + Math.floor(maxAge); + } + + if (opt.domain) { + if (!fieldContentRegExp.test(opt.domain)) { + throw new TypeError('option domain is invalid'); + } + + str += '; Domain=' + opt.domain; + } + + if (opt.path) { + if (!fieldContentRegExp.test(opt.path)) { + throw new TypeError('option path is invalid'); + } + + str += '; Path=' + opt.path; + } + + if (opt.expires) { + if (typeof opt.expires.toUTCString !== 'function') { + throw new TypeError('option expires is invalid'); + } + + str += '; Expires=' + opt.expires.toUTCString(); + } + + if (opt.httpOnly) { + str += '; HttpOnly'; + } + + if (opt.secure) { + str += '; Secure'; + } + + if (opt.sameSite) { + var sameSite = typeof opt.sameSite === 'string' + ? opt.sameSite.toLowerCase() : opt.sameSite; + + switch (sameSite) { + case true: + str += '; SameSite=Strict'; + break; + case 'lax': + str += '; SameSite=Lax'; + break; + case 'strict': + str += '; SameSite=Strict'; + break; + default: + throw new TypeError('option sameSite is invalid'); + } + } + + return str; +} + +/** + * Try decoding a string using a decoding function. + * + * @param {string} str + * @param {function} decode + * @private + */ + +function tryDecode(str, decode) { + try { + return decode(str); + } catch (e) { + return str; + } +} + + +/***/ }), +/* 184 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * vary + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + */ + +module.exports = vary +module.exports.append = append + +/** + * RegExp to match field-name in RFC 7230 sec 3.2 + * + * field-name = token + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" + * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" + * / DIGIT / ALPHA + * ; any VCHAR, except delimiters + */ + +var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/ + +/** + * Append a field to a vary header. + * + * @param {String} header + * @param {String|Array} field + * @return {String} + * @public + */ + +function append (header, field) { + if (typeof header !== 'string') { + throw new TypeError('header argument is required') + } + + if (!field) { + throw new TypeError('field argument is required') + } + + // get fields array + var fields = !Array.isArray(field) + ? parse(String(field)) + : field + + // assert on invalid field names + for (var j = 0; j < fields.length; j++) { + if (!FIELD_NAME_REGEXP.test(fields[j])) { + throw new TypeError('field argument contains an invalid header name') + } + } + + // existing, unspecified vary + if (header === '*') { + return header + } + + // enumerate current values + var val = header + var vals = parse(header.toLowerCase()) + + // unspecified vary + if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) { + return '*' + } + + for (var i = 0; i < fields.length; i++) { + var fld = fields[i].toLowerCase() + + // append value (case-preserving) + if (vals.indexOf(fld) === -1) { + vals.push(fld) + val = val + ? val + ', ' + fields[i] + : fields[i] + } + } + + return val +} + +/** + * Parse a vary header into an array. + * + * @param {String} header + * @return {Array} + * @private + */ + +function parse (header) { + var end = 0 + var list = [] + var start = 0 + + // gather tokens + for (var i = 0, len = header.length; i < len; i++) { + switch (header.charCodeAt(i)) { + case 0x20: /* */ + if (start === end) { + start = end = i + 1 + } + break + case 0x2c: /* , */ + list.push(header.substring(start, end)) + start = end = i + 1 + break + default: + end = i + 1 + break + } + } + + // final token + list.push(header.substring(start, end)) + + return list +} + +/** + * Mark that a request is varied on a header field. + * + * @param {Object} res + * @param {String|Array} field + * @public + */ + +function vary (res, field) { + if (!res || !res.getHeader || !res.setHeader) { + // quack quack + throw new TypeError('res argument is required') + } + + // get existing header + var val = res.getHeader('Vary') || '' + var header = Array.isArray(val) + ? val.join(', ') + : String(val) + + // set new header + if ((val = append(header, field))) { + res.setHeader('Vary', val) + } +} + + +/***/ }), +/* 185 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * serve-static + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module dependencies. + * @private + */ + +var encodeUrl = __webpack_require__(38) +var escapeHtml = __webpack_require__(39) +var parseUrl = __webpack_require__(21) +var resolve = __webpack_require__(0).resolve +var send = __webpack_require__(52) +var url = __webpack_require__(87) + +/** + * Module exports. + * @public + */ + +module.exports = serveStatic +module.exports.mime = send.mime + +/** + * @param {string} root + * @param {object} [options] + * @return {function} + * @public + */ + +function serveStatic (root, options) { + if (!root) { + throw new TypeError('root path required') + } + + if (typeof root !== 'string') { + throw new TypeError('root path must be a string') + } + + // copy options object + var opts = Object.create(options || null) + + // fall-though + var fallthrough = opts.fallthrough !== false + + // default redirect + var redirect = opts.redirect !== false + + // headers listener + var setHeaders = opts.setHeaders + + if (setHeaders && typeof setHeaders !== 'function') { + throw new TypeError('option setHeaders must be function') + } + + // setup options for send + opts.maxage = opts.maxage || opts.maxAge || 0 + opts.root = resolve(root) + + // construct directory listener + var onDirectory = redirect + ? createRedirectDirectoryListener() + : createNotFoundDirectoryListener() + + return function serveStatic (req, res, next) { + if (req.method !== 'GET' && req.method !== 'HEAD') { + if (fallthrough) { + return next() + } + + // method not allowed + res.statusCode = 405 + res.setHeader('Allow', 'GET, HEAD') + res.setHeader('Content-Length', '0') + res.end() + return + } + + var forwardError = !fallthrough + var originalUrl = parseUrl.original(req) + var path = parseUrl(req).pathname + + // make sure redirect occurs at mount + if (path === '/' && originalUrl.pathname.substr(-1) !== '/') { + path = '' + } + + // create send stream + var stream = send(req, path, opts) + + // add directory handler + stream.on('directory', onDirectory) + + // add headers listener + if (setHeaders) { + stream.on('headers', setHeaders) + } + + // add file listener for fallthrough + if (fallthrough) { + stream.on('file', function onFile () { + // once file is determined, always forward error + forwardError = true + }) + } + + // forward errors + stream.on('error', function error (err) { + if (forwardError || !(err.statusCode < 500)) { + next(err) + return + } + + next() + }) + + // pipe + stream.pipe(res) + } +} + +/** + * Collapse all leading slashes into a single slash + * @private + */ +function collapseLeadingSlashes (str) { + for (var i = 0; i < str.length; i++) { + if (str.charCodeAt(i) !== 0x2f /* / */) { + break + } + } + + return i > 1 + ? '/' + str.substr(i) + : str +} + + /** + * Create a minimal HTML document. + * + * @param {string} title + * @param {string} body + * @private + */ + +function createHtmlDocument (title, body) { + return '\n' + + '\n' + + '\n' + + '\n' + + '' + title + '\n' + + '\n' + + '\n' + + '
' + body + '
\n' + + '\n' + + '\n' +} + +/** + * Create a directory listener that just 404s. + * @private + */ + +function createNotFoundDirectoryListener () { + return function notFound () { + this.error(404) + } +} + +/** + * Create a directory listener that performs a redirect. + * @private + */ + +function createRedirectDirectoryListener () { + return function redirect (res) { + if (this.hasTrailingSlash()) { + this.error(404) + return + } + + // get original URL + var originalUrl = parseUrl.original(this.req) + + // append trailing slash + originalUrl.path = null + originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/') + + // reformat the URL + var loc = encodeUrl(url.format(originalUrl)) + var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + + escapeHtml(loc) + '') + + // send redirect response + res.statusCode = 301 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', Buffer.byteLength(doc)) + res.setHeader('Content-Security-Policy', "default-src 'self'") + res.setHeader('X-Content-Type-Options', 'nosniff') + res.setHeader('Location', loc) + res.end(doc) + } +} + + +/***/ }), +/* 186 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _stringify = __webpack_require__(22); + +var _stringify2 = _interopRequireDefault(_stringify); + +var _regenerator = __webpack_require__(23); + +var _regenerator2 = _interopRequireDefault(_regenerator); + +var _promise = __webpack_require__(24); + +var _promise2 = _interopRequireDefault(_promise); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { + return new (P || (P = _promise2.default))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : new P(function (resolve) { + resolve(result.value); + }).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var express = __webpack_require__(32); +var anomalyType_1 = __webpack_require__(30); +var analytics_1 = __webpack_require__(68); +var metrics_1 = __webpack_require__(113); +function sendAnomalyTypeStatus(req, res) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() { + var id, name, anomaly; + return _regenerator2.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + id = req.query.id; + name = req.query.name; + _context.prev = 2; + anomaly = void 0; + + if (id !== undefined) { + anomaly = anomalyType_1.loadAnomalyById(id); + } else { + anomaly = anomalyType_1.loadAnomalyByName(name); + } + + if (!(anomaly === null)) { + _context.next = 8; + break; + } + + res.status(404).send({ + code: 404, + message: 'Not found' + }); + return _context.abrupt("return"); + + case 8: + if (!(anomaly.status === undefined)) { + _context.next = 10; + break; + } + + throw new Error('No status for ' + name); + + case 10: + res.status(200).send({ status: anomaly.status, errorMessage: anomaly.error }); + _context.next = 17; + break; + + case 13: + _context.prev = 13; + _context.t0 = _context["catch"](2); + + console.error(_context.t0); + // TODO: better send 404 when we know than isn`t found + res.status(500).send({ error: 'Can`t return anything' }); + + case 17: + case "end": + return _context.stop(); + } + } + }, _callee, this, [[2, 13]]); + })); +} +function getAnomaly(req, res) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee2() { + var id, name, anomaly, payload; + return _regenerator2.default.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _context2.prev = 0; + id = req.query.id; + name = req.query.name; + anomaly = void 0; + + if (id !== undefined) { + anomaly = anomalyType_1.loadAnomalyById(id); + } else { + anomaly = anomalyType_1.loadAnomalyByName(name.toLowerCase()); + } + + if (!(anomaly === null)) { + _context2.next = 8; + break; + } + + res.status(404).send({ + code: 404, + message: 'Not found' + }); + return _context2.abrupt("return"); + + case 8: + payload = (0, _stringify2.default)({ + name: anomaly.name, + metric: anomaly.metric, + status: anomaly.status + }); + + res.status(200).send(payload); + _context2.next = 16; + break; + + case 12: + _context2.prev = 12; + _context2.t0 = _context2["catch"](0); + + console.error(_context2.t0); + // TODO: better send 404 when we know than isn`t found + res.status(500).send('Can`t get anything'); + + case 16: + case "end": + return _context2.stop(); + } + } + }, _callee2, this, [[0, 12]]); + })); +} +function createAnomaly(req, res) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee3() { + var metric, anomaly, anomalyId, payload; + return _regenerator2.default.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + try { + metric = { + datasource: req.body.metric.datasource, + targets: metrics_1.saveTargets(req.body.metric.targets) + }; + anomaly = { + name: req.body.name, + panelUrl: req.body.panelUrl, + metric: metric, + datasource: req.body.datasource, + status: 'learning', + last_prediction_time: 0, + next_id: 0 + }; + anomalyId = anomalyType_1.insertAnomaly(anomaly); + + if (anomalyId === null) { + res.status(403).send({ + code: 403, + message: 'Already exists' + }); + } + payload = (0, _stringify2.default)({ anomaly_id: anomalyId }); + + res.status(200).send(payload); + analytics_1.runLearning(anomalyId); + } catch (e) { + res.status(500).send({ + code: 500, + message: 'Internal error' + }); + } + + case 1: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); +} +function deleteAnomaly(req, res) { + try { + var id = req.query.id; + var name = req.query.name; + if (id !== undefined) { + anomalyType_1.removeAnomaly(id); + } else { + anomalyType_1.removeAnomaly(name.toLowerCase()); + } + res.status(200).send({ + code: 200, + message: 'Success' + }); + } catch (e) { + res.status(500).send({ + code: 500, + message: 'Internal error' + }); + } +} +exports.router = express.Router(); +exports.router.get('/status', sendAnomalyTypeStatus); +exports.router.get('/', getAnomaly); +exports.router.post('/', createAnomaly); +exports.router.delete('/', deleteAnomaly); + +/***/ }), +/* 187 */ +/***/ (function(module, exports, __webpack_require__) { + +var core = __webpack_require__(6); +var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify }); +module.exports = function stringify(it) { // eslint-disable-line no-unused-vars + return $JSON.stringify.apply($JSON, arguments); +}; + + +/***/ }), +/* 188 */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// This method of obtaining a reference to the global object needs to be +// kept identical to the way it is obtained in runtime.js +var g = (function() { return this })() || Function("return this")(); + +// Use `getOwnPropertyNames` because not all browsers support calling +// `hasOwnProperty` on the global `self` object in a worker. See #183. +var hadRuntime = g.regeneratorRuntime && + Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0; + +// Save the old regeneratorRuntime in case it needs to be restored later. +var oldRuntime = hadRuntime && g.regeneratorRuntime; + +// Force reevalutation of runtime.js. +g.regeneratorRuntime = undefined; + +module.exports = __webpack_require__(189); + +if (hadRuntime) { + // Restore the original runtime. + g.regeneratorRuntime = oldRuntime; +} else { + // Remove the global property added by runtime.js. + try { + delete g.regeneratorRuntime; + } catch(e) { + g.regeneratorRuntime = undefined; + } +} + + +/***/ }), +/* 189 */ +/***/ (function(module, exports) { + +/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +!(function(global) { + "use strict"; + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + var inModule = typeof module === "object"; + var runtime = global.regeneratorRuntime; + if (runtime) { + if (inModule) { + // If regeneratorRuntime is defined globally and we're in a module, + // make the exports object identical to regeneratorRuntime. + module.exports = runtime; + } + // Don't bother evaluating the rest of this file if the runtime was + // already defined globally. + return; + } + + // Define the runtime globally (as expected by generated code) as either + // module.exports (if we're in a module) or a new, empty object. + runtime = global.regeneratorRuntime = inModule ? module.exports : {}; + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + generator._invoke = makeInvokeMethod(innerFn, self, context); + + return generator; + } + runtime.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; - segment.id = nextId; - segment.labeled = labeled; - addedIds.push(nextId); - nextId++; - segments.push(segment); + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + + runtime.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + + runtime.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + runtime.awrap = function(arg) { + return { __await: arg }; + }; + + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return Promise.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. If the Promise is rejected, however, the + // result for this iteration will be rejected with the same + // reason. Note that rejections of yielded Promises are not + // thrown back into the generator function, as is the case + // when an awaited Promise is rejected. This difference in + // behavior between yield and await is important, because it + // allows the consumer to decide what to do with the yielded + // rejection (swallow it and continue, manually .throw it back + // into the generator, abandon iteration, whatever). With + // await, by contrast, there is no opportunity to examine the + // rejection reason outside the generator function, so the + // only option is to throw it from the await expression, and + // let the generator function handle the exception. + result.value = unwrapped; + resolve(result); + }, reject); + } + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + runtime.AsyncIterator = AsyncIterator; + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + runtime.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + + return runtime.isGeneratorFunction(outerFn) + ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined) { + // A .throw or .return when the delegate iterator has no .throw + // method always terminates the yield* loop. + context.delegate = null; + + if (context.method === "throw") { + if (delegate.iterator.return) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + 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 (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; + + // Resume execution at the desired location (see delegateYield). + context.next = delegate.nextLoc; + + // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + + } else { + // Re-yield the result returned by the delegate method. + return info; + } + + // The delegate iterator is finished, so forget it and continue with + // the outer generator. + context.delegate = null; + return ContinueSentinel; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + + Gp[toStringTagSymbol] = "Generator"; + + // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + Gp[iteratorSymbol] = function() { + return this; + }; + + Gp.toString = function() { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (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) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + runtime.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; + } + + next.value = undefined; + next.done = true; + + return next; + }; + + return next.next = next; + } + } + + // Return an iterator with no values. + return { next: doneResult }; + } + runtime.values = values; + + function doneResult() { + return { value: undefined, done: true }; + } + + Context.prototype = { + constructor: Context, + + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + + this.method = "next"; + this.arg = undefined; + + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + + stop: function() { + this.done = true; + + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined; + } + + return !! caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); } + + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + + abrupt: function(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; + } + } + + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; } + } + }, + + "catch": function(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 (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined; + } + + return ContinueSentinel; } + }; +})( + // In sloppy mode, unbound `this` refers to the global object, fallback to + // Function constructor if we're in global strict mode. That is sadly a form + // of indirect eval which violates Content Security Policy. + (function() { return this })() || Function("return this")() +); - info.next_id = nextId; - saveSegments(anomalyId, segments); - anomalyType_1.saveAnomaly(anomalyId, info); - return addedIds; -} -exports.insertSegments = insertSegments; -function removeSegments(anomalyId, removedSegments) { - var segments = getLabeledSegments(anomalyId); - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - try { - var _loop = function _loop() { - var segmentId = _step3.value; +/***/ }), +/* 190 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(98); +__webpack_require__(53); +__webpack_require__(63); +__webpack_require__(204); +__webpack_require__(211); +__webpack_require__(212); +module.exports = __webpack_require__(6).Promise; + + +/***/ }), +/* 191 */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(54); +var defined = __webpack_require__(55); +// true -> String#at +// false -> String#codePointAt +module.exports = function (TO_STRING) { + return function (that, pos) { + var s = String(defined(that)); + var i = toInteger(pos); + var l = s.length; + var a, b; + if (i < 0 || i >= l) return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; +}; + + +/***/ }), +/* 192 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = !__webpack_require__(16) && !__webpack_require__(44)(function () { + return Object.defineProperty(__webpack_require__(58)('div'), 'a', { get: function () { return 7; } }).a != 7; +}); + + +/***/ }), +/* 193 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = __webpack_require__(9); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function (it, S) { + if (!isObject(it)) return it; + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; + if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), +/* 194 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(14); + + +/***/ }), +/* 195 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var create = __webpack_require__(100); +var descriptor = __webpack_require__(99); +var setToStringTag = __webpack_require__(45); +var IteratorPrototype = {}; + +// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() +__webpack_require__(14)(IteratorPrototype, __webpack_require__(3)('iterator'), function () { return this; }); + +module.exports = function (Constructor, NAME, next) { + Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); + setToStringTag(Constructor, NAME + ' Iterator'); +}; + + +/***/ }), +/* 196 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(15); +var anObject = __webpack_require__(11); +var getKeys = __webpack_require__(197); + +module.exports = __webpack_require__(16) ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = getKeys(Properties); + var length = keys.length; + var i = 0; + var P; + while (length > i) dP.f(O, P = keys[i++], Properties[P]); + return O; +}; + + +/***/ }), +/* 197 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = __webpack_require__(198); +var enumBugKeys = __webpack_require__(103); + +module.exports = Object.keys || function keys(O) { + return $keys(O, enumBugKeys); +}; + + +/***/ }), +/* 198 */ +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(26); +var toIObject = __webpack_require__(59); +var arrayIndexOf = __webpack_require__(199)(false); +var IE_PROTO = __webpack_require__(61)('IE_PROTO'); + +module.exports = function (object, names) { + var O = toIObject(object); + var i = 0; + var result = []; + var key; + for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; + + +/***/ }), +/* 199 */ +/***/ (function(module, exports, __webpack_require__) { + +// false -> Array#indexOf +// true -> Array#includes +var toIObject = __webpack_require__(59); +var toLength = __webpack_require__(60); +var toAbsoluteIndex = __webpack_require__(200); +module.exports = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) if (IS_INCLUDES || index in O) { + if (O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + + +/***/ }), +/* 200 */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(54); +var max = Math.max; +var min = Math.min; +module.exports = function (index, length) { + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); +}; + + +/***/ }), +/* 201 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) +var has = __webpack_require__(26); +var toObject = __webpack_require__(105); +var IE_PROTO = __webpack_require__(61)('IE_PROTO'); +var ObjectProto = Object.prototype; + +module.exports = Object.getPrototypeOf || function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; +}; + + +/***/ }), +/* 202 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var addToUnscopables = __webpack_require__(203); +var step = __webpack_require__(106); +var Iterators = __webpack_require__(27); +var toIObject = __webpack_require__(59); + +// 22.1.3.4 Array.prototype.entries() +// 22.1.3.13 Array.prototype.keys() +// 22.1.3.29 Array.prototype.values() +// 22.1.3.30 Array.prototype[@@iterator]() +module.exports = __webpack_require__(56)(Array, 'Array', function (iterated, kind) { + this._t = toIObject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind +// 22.1.5.2.1 %ArrayIteratorPrototype%.next() +}, function () { + var O = this._t; + var kind = this._k; + var index = this._i++; + if (!O || index >= O.length) { + this._t = undefined; + return step(1); + } + if (kind == 'keys') return step(0, index); + if (kind == 'values') return step(0, O[index]); + return step(0, [index, O[index]]); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) +Iterators.Arguments = Iterators.Array; + +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + + +/***/ }), +/* 203 */ +/***/ (function(module, exports) { + +module.exports = function () { /* empty */ }; + + +/***/ }), +/* 204 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; - segments = segments.filter(function (el) { - return el.id !== segmentId; - }); - }; +var LIBRARY = __webpack_require__(57); +var global = __webpack_require__(1); +var ctx = __webpack_require__(13); +var classof = __webpack_require__(64); +var $export = __webpack_require__(10); +var isObject = __webpack_require__(9); +var aFunction = __webpack_require__(25); +var anInstance = __webpack_require__(65); +var forOf = __webpack_require__(29); +var speciesConstructor = __webpack_require__(108); +var task = __webpack_require__(109).set; +var microtask = __webpack_require__(208)(); +var newPromiseCapabilityModule = __webpack_require__(66); +var perform = __webpack_require__(110); +var userAgent = __webpack_require__(209); +var promiseResolve = __webpack_require__(111); +var PROMISE = 'Promise'; +var TypeError = global.TypeError; +var process = global.process; +var versions = process && process.versions; +var v8 = versions && versions.v8 || ''; +var $Promise = global[PROMISE]; +var isNode = classof(process) == 'process'; +var empty = function () { /* empty */ }; +var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper; +var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f; - for (var _iterator3 = (0, _getIterator3.default)(removedSegments), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - _loop(); +var USE_NATIVE = !!function () { + try { + // correct subclassing with @@species support + var promise = $Promise.resolve(1); + var FakePromise = (promise.constructor = {})[__webpack_require__(3)('species')] = function (exec) { + exec(empty, empty); + }; + // unhandled rejections tracking support, NodeJS Promise without it fails @@species test + return (isNode || typeof PromiseRejectionEvent == 'function') + && promise.then(empty) instanceof FakePromise + // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // we can't detect it synchronously, so just check versions + && v8.indexOf('6.6') !== 0 + && userAgent.indexOf('Chrome/66') === -1; + } catch (e) { /* empty */ } +}(); + +// helpers +var isThenable = function (it) { + var then; + return isObject(it) && typeof (then = it.then) == 'function' ? then : false; +}; +var notify = function (promise, isReject) { + if (promise._n) return; + promise._n = true; + var chain = promise._c; + microtask(function () { + var value = promise._v; + var ok = promise._s == 1; + var i = 0; + var run = function (reaction) { + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (promise._h == 2) onHandleUnhandled(promise); + promise._h = 1; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // may throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (e) { + if (domain && !exited) domain.exit(); + reject(e); + } + }; + while (chain.length > i) run(chain[i++]); // variable length - can't use forEach + promise._c = []; + promise._n = false; + if (isReject && !promise._h) onUnhandled(promise); + }); +}; +var onUnhandled = function (promise) { + task.call(global, function () { + var value = promise._v; + var unhandled = isUnhandled(promise); + var result, handler, console; + if (unhandled) { + result = perform(function () { + if (isNode) { + process.emit('unhandledRejection', value, promise); + } else if (handler = global.onunhandledrejection) { + handler({ promise: promise, reason: value }); + } else if ((console = global.console) && console.error) { + console.error('Unhandled promise rejection', value); } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + promise._h = isNode || isUnhandled(promise) ? 2 : 1; + } promise._a = undefined; + if (unhandled && result.e) throw result.v; + }); +}; +var isUnhandled = function (promise) { + return promise._h !== 1 && (promise._a || promise._c).length === 0; +}; +var onHandleUnhandled = function (promise) { + task.call(global, function () { + var handler; + if (isNode) { + process.emit('rejectionHandled', promise); + } else if (handler = global.onrejectionhandled) { + handler({ promise: promise, reason: promise._v }); + } + }); +}; +var $reject = function (value) { + var promise = this; + if (promise._d) return; + promise._d = true; + promise = promise._w || promise; // unwrap + promise._v = value; + promise._s = 2; + if (!promise._a) promise._a = promise._c.slice(); + notify(promise, true); +}; +var $resolve = function (value) { + var promise = this; + var then; + if (promise._d) return; + promise._d = true; + promise = promise._w || promise; // unwrap + try { + if (promise === value) throw TypeError("Promise can't be resolved itself"); + if (then = isThenable(value)) { + microtask(function () { + var wrapper = { _w: promise, _d: false }; // wrap try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } + then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); + } catch (e) { + $reject.call(wrapper, e); } + }); + } else { + promise._v = value; + promise._s = 1; + notify(promise, false); } + } catch (e) { + $reject.call({ _w: promise, _d: false }, e); // wrap + } +}; - saveSegments(anomalyId, segments); +// constructor polyfill +if (!USE_NATIVE) { + // 25.4.3.1 Promise(executor) + $Promise = function Promise(executor) { + anInstance(this, $Promise, PROMISE, '_h'); + aFunction(executor); + Internal.call(this); + try { + executor(ctx($resolve, this, 1), ctx($reject, this, 1)); + } catch (err) { + $reject.call(this, err); + } + }; + // eslint-disable-next-line no-unused-vars + Internal = function Promise(executor) { + this._c = []; // <- awaiting reactions + this._a = undefined; // <- checked in isUnhandled reactions + this._s = 0; // <- state + this._d = false; // <- done + this._v = undefined; // <- value + this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled + this._n = false; // <- notify + }; + Internal.prototype = __webpack_require__(67)($Promise.prototype, { + // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected) + then: function then(onFulfilled, onRejected) { + var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); + reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; + reaction.fail = typeof onRejected == 'function' && onRejected; + reaction.domain = isNode ? process.domain : undefined; + this._c.push(reaction); + if (this._a) this._a.push(reaction); + if (this._s) notify(this, false); + return reaction.promise; + }, + // 25.4.5.1 Promise.prototype.catch(onRejected) + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + this.promise = promise; + this.resolve = ctx($resolve, promise, 1); + this.reject = ctx($reject, promise, 1); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === $Promise || C === Wrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; } -exports.removeSegments = removeSegments; + +$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise }); +__webpack_require__(45)($Promise, PROMISE); +__webpack_require__(112)(PROMISE); +Wrapper = __webpack_require__(6)[PROMISE]; + +// statics +$export($export.S + $export.F * !USE_NATIVE, PROMISE, { + // 25.4.4.5 Promise.reject(r) + reject: function reject(r) { + var capability = newPromiseCapability(this); + var $$reject = capability.reject; + $$reject(r); + return capability.promise; + } +}); +$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { + // 25.4.4.6 Promise.resolve(x) + resolve: function resolve(x) { + return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x); + } +}); +$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(210)(function (iter) { + $Promise.all(iter)['catch'](empty); +})), PROMISE, { + // 25.4.4.1 Promise.all(iterable) + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var values = []; + var index = 0; + var remaining = 1; + forOf(iterable, false, function (promise) { + var $index = index++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + C.resolve(promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[$index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.e) reject(result.v); + return capability.promise; + }, + // 25.4.4.4 Promise.race(iterable) + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + forOf(iterable, false, function (promise) { + C.resolve(promise).then(capability.resolve, reject); + }); + }); + if (result.e) reject(result.v); + return capability.promise; + } +}); + /***/ }), -/* 12 */ +/* 205 */ +/***/ (function(module, exports, __webpack_require__) { + +// call something on iterator step with safe closing on error +var anObject = __webpack_require__(11); +module.exports = function (iterator, fn, value, entries) { + try { + return entries ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (e) { + var ret = iterator['return']; + if (ret !== undefined) anObject(ret.call(iterator)); + throw e; + } +}; + + +/***/ }), +/* 206 */ +/***/ (function(module, exports, __webpack_require__) { + +// check on default Array iterator +var Iterators = __webpack_require__(27); +var ITERATOR = __webpack_require__(3)('iterator'); +var ArrayProto = Array.prototype; + +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); +}; + + +/***/ }), +/* 207 */ /***/ (function(module, exports) { -module.exports = require('crypto'); +// fast apply, http://jsperf.lnkit.com/fast-apply/5 +module.exports = function (fn, args, that) { + var un = that === undefined; + switch (args.length) { + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); +}; + /***/ }), -/* 13 */ +/* 208 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; +var global = __webpack_require__(1); +var macrotask = __webpack_require__(109).set; +var Observer = global.MutationObserver || global.WebKitMutationObserver; +var process = global.process; +var Promise = global.Promise; +var isNode = __webpack_require__(28)(process) == 'process'; +module.exports = function () { + var head, last, notify; -var _stringify = __webpack_require__(2); + var flush = function () { + var parent, fn; + if (isNode && (parent = process.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (e) { + if (head) notify(); + else last = undefined; + throw e; + } + } last = undefined; + if (parent) parent.enter(); + }; -var _stringify2 = _interopRequireDefault(_stringify); + // Node.js + if (isNode) { + notify = function () { + process.nextTick(flush); + }; + // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339 + } else if (Observer && !(global.navigator && global.navigator.standalone)) { + var toggle = true; + var node = document.createTextNode(''); + new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + var promise = Promise.resolve(undefined); + notify = function () { + promise.then(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } -var _getIterator2 = __webpack_require__(8); + return function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } last = task; + }; +}; -var _getIterator3 = _interopRequireDefault(_getIterator2); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/***/ }), +/* 209 */ +/***/ (function(module, exports, __webpack_require__) { -Object.defineProperty(exports, "__esModule", { value: true }); -var path = __webpack_require__(0); -var json_1 = __webpack_require__(6); -var config_1 = __webpack_require__(1); -var crypto = __webpack_require__(12); -function saveTargets(targets) { - var metrics = []; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; +var global = __webpack_require__(1); +var navigator = global.navigator; - try { - for (var _iterator = (0, _getIterator3.default)(targets), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var target = _step.value; +module.exports = navigator && navigator.userAgent || ''; - metrics.push(saveTarget(target)); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - return metrics; -} -exports.saveTargets = saveTargets; -function saveTarget(target) { - //const md5 = crypto.createHash('md5') - var targetId = crypto.createHash('md5').update((0, _stringify2.default)(target)).digest('hex'); - var filename = path.join(config_1.METRICS_PATH, targetId + ".json"); - json_1.writeJsonDataSync(filename, target); - return targetId; -} -function getTarget(targetId) { - var filename = path.join(config_1.METRICS_PATH, targetId + ".json"); - return json_1.getJsonDataSync(filename); -} -exports.getTarget = getTarget; +/***/ }), +/* 210 */ +/***/ (function(module, exports, __webpack_require__) { + +var ITERATOR = __webpack_require__(3)('iterator'); +var SAFE_CLOSING = false; + +try { + var riter = [7][ITERATOR](); + riter['return'] = function () { SAFE_CLOSING = true; }; + // eslint-disable-next-line no-throw-literal + Array.from(riter, function () { throw 2; }); +} catch (e) { /* empty */ } + +module.exports = function (exec, skipClosing) { + if (!skipClosing && !SAFE_CLOSING) return false; + var safe = false; + try { + var arr = [7]; + var iter = arr[ITERATOR](); + iter.next = function () { return { done: safe = true }; }; + arr[ITERATOR] = function () { return iter; }; + exec(arr); + } catch (e) { /* empty */ } + return safe; +}; + /***/ }), -/* 14 */ +/* 211 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +// https://github.com/tc39/proposal-promise-finally +var $export = __webpack_require__(10); +var core = __webpack_require__(6); +var global = __webpack_require__(1); +var speciesConstructor = __webpack_require__(108); +var promiseResolve = __webpack_require__(111); -var _getIterator2 = __webpack_require__(8); +$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) { + var C = speciesConstructor(this, core.Promise || global.Promise); + var isFunction = typeof onFinally == 'function'; + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); +} }); -var _getIterator3 = _interopRequireDefault(_getIterator2); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/***/ }), +/* 212 */ +/***/ (function(module, exports, __webpack_require__) { -Object.defineProperty(exports, "__esModule", { value: true }); -//import * as Telegraf from 'telegraf' -var path = __webpack_require__(0); -var config_1 = __webpack_require__(1); -var json_1 = __webpack_require__(6); -function sendNotification(anomalyName, active) { - console.log('Notification ' + anomalyName); - if (anomalyName in botConfig.subscriptions) { - var notificationMessage = void 0; - if (active) { - notificationMessage = 'Alert! Anomaly type ' + anomalyName; - } else { - notificationMessage = 'Ok! Anomaly type ' + anomalyName; - } - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; +"use strict"; - try { - for (var _iterator = (0, _getIterator3.default)(botConfig.subscriptions[anomalyName]), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var SubscriberId = _step.value; +// https://github.com/tc39/proposal-promise-try +var $export = __webpack_require__(10); +var newPromiseCapability = __webpack_require__(66); +var perform = __webpack_require__(110); - bot.telegram.sendMessage(SubscriberId, notificationMessage); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - } +$export($export.S, 'Promise', { 'try': function (callbackfn) { + var promiseCapability = newPromiseCapability.f(this); + var result = perform(callbackfn); + (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v); + return promiseCapability.promise; +} }); + + +/***/ }), +/* 213 */ +/***/ (function(module, exports) { + +module.exports = require("child_process"); + +/***/ }), +/* 214 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(63); +__webpack_require__(53); +module.exports = __webpack_require__(215); + + +/***/ }), +/* 215 */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(11); +var get = __webpack_require__(107); +module.exports = __webpack_require__(6).getIterator = function (it) { + var iterFn = get(it); + if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!'); + return anObject(iterFn.call(it)); +}; + + +/***/ }), +/* 216 */ +/***/ (function(module, exports, __webpack_require__) { + +//filter will reemit the data if cb(err,pass) pass is truthy + +// reduce is more tricky +// maybe we want to group the reductions or emit progress updates occasionally +// the most basic reduce just emits one 'data' event after it has recieved 'end' + +var Stream = __webpack_require__(5).Stream + , es = exports + , through = __webpack_require__(70) + , from = __webpack_require__(217) + , duplex = __webpack_require__(114) + , map = __webpack_require__(218) + , pause = __webpack_require__(219) + , split = __webpack_require__(220) + , pipeline = __webpack_require__(221) + , immediately = global.setImmediate || process.nextTick; + +es.Stream = Stream //re-export Stream from core +es.through = through +es.from = from +es.duplex = duplex +es.map = map +es.pause = pause +es.split = split +es.pipeline = es.connect = es.pipe = pipeline +// merge / concat +// +// combine multiple streams into a single stream. +// will emit end only once + +es.concat = //actually this should be called concat +es.merge = function (/*streams...*/) { + var toMerge = [].slice.call(arguments) + if (toMerge.length === 1 && (toMerge[0] instanceof Array)) { + toMerge = toMerge[0] //handle array as arguments object + } + var stream = new Stream() + stream.setMaxListeners(0) // allow adding more than 11 streams + var endCount = 0 + stream.writable = stream.readable = true + + if (toMerge.length) { + toMerge.forEach(function (e) { + e.pipe(stream, {end: false}) + var ended = false + e.on('end', function () { + if(ended) return + ended = true + endCount ++ + if(endCount == toMerge.length) + stream.emit('end') + }) + }) + } else { + process.nextTick(function () { + stream.emit('end') + }) + } + + stream.write = function (data) { + this.emit('data', data) + } + stream.destroy = function () { + toMerge.forEach(function (e) { + if(e.destroy) e.destroy() + }) + } + return stream } -exports.sendNotification = sendNotification; -function loadBotConfig() { - var filename = path.join(config_1.DATA_PATH, "bot_config.json"); - var jsonData = void 0; - try { - jsonData = json_1.getJsonDataSync(filename); - } catch (e) { - console.error(e.message); - jsonData = []; - } - return jsonData; + + +// writable stream, collects all events into an array +// and calls back when 'end' occurs +// mainly I'm using this to test the other functions + +es.writeArray = function (done) { + if ('function' !== typeof done) + throw new Error('function writeArray (done): done must be function') + + var a = new Stream () + , array = [], isDone = false + a.write = function (l) { + array.push(l) + } + a.end = function () { + isDone = true + done(null, array) + } + a.writable = true + a.readable = false + a.destroy = function () { + a.writable = a.readable = false + if(isDone) return + done(new Error('destroyed before end'), array) + } + return a } -function saveBotConfig(botConfig) { - var filename = path.join(config_1.DATA_PATH, "bot_config.json"); - try { - json_1.writeJsonDataSync(filename, botConfig); - } catch (e) { - console.error(e.message); + +//return a Stream that reads the properties of an object +//respecting pause() and resume() + +es.readArray = function (array) { + var stream = new Stream() + , i = 0 + , paused = false + , ended = false + + stream.readable = true + stream.writable = false + + if(!Array.isArray(array)) + throw new Error('event-stream.read expects an array') + + stream.resume = function () { + if(ended) return + paused = false + var l = array.length + while(i < l && !paused && !ended) { + stream.emit('data', array[i++]) } + if(i == l && !ended) + ended = true, stream.readable = false, stream.emit('end') + } + process.nextTick(stream.resume) + stream.pause = function () { + paused = true + } + stream.destroy = function () { + ended = true + stream.emit('close') + } + return stream } -var commandArgs = function commandArgs(ctx, next) { - try { - if (ctx.updateType === 'message') { - var text = ctx.update.message.text; - if (text !== undefined && text.startsWith('/')) { - var match = text.match(/^\/([^\s]+)\s?(.+)?/); - var args = []; - var command = void 0; - if (match !== null) { - if (match[1]) { - command = match[1]; - } - if (match[2]) { - args = match[2].split(' '); - } - } - ctx.state.command = { - raw: text, - command: command, - args: args - }; - } - } - return next(ctx); - } catch (e) {} -}; -function addNotification(ctx) { - console.log('addNotification'); - var command = ctx.state.command; - var chatId = ctx.chat.id; - if (command.args.length > 0) { - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - try { - for (var _iterator2 = (0, _getIterator3.default)(command.args), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var anomalyName = _step2.value; +// +// readable (asyncFunction) +// return a stream that calls an async function while the stream is not paused. +// +// the function must take: (count, callback) {... +// + +es.readable = +function (func, continueOnError) { + var stream = new Stream() + , i = 0 + , paused = false + , ended = false + , reading = false + + stream.readable = true + stream.writable = false + + if('function' !== typeof func) + throw new Error('event-stream.readable expects async function') + + stream.on('end', function () { ended = true }) + + function get (err, data) { - if (!(anomalyName in botConfig.subscriptions)) { - botConfig.subscriptions[anomalyName] = []; - } - if (botConfig.subscriptions[anomalyName].includes(chatId)) { - return ctx.reply('You are already subscribed on alerts from anomaly ' + command.args); - } else { - botConfig.subscriptions[anomalyName].push(chatId); - saveBotConfig(botConfig); - } - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } + if(err) { + stream.emit('error', err) + if(!continueOnError) stream.emit('end') + } else if (arguments.length > 1) + stream.emit('data', data) - return ctx.reply('You have been successfully subscribed on alerts from anomaly ' + command.args); - } else { - return ctx.reply('You should use syntax: \/addNotification '); - } + immediately(function () { + if(ended || paused || reading) return + try { + reading = true + func.call(stream, i++, function () { + reading = false + get.apply(null, arguments) + }) + } catch (err) { + stream.emit('error', err) + } + }) + } + stream.resume = function () { + paused = false + get() + } + process.nextTick(get) + stream.pause = function () { + paused = true + } + stream.destroy = function () { + stream.emit('end') + stream.emit('close') + ended = true + } + return stream } -function removeNotification(ctx) { - var command = ctx.state.command; - var chatId = ctx.chat.id; - if (command.args.length > 0) { - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - try { - for (var _iterator3 = (0, _getIterator3.default)(command.args), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var anomalyName = _step3.value; - if (anomalyName in botConfig.subscriptions) { - botConfig.subscriptions[anomalyName] = botConfig.subscriptions[anomalyName].filter(function (el) { - return el !== chatId; - }); - saveBotConfig(botConfig); - } - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } +// +// map sync +// - return ctx.reply('You have been successfully unsubscribed from alerts from ' + command.args); - } else { - return ctx.reply('You should use syntax: \/removeNotification '); +es.mapSync = function (sync) { + return es.through(function write(data) { + var mappedData + try { + mappedData = sync(data) + } catch (err) { + return this.emit('error', err) } + if (mappedData !== undefined) + this.emit('data', mappedData) + }) } -// const Telegraf = require('telegraf'); -var botConfig = void 0; -var bot = void 0; -function tgBotInit() { + +// +// log just print out what is coming through the stream, for debugging +// + +es.log = function (name) { + return es.through(function (data) { + var args = [].slice.call(arguments) + if(name) console.error(name, data) + else console.error(data) + this.emit('data', data) + }) +} + + +// +// child -- pipe through a child process +// + +es.child = function (child) { + + return es.duplex(child.stdin, child.stdout) + +} + +// +// parse +// +// must be used after es.split() to ensure that each chunk represents a line +// source.pipe(es.split()).pipe(es.parse()) + +es.parse = function (options) { + var emitError = !!(options ? options.error : false) + return es.through(function (data) { + var obj try { - // botConfig = loadBotConfig(); - // bot = new Telegraf(botConfig.token); - // bot.use(commandArgs); - // bot.command('addNotification', addNotification); - // bot.command('removeNotification', removeNotification); - // bot.startPolling(); - } catch (e) { - // TODO: handle exception + if(data) //ignore empty lines + obj = JSON.parse(data.toString()) + } catch (err) { + if (emitError) + return this.emit('error', err) + return console.error(err, 'attempting to parse:', data) } + //ignore lines that where only whitespace. + if(obj !== undefined) + this.emit('data', obj) + }) } -exports.tgBotInit = tgBotInit; +// +// stringify +// + +es.stringify = function () { + var Buffer = __webpack_require__(2).Buffer + return es.mapSync(function (e){ + return JSON.stringify(Buffer.isBuffer(e) ? e.toString() : e) + '\n' + }) +} + +// +// replace a string within a stream. +// +// warn: just concatenates the string and then does str.split().join(). +// probably not optimal. +// for smallish responses, who cares? +// I need this for shadow-npm so it's only relatively small json files. + +es.replace = function (from, to) { + return es.pipeline(es.split(from), es.join(to)) +} + +// +// join chunks with a joiner. just like Array#join +// also accepts a callback that is passed the chunks appended together +// this is still supported for legacy reasons. +// + +es.join = function (str) { + + //legacy api + if('function' === typeof str) + return es.wait(str) + + var first = true + return es.through(function (data) { + if(!first) + this.emit('data', str) + first = false + this.emit('data', data) + return true + }) +} + + +// +// wait. callback when 'end' is emitted, with all chunks appended as string. +// + +es.wait = function (callback) { + var arr = [] + return es.through(function (data) { arr.push(data) }, + function () { + var body = Buffer.isBuffer(arr[0]) ? Buffer.concat(arr) + : arr.join('') + this.emit('data', body) + this.emit('end') + if(callback) callback(null, body) + }) +} + +es.pipeable = function () { + throw new Error('[EVENT-STREAM] es.pipeable is deprecated') +} + /***/ }), -/* 15 */ +/* 217 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var express = __webpack_require__(7); -var bodyParser = __webpack_require__(16); -var anomalies_1 = __webpack_require__(17); -var segments_1 = __webpack_require__(20); -var alerts_1 = __webpack_require__(21); -var notification_1 = __webpack_require__(14); -var app = express(); -var PORT = process.env.HASTIC_PORT || 8000; -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: true })); -app.use(function (req, res, next) { - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS'); - res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); - next(); -}); -app.use('/anomalies', anomalies_1.router); -app.use('/segments', segments_1.router); -app.use('/alerts', alerts_1.router); -app.use('/', function (req, res) { - return res.send({ status: 'OK' }); -}); -app.listen(PORT, function () { - console.log("Server is running on :" + PORT); -}); -notification_1.tgBotInit(); -/***/ }), -/* 16 */ -/***/ (function(module, exports) { +var Stream = __webpack_require__(5) + +// from +// +// a stream that reads from an source. +// source may be an array, or a function. +// from handles pause behaviour for you. + +module.exports = +function from (source) { + if(Array.isArray(source)) { + var source_index = 0, source_len = source.length; + return from (function (i) { + if(source_index < source_len) + this.emit('data', source[source_index++]) + else + this.emit('end') + return true + }) + } + var s = new Stream(), i = 0 + s.ended = false + s.started = false + s.readable = true + s.writable = false + s.paused = false + s.ended = false + s.pause = function () { + s.started = true + s.paused = true + } + function next () { + s.started = true + if(s.ended) return + while(!s.ended && !s.paused && source.call(s, i++, function () { + if(!s.ended && !s.paused) + process.nextTick(next); + })) + ; + } + s.resume = function () { + s.started = true + s.paused = false + next() + } + s.on('end', function () { + s.ended = true + s.readable = false + process.nextTick(s.destroy) + }) + s.destroy = function () { + s.ended = true + s.emit('close') + } + /* + by default, the stream will start emitting at nextTick + if you want, you can pause it, after pipeing. + you can also resume before next tick, and that will also + work. + */ + process.nextTick(function () { + if(!s.started) s.resume() + }) + return s +} -module.exports = require('body-parser'); /***/ }), -/* 17 */ +/* 218 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; +//filter will reemit the data if cb(err,pass) pass is truthy +// reduce is more tricky +// maybe we want to group the reductions or emit progress updates occasionally +// the most basic reduce just emits one 'data' event after it has recieved 'end' -var _stringify = __webpack_require__(2); -var _stringify2 = _interopRequireDefault(_stringify); +var Stream = __webpack_require__(5).Stream -var _regenerator = __webpack_require__(3); -var _regenerator2 = _interopRequireDefault(_regenerator); +//create an event stream and apply function to each .write +//emitting each response as data +//unless it's an empty callback -var _promise = __webpack_require__(4); +module.exports = function (mapper, opts) { -var _promise2 = _interopRequireDefault(_promise); + var stream = new Stream() + , self = this + , inputs = 0 + , outputs = 0 + , ended = false + , paused = false + , destroyed = false + , lastWritten = 0 + , inNext = false -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + this.opts = opts || {}; + var errorEventName = this.opts.failures ? 'failure' : 'error'; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { - return new (P || (P = _promise2.default))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : new P(function (resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var express = __webpack_require__(7); -var anomalyType_1 = __webpack_require__(5); -var analytics_1 = __webpack_require__(10); -var metrics_1 = __webpack_require__(13); -function sendAnomalyTypeStatus(req, res) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() { - var id, name, anomaly; - return _regenerator2.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - id = req.query.id; - name = req.query.name; - _context.prev = 2; - anomaly = void 0; + // Items that are not ready to be written yet (because they would come out of + // order) get stuck in a queue for later. + var writeQueue = {} - if (id !== undefined) { - anomaly = anomalyType_1.loadAnomalyById(id); - } else { - anomaly = anomalyType_1.loadAnomalyByName(name); - } + stream.writable = true + stream.readable = true - if (!(anomaly === null)) { - _context.next = 8; - break; - } + function queueData (data, number) { + var nextToWrite = lastWritten + 1 - res.status(404).send({ - code: 404, - message: 'Not found' - }); - return _context.abrupt("return"); + if (number === nextToWrite) { + // If it's next, and its not undefined write it + if (data !== undefined) { + stream.emit.apply(stream, ['data', data]) + } + lastWritten ++ + nextToWrite ++ + } else { + // Otherwise queue it for later. + writeQueue[number] = data + } - case 8: - if (!(anomaly.status === undefined)) { - _context.next = 10; - break; - } + // If the next value is in the queue, write it + if (writeQueue.hasOwnProperty(nextToWrite)) { + var dataToWrite = writeQueue[nextToWrite] + delete writeQueue[nextToWrite] + return queueData(dataToWrite, nextToWrite) + } - throw new Error('No status for ' + name); + outputs ++ + if(inputs === outputs) { + if(paused) paused = false, stream.emit('drain') //written all the incoming events + if(ended) end() + } + } - case 10: - res.status(200).send({ status: anomaly.status, errorMessage: anomaly.error }); - _context.next = 17; - break; + function next (err, data, number) { + if(destroyed) return + inNext = true - case 13: - _context.prev = 13; - _context.t0 = _context["catch"](2); + if (!err || self.opts.failures) { + queueData(data, number) + } - console.error(_context.t0); - // TODO: better send 404 when we know than isn`t found - res.status(500).send({ error: 'Can`t return anything' }); + if (err) { + stream.emit.apply(stream, [ errorEventName, err ]); + } - case 17: - case "end": - return _context.stop(); - } - } - }, _callee, this, [[2, 13]]); - })); + inNext = false; + } + + // Wrap the mapper function by calling its callback with the order number of + // the item in the stream. + function wrappedMapper (input, number, callback) { + return mapper.call(null, input, function(err, data){ + callback(err, data, number) + }) + } + + stream.write = function (data) { + if(ended) throw new Error('map stream is not writable') + inNext = false + inputs ++ + + try { + //catch sync errors and handle them like async errors + var written = wrappedMapper(data, inputs, next) + paused = (written === false) + return !paused + } catch (err) { + //if the callback has been called syncronously, and the error + //has occured in an listener, throw it again. + if(inNext) + throw err + next(err) + return !paused + } + } + + function end (data) { + //if end was called with args, write it, + ended = true //write will emit 'end' if ended is true + stream.writable = false + if(data !== undefined) { + return queueData(data, inputs) + } else if (inputs == outputs) { //wait for processing + stream.readable = false, stream.emit('end'), stream.destroy() + } + } + + stream.end = function (data) { + if(ended) return + end() + } + + stream.destroy = function () { + ended = destroyed = true + stream.writable = stream.readable = paused = false + process.nextTick(function () { + stream.emit('close') + }) + } + stream.pause = function () { + paused = true + } + + stream.resume = function () { + paused = false + } + + return stream } -function getAnomaly(req, res) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee2() { - var id, name, anomaly, payload; - return _regenerator2.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - _context2.prev = 0; - id = req.query.id; - name = req.query.name; - anomaly = void 0; - if (id !== undefined) { - anomaly = anomalyType_1.loadAnomalyById(id); - } else { - anomaly = anomalyType_1.loadAnomalyByName(name.toLowerCase()); - } - if (!(anomaly === null)) { - _context2.next = 8; - break; - } - res.status(404).send({ - code: 404, - message: 'Not found' - }); - return _context2.abrupt("return"); - case 8: - payload = (0, _stringify2.default)({ - name: anomaly.name, - metric: anomaly.metric, - status: anomaly.status - }); - res.status(200).send(payload); - _context2.next = 16; - break; - case 12: - _context2.prev = 12; - _context2.t0 = _context2["catch"](0); +/***/ }), +/* 219 */ +/***/ (function(module, exports, __webpack_require__) { + +//through@2 handles this by default! +module.exports = __webpack_require__(70) + + + +/***/ }), +/* 220 */ +/***/ (function(module, exports, __webpack_require__) { + +//filter will reemit the data if cb(err,pass) pass is truthy + +// reduce is more tricky +// maybe we want to group the reductions or emit progress updates occasionally +// the most basic reduce just emits one 'data' event after it has recieved 'end' + + +var through = __webpack_require__(70) +var Decoder = __webpack_require__(79).StringDecoder - console.error(_context2.t0); - // TODO: better send 404 when we know than isn`t found - res.status(500).send('Can`t get anything'); +module.exports = split - case 16: - case "end": - return _context2.stop(); - } - } - }, _callee2, this, [[0, 12]]); - })); -} -function createAnomaly(req, res) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee3() { - var metric, anomaly, anomalyId, payload; - return _regenerator2.default.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - try { - metric = { - datasource: req.body.metric.datasource, - targets: metrics_1.saveTargets(req.body.metric.targets) - }; - anomaly = { - name: req.body.name, - panelUrl: req.body.panelUrl, - metric: metric, - datasource: req.body.datasource, - status: 'learning', - last_prediction_time: 0, - next_id: 0 - }; - anomalyId = anomalyType_1.insertAnomaly(anomaly); +//TODO pass in a function to map across the lines. - if (anomalyId === null) { - res.status(403).send({ - code: 403, - message: 'Already exists' - }); - } - payload = (0, _stringify2.default)({ anomaly_id: anomalyId }); +function split (matcher, mapper, options) { + var decoder = new Decoder() + var soFar = '' + var maxLength = options && options.maxLength; + if('function' === typeof matcher) + mapper = matcher, matcher = null + if (!matcher) + matcher = /\r?\n/ - res.status(200).send(payload); - analytics_1.runLearning(anomalyId); - } catch (e) { - res.status(500).send({ - code: 500, - message: 'Internal error' - }); - } + function emit(stream, piece) { + if(mapper) { + try { + piece = mapper(piece) + } + catch (err) { + return stream.emit('error', err) + } + if('undefined' !== typeof piece) + stream.queue(piece) + } + else + stream.queue(piece) + } - case 1: - case "end": - return _context3.stop(); - } - } - }, _callee3, this); - })); -} -function deleteAnomaly(req, res) { - try { - var id = req.query.id; - var name = req.query.name; - if (id !== undefined) { - anomalyType_1.removeAnomaly(id); - } else { - anomalyType_1.removeAnomaly(name.toLowerCase()); - } - res.status(200).send({ - code: 200, - message: 'Success' - }); - } catch (e) { - res.status(500).send({ - code: 500, - message: 'Internal error' - }); + function next (stream, buffer) { + var pieces = ((soFar != null ? soFar : '') + buffer).split(matcher) + soFar = pieces.pop() + + if (maxLength && soFar.length > maxLength) + stream.emit('error', new Error('maximum buffer reached')) + + for (var i = 0; i < pieces.length; i++) { + var piece = pieces[i] + emit(stream, piece) } + } + + return through(function (b) { + next(this, decoder.write(b)) + }, + function () { + if(decoder.end) + next(this, decoder.end()) + if(soFar != null) + emit(this, soFar) + this.queue(null) + }) } -exports.router = express.Router(); -exports.router.get('/status', sendAnomalyTypeStatus); -exports.router.get('/', getAnomaly); -exports.router.post('/', createAnomaly); -exports.router.delete('/', deleteAnomaly); -/***/ }), -/* 18 */ -/***/ (function(module, exports) { -module.exports = require('child_process'); /***/ }), -/* 19 */ -/***/ (function(module, exports) { +/* 221 */ +/***/ (function(module, exports, __webpack_require__) { + +var duplexer = __webpack_require__(114) + +module.exports = function () { + + var streams = [].slice.call(arguments) + , first = streams[0] + , last = streams[streams.length - 1] + , thepipe = duplexer(first, last) + + if(streams.length == 1) + return streams[0] + else if (!streams.length) + throw new Error('connect called with empty args') + + //pipe all the streams together + + function recurse (streams) { + if(streams.length < 2) + return + streams[0].pipe(streams[1]) + recurse(streams.slice(1)) + } + + recurse(streams) + + function onerror () { + var args = [].slice.call(arguments) + args.unshift('error') + thepipe.emit.apply(thepipe, args) + } + + //es.duplex already reemits the error from the first and last stream. + //add a listener for the inner streams in the pipeline. + for(var i = 1; i < streams.length - 1; i ++) + streams[i].on('error', onerror) + + return thepipe +} + -module.exports = require('event-stream'); /***/ }), -/* 20 */ +/* 222 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _regenerator = __webpack_require__(3); +var _regenerator = __webpack_require__(23); var _regenerator2 = _interopRequireDefault(_regenerator); -var _stringify = __webpack_require__(2); +var _stringify = __webpack_require__(22); var _stringify2 = _interopRequireDefault(_stringify); -var _promise = __webpack_require__(4); +var _promise = __webpack_require__(24); var _promise2 = _interopRequireDefault(_promise); @@ -1942,10 +25285,10 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument }); }; Object.defineProperty(exports, "__esModule", { value: true }); -var express = __webpack_require__(7); -var segments_1 = __webpack_require__(11); -var analytics_1 = __webpack_require__(10); -var anomalyType_1 = __webpack_require__(5); +var express = __webpack_require__(32); +var segments_1 = __webpack_require__(69); +var analytics_1 = __webpack_require__(68); +var anomalyType_1 = __webpack_require__(30); function sendSegments(req, res) { return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() { var anomalyId, anomaly, lastSegmentId, timeFrom, timeTo, segments, payload; @@ -2044,16 +25387,16 @@ exports.router.get('/', sendSegments); exports.router.patch('/', updateSegments); /***/ }), -/* 21 */ +/* 223 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var express = __webpack_require__(7); -var anomalyType_1 = __webpack_require__(5); -var alerts_1 = __webpack_require__(22); +var express = __webpack_require__(32); +var anomalyType_1 = __webpack_require__(30); +var alerts_1 = __webpack_require__(224); function getAlert(req, res) { try { var anomalyId = req.query.anomaly_id; @@ -2106,25 +25449,25 @@ exports.router.get('/', getAlert); exports.router.post('/', changeAlert); /***/ }), -/* 22 */ +/* 224 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _set = __webpack_require__(23); +var _set = __webpack_require__(225); var _set2 = _interopRequireDefault(_set); -var _regenerator = __webpack_require__(3); +var _regenerator = __webpack_require__(23); var _regenerator2 = _interopRequireDefault(_regenerator); -var _getIterator2 = __webpack_require__(8); +var _getIterator2 = __webpack_require__(46); var _getIterator3 = _interopRequireDefault(_getIterator2); -var _promise = __webpack_require__(4); +var _promise = __webpack_require__(24); var _promise2 = _interopRequireDefault(_promise); @@ -2155,13 +25498,13 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument }); }; Object.defineProperty(exports, "__esModule", { value: true }); -var json_1 = __webpack_require__(6); +var json_1 = __webpack_require__(31); var path = __webpack_require__(0); -var fs = __webpack_require__(9); -var config_1 = __webpack_require__(1); -var analytics_1 = __webpack_require__(10); -var notification_1 = __webpack_require__(14); -var segments_1 = __webpack_require__(11); +var fs = __webpack_require__(8); +var config_1 = __webpack_require__(17); +var analytics_1 = __webpack_require__(68); +var notification_1 = __webpack_require__(117); +var segments_1 = __webpack_require__(69); function getAlertsAnomalies() { var filename = path.join(config_1.ANOMALIES_PATH, "alerts_anomalies.json"); if (!fs.existsSync(filename)) { @@ -2285,11 +25628,466 @@ var activeAlerts = new _set2.default(); setTimeout(alertsTick, 5000); /***/ }), -/* 23 */ -/***/ (function(module, exports) { +/* 225 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = { "default": __webpack_require__(226), __esModule: true }; + +/***/ }), +/* 226 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(98); +__webpack_require__(53); +__webpack_require__(63); +__webpack_require__(227); +__webpack_require__(234); +__webpack_require__(237); +__webpack_require__(239); +module.exports = __webpack_require__(6).Set; + + +/***/ }), +/* 227 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var strong = __webpack_require__(228); +var validate = __webpack_require__(116); +var SET = 'Set'; + +// 23.2 Set Objects +module.exports = __webpack_require__(229)(SET, function (get) { + return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.2.3.1 Set.prototype.add(value) + add: function add(value) { + return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value); + } +}, strong); + + +/***/ }), +/* 228 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var dP = __webpack_require__(15).f; +var create = __webpack_require__(100); +var redefineAll = __webpack_require__(67); +var ctx = __webpack_require__(13); +var anInstance = __webpack_require__(65); +var forOf = __webpack_require__(29); +var $iterDefine = __webpack_require__(56); +var step = __webpack_require__(106); +var setSpecies = __webpack_require__(112); +var DESCRIPTORS = __webpack_require__(16); +var fastKey = __webpack_require__(115).fastKey; +var validate = __webpack_require__(116); +var SIZE = DESCRIPTORS ? '_s' : 'size'; + +var getEntry = function (that, key) { + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return that._i[index]; + // frozen object case + for (entry = that._f; entry; entry = entry.n) { + if (entry.k == key) return entry; + } +}; + +module.exports = { + getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, NAME, '_i'); + that._t = NAME; // collection type + that._i = create(null); // index + that._f = undefined; // first entry + that._l = undefined; // last entry + that[SIZE] = 0; // size + if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); + }); + redefineAll(C.prototype, { + // 23.1.3.1 Map.prototype.clear() + // 23.2.3.2 Set.prototype.clear() + clear: function clear() { + for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) { + entry.r = true; + if (entry.p) entry.p = entry.p.n = undefined; + delete data[entry.i]; + } + that._f = that._l = undefined; + that[SIZE] = 0; + }, + // 23.1.3.3 Map.prototype.delete(key) + // 23.2.3.4 Set.prototype.delete(value) + 'delete': function (key) { + var that = validate(this, NAME); + var entry = getEntry(that, key); + if (entry) { + var next = entry.n; + var prev = entry.p; + delete that._i[entry.i]; + entry.r = true; + if (prev) prev.n = next; + if (next) next.p = prev; + if (that._f == entry) that._f = next; + if (that._l == entry) that._l = prev; + that[SIZE]--; + } return !!entry; + }, + // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) + // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) + forEach: function forEach(callbackfn /* , that = undefined */) { + validate(this, NAME); + var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var entry; + while (entry = entry ? entry.n : this._f) { + f(entry.v, entry.k, this); + // revert to the last existing entry + while (entry && entry.r) entry = entry.p; + } + }, + // 23.1.3.7 Map.prototype.has(key) + // 23.2.3.7 Set.prototype.has(value) + has: function has(key) { + return !!getEntry(validate(this, NAME), key); + } + }); + if (DESCRIPTORS) dP(C.prototype, 'size', { + get: function () { + return validate(this, NAME)[SIZE]; + } + }); + return C; + }, + def: function (that, key, value) { + var entry = getEntry(that, key); + var prev, index; + // change existing entry + if (entry) { + entry.v = value; + // create new entry + } else { + that._l = entry = { + i: index = fastKey(key, true), // <- index + k: key, // <- key + v: value, // <- value + p: prev = that._l, // <- previous entry + n: undefined, // <- next entry + r: false // <- removed + }; + if (!that._f) that._f = entry; + if (prev) prev.n = entry; + that[SIZE]++; + // add to index + if (index !== 'F') that._i[index] = entry; + } return that; + }, + getEntry: getEntry, + setStrong: function (C, NAME, IS_MAP) { + // add .keys, .values, .entries, [@@iterator] + // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 + $iterDefine(C, NAME, function (iterated, kind) { + this._t = validate(iterated, NAME); // target + this._k = kind; // kind + this._l = undefined; // previous + }, function () { + var that = this; + var kind = that._k; + var entry = that._l; + // revert to the last existing entry + while (entry && entry.r) entry = entry.p; + // get next entry + if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) { + // or finish the iteration + that._t = undefined; + return step(1); + } + // return step by kind + if (kind == 'keys') return step(0, entry.k); + if (kind == 'values') return step(0, entry.v); + return step(0, [entry.k, entry.v]); + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // add [@@species], 23.1.2.2, 23.2.2.2 + setSpecies(NAME); + } +}; + + +/***/ }), +/* 229 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var global = __webpack_require__(1); +var $export = __webpack_require__(10); +var meta = __webpack_require__(115); +var fails = __webpack_require__(44); +var hide = __webpack_require__(14); +var redefineAll = __webpack_require__(67); +var forOf = __webpack_require__(29); +var anInstance = __webpack_require__(65); +var isObject = __webpack_require__(9); +var setToStringTag = __webpack_require__(45); +var dP = __webpack_require__(15).f; +var each = __webpack_require__(230)(0); +var DESCRIPTORS = __webpack_require__(16); + +module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { + var Base = global[NAME]; + var C = Base; + var ADDER = IS_MAP ? 'set' : 'add'; + var proto = C && C.prototype; + var O = {}; + if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { + new C().entries().next(); + }))) { + // create collection constructor + C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); + redefineAll(C.prototype, methods); + meta.NEED = true; + } else { + C = wrapper(function (target, iterable) { + anInstance(target, C, NAME, '_c'); + target._c = new Base(); + if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target); + }); + each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) { + var IS_ADDER = KEY == 'add' || KEY == 'set'; + if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) { + anInstance(this, C, KEY); + if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false; + var result = this._c[KEY](a === 0 ? 0 : a, b); + return IS_ADDER ? this : result; + }); + }); + IS_WEAK || dP(C.prototype, 'size', { + get: function () { + return this._c.size; + } + }); + } + + setToStringTag(C, NAME); + + O[NAME] = C; + $export($export.G + $export.W + $export.F, O); + + if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); + + return C; +}; + + +/***/ }), +/* 230 */ +/***/ (function(module, exports, __webpack_require__) { + +// 0 -> Array#forEach +// 1 -> Array#map +// 2 -> Array#filter +// 3 -> Array#some +// 4 -> Array#every +// 5 -> Array#find +// 6 -> Array#findIndex +var ctx = __webpack_require__(13); +var IObject = __webpack_require__(101); +var toObject = __webpack_require__(105); +var toLength = __webpack_require__(60); +var asc = __webpack_require__(231); +module.exports = function (TYPE, $create) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + var create = $create || asc; + return function ($this, callbackfn, that) { + var O = toObject($this); + var self = IObject(O); + var f = ctx(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var val, res; + for (;length > index; index++) if (NO_HOLES || index in self) { + val = self[index]; + res = f(val, index, O); + if (TYPE) { + if (IS_MAP) result[index] = res; // map + else if (res) switch (TYPE) { + case 3: return true; // some + case 5: return val; // find + case 6: return index; // findIndex + case 2: result.push(val); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; + }; +}; + + +/***/ }), +/* 231 */ +/***/ (function(module, exports, __webpack_require__) { + +// 9.4.2.3 ArraySpeciesCreate(originalArray, length) +var speciesConstructor = __webpack_require__(232); + +module.exports = function (original, length) { + return new (speciesConstructor(original))(length); +}; + + +/***/ }), +/* 232 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(9); +var isArray = __webpack_require__(233); +var SPECIES = __webpack_require__(3)('species'); + +module.exports = function (original) { + var C; + if (isArray(original)) { + C = original.constructor; + // cross-realm fallback + if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; + if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return C === undefined ? Array : C; +}; + + +/***/ }), +/* 233 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.2.2 IsArray(argument) +var cof = __webpack_require__(28); +module.exports = Array.isArray || function isArray(arg) { + return cof(arg) == 'Array'; +}; + + +/***/ }), +/* 234 */ +/***/ (function(module, exports, __webpack_require__) { + +// https://github.com/DavidBruant/Map-Set.prototype.toJSON +var $export = __webpack_require__(10); + +$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(235)('Set') }); + + +/***/ }), +/* 235 */ +/***/ (function(module, exports, __webpack_require__) { + +// https://github.com/DavidBruant/Map-Set.prototype.toJSON +var classof = __webpack_require__(64); +var from = __webpack_require__(236); +module.exports = function (NAME) { + return function toJSON() { + if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic"); + return from(this); + }; +}; + + +/***/ }), +/* 236 */ +/***/ (function(module, exports, __webpack_require__) { + +var forOf = __webpack_require__(29); + +module.exports = function (iter, ITERATOR) { + var result = []; + forOf(iter, false, result.push, result, ITERATOR); + return result; +}; + + +/***/ }), +/* 237 */ +/***/ (function(module, exports, __webpack_require__) { + +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of +__webpack_require__(238)('Set'); + + +/***/ }), +/* 238 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://tc39.github.io/proposal-setmap-offrom/ +var $export = __webpack_require__(10); + +module.exports = function (COLLECTION) { + $export($export.S, COLLECTION, { of: function of() { + var length = arguments.length; + var A = new Array(length); + while (length--) A[length] = arguments[length]; + return new this(A); + } }); +}; + + +/***/ }), +/* 239 */ +/***/ (function(module, exports, __webpack_require__) { + +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from +__webpack_require__(240)('Set'); + + +/***/ }), +/* 240 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://tc39.github.io/proposal-setmap-offrom/ +var $export = __webpack_require__(10); +var aFunction = __webpack_require__(25); +var ctx = __webpack_require__(13); +var forOf = __webpack_require__(29); + +module.exports = function (COLLECTION) { + $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) { + var mapFn = arguments[1]; + var mapping, A, n, cb; + aFunction(this); + mapping = mapFn !== undefined; + if (mapping) aFunction(mapFn); + if (source == undefined) return new this(); + A = []; + if (mapping) { + n = 0; + cb = ctx(mapFn, arguments[2], 2); + forOf(source, false, function (nextItem) { + A.push(cb(nextItem, n++)); + }); + } else { + forOf(source, false, A.push, A); + } + return new this(A); + } }); +}; -module.exports = require('babel-runtime/core-js/set'); /***/ }) /******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgYzlmZDEyYzlhZTkzOWY1OTYyMmIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVxdWlyZSgncGF0aCcpXCIiLCJ3ZWJwYWNrOi8vLy4vY29uZmlnLnRzIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeScpXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVxdWlyZSgnYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvcicpXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKVwiIiwid2VicGFjazovLy8uL3NlcnZpY2VzL2Fub21hbHlUeXBlLnRzIiwid2VicGFjazovLy8uL3NlcnZpY2VzL2pzb24udHMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVxdWlyZSgnZXhwcmVzcycpXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvcicpXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVxdWlyZSgnZnMnKVwiIiwid2VicGFjazovLy8uL3NlcnZpY2VzL2FuYWx5dGljcy50cyIsIndlYnBhY2s6Ly8vLi9zZXJ2aWNlcy9zZWdtZW50cy50cyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJyZXF1aXJlKCdjcnlwdG8nKVwiIiwid2VicGFjazovLy8uL3NlcnZpY2VzL21ldHJpY3MudHMiLCJ3ZWJwYWNrOi8vLy4vc2VydmljZXMvbm90aWZpY2F0aW9uLnRzIiwid2VicGFjazovLy8uL2luZGV4LnRzIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlcXVpcmUoJ2JvZHktcGFyc2VyJylcIiIsIndlYnBhY2s6Ly8vLi9yb3V0ZXMvYW5vbWFsaWVzLnRzIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlcXVpcmUoJ2V2ZW50LXN0cmVhbScpXCIiLCJ3ZWJwYWNrOi8vLy4vcm91dGVzL3NlZ21lbnRzLnRzIiwid2VicGFjazovLy8uL3JvdXRlcy9hbGVydHMudHMiLCJ3ZWJwYWNrOi8vLy4vc2VydmljZXMvYWxlcnRzLnRzIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zZXQnKVwiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxvREFBNEM7QUFDNUM7QUFDQTtBQUNBOztBQUVBLDBDQUFrQztBQUNsQztBQUNBO0FBQ0EsWUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDQUFxQztBQUNyQztBQUNBOzs7O0FBSUE7QUFDQSxzREFBOEM7QUFDOUM7QUFDQTtBQUNBLG9DQUE0QjtBQUM1QixxQ0FBNkI7QUFDN0IseUNBQWlDOztBQUVqQywrQ0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQXNDO0FBQ3RDO0FBQ0E7QUFDQSxxQ0FBNkI7QUFDN0IscUNBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxhQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLGFBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlCQUFpQiw4QkFBOEI7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBSTtBQUNKOztBQUVBLDREQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0EsY0FBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtB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QUE0QjtBQUM1QixJQUFNLGVBQWUsbUJBQXJCO0FBQ0EsV0FBVyxVQUFYLEVBQXVCLElBQXZCLEU7Ozs7OztBQzNEQSxzRCIsImZpbGUiOiJzZXJ2ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHRmdW5jdGlvbiBob3REb3dubG9hZFVwZGF0ZUNodW5rKGNodW5rSWQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gXHRcdHZhciBjaHVuayA9IHJlcXVpcmUoXCIuL1wiICsgXCJcIiArIGNodW5rSWQgKyBcIi5cIiArIGhvdEN1cnJlbnRIYXNoICsgXCIuaG90LXVwZGF0ZS5qc1wiKTtcclxuIFx0XHRob3RBZGRVcGRhdGVDaHVuayhjaHVuay5pZCwgY2h1bmsubW9kdWxlcyk7XHJcbiBcdH1cclxuIFx0XHJcbiBcdGZ1bmN0aW9uIGhvdERvd25sb2FkTWFuaWZlc3QoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcclxuIFx0XHR0cnkge1xyXG4gXHRcdFx0dmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIuL1wiICsgXCJcIiArIGhvdEN1cnJlbnRIYXNoICsgXCIuaG90LXVwZGF0ZS5qc29uXCIpO1xyXG4gXHRcdH0gY2F0Y2goZSkge1xyXG4gXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gXHRcdH1cclxuIFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVwZGF0ZSk7XHJcbiBcdH1cclxuIFx0XHJcbiBcdGZ1bmN0aW9uIGhvdERpc3Bvc2VDaHVuayhjaHVua0lkKSB7IC8vZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gXHRcdGRlbGV0ZSBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF07XHJcbiBcdH1cclxuXG4gXHRcclxuIFx0XHJcbiBcdHZhciBob3RBcHBseU9uVXBkYXRlID0gdHJ1ZTtcclxuIFx0dmFyIGhvdEN1cnJlbnRIYXNoID0gXCJjOWZkMTJjOWFlOTM5ZjU5NjIyYlwiOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXHJcbiBcdHZhciBob3RSZXF1ZXN0VGltZW91dCA9IDEwMDAwO1xyXG4gXHR2YXIgaG90Q3VycmVudE1vZHVsZURhdGEgPSB7fTtcclxuIFx0dmFyIGhvdEN1cnJlbnRDaGlsZE1vZHVsZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gXHR2YXIgaG90Q3VycmVudFBhcmVudHMgPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gXHR2YXIgaG90Q3VycmVudFBhcmVudHNUZW1wID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcclxuIFx0XHJcbiBcdGZ1bmN0aW9uIGhvdENyZWF0ZVJlcXVpcmUobW9kdWxlSWQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gXHRcdHZhciBtZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xyXG4gXHRcdGlmKCFtZSkgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX187XHJcbiBcdFx0dmFyIGZuID0gZnVuY3Rpb24ocmVxdWVzdCkge1xyXG4gXHRcdFx0aWYobWUuaG90LmFjdGl2ZSkge1xyXG4gXHRcdFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdKSB7XHJcbiBcdFx0XHRcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XS5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpIDwgMClcclxuIFx0XHRcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5wdXNoKG1vZHVsZUlkKTtcclxuIFx0XHRcdFx0fSBlbHNlIHtcclxuIFx0XHRcdFx0XHRob3RDdXJyZW50UGFyZW50cyA9IFttb2R1bGVJZF07XHJcbiBcdFx0XHRcdFx0aG90Q3VycmVudENoaWxkTW9kdWxlID0gcmVxdWVzdDtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRpZihtZS5jaGlsZHJlbi5pbmRleE9mKHJlcXVlc3QpIDwgMClcclxuIFx0XHRcdFx0XHRtZS5jaGlsZHJlbi5wdXNoKHJlcXVlc3QpO1xyXG4gXHRcdFx0fSBlbHNlIHtcclxuIFx0XHRcdFx0Y29uc29sZS53YXJuKFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgcmVxdWVzdCArIFwiKSBmcm9tIGRpc3Bvc2VkIG1vZHVsZSBcIiArIG1vZHVsZUlkKTtcclxuIFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbXTtcclxuIFx0XHRcdH1cclxuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKHJlcXVlc3QpO1xyXG4gXHRcdH07XHJcbiBcdFx0dmFyIE9iamVjdEZhY3RvcnkgPSBmdW5jdGlvbiBPYmplY3RGYWN0b3J5KG5hbWUpIHtcclxuIFx0XHRcdHJldHVybiB7XHJcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuIFx0XHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuIFx0XHRcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfX1tuYW1lXTtcclxuIFx0XHRcdFx0fSxcclxuIFx0XHRcdFx0c2V0OiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX19bbmFtZV0gPSB2YWx1ZTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0fTtcclxuIFx0XHR9O1xyXG4gXHRcdGZvcih2YXIgbmFtZSBpbiBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XHJcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX193ZWJwYWNrX3JlcXVpcmVfXywgbmFtZSkgJiYgbmFtZSAhPT0gXCJlXCIpIHtcclxuIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBuYW1lLCBPYmplY3RGYWN0b3J5KG5hbWUpKTtcclxuIFx0XHRcdH1cclxuIFx0XHR9XHJcbiBcdFx0Zm4uZSA9IGZ1bmN0aW9uKGNodW5rSWQpIHtcclxuIFx0XHRcdGlmKGhvdFN0YXR1cyA9PT0gXCJyZWFkeVwiKVxyXG4gXHRcdFx0XHRob3RTZXRTdGF0dXMoXCJwcmVwYXJlXCIpO1xyXG4gXHRcdFx0aG90Q2h1bmtzTG9hZGluZysrO1xyXG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZShjaHVua0lkKS50aGVuKGZpbmlzaENodW5rTG9hZGluZywgZnVuY3Rpb24oZXJyKSB7XHJcbiBcdFx0XHRcdGZpbmlzaENodW5rTG9hZGluZygpO1xyXG4gXHRcdFx0XHR0aHJvdyBlcnI7XHJcbiBcdFx0XHR9KTtcclxuIFx0XHJcbiBcdFx0XHRmdW5jdGlvbiBmaW5pc2hDaHVua0xvYWRpbmcoKSB7XHJcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmctLTtcclxuIFx0XHRcdFx0aWYoaG90U3RhdHVzID09PSBcInByZXBhcmVcIikge1xyXG4gXHRcdFx0XHRcdGlmKCFob3RXYWl0aW5nRmlsZXNNYXBbY2h1bmtJZF0pIHtcclxuIFx0XHRcdFx0XHRcdGhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpO1xyXG4gXHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0XHRpZihob3RDaHVua3NMb2FkaW5nID09PSAwICYmIGhvdFdhaXRpbmdGaWxlcyA9PT0gMCkge1xyXG4gXHRcdFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xyXG4gXHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0fVxyXG4gXHRcdH07XHJcbiBcdFx0cmV0dXJuIGZuO1xyXG4gXHR9XHJcbiBcdFxyXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVNb2R1bGUobW9kdWxlSWQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gXHRcdHZhciBob3QgPSB7XHJcbiBcdFx0XHQvLyBwcml2YXRlIHN0dWZmXHJcbiBcdFx0XHRfYWNjZXB0ZWREZXBlbmRlbmNpZXM6IHt9LFxyXG4gXHRcdFx0X2RlY2xpbmVkRGVwZW5kZW5jaWVzOiB7fSxcclxuIFx0XHRcdF9zZWxmQWNjZXB0ZWQ6IGZhbHNlLFxyXG4gXHRcdFx0X3NlbGZEZWNsaW5lZDogZmFsc2UsXHJcbiBcdFx0XHRfZGlzcG9zZUhhbmRsZXJzOiBbXSxcclxuIFx0XHRcdF9tYWluOiBob3RDdXJyZW50Q2hpbGRNb2R1bGUgIT09IG1vZHVsZUlkLFxyXG4gXHRcclxuIFx0XHRcdC8vIE1vZHVsZSBBUElcclxuIFx0XHRcdGFjdGl2ZTogdHJ1ZSxcclxuIFx0XHRcdGFjY2VwdDogZnVuY3Rpb24oZGVwLCBjYWxsYmFjaykge1xyXG4gXHRcdFx0XHRpZih0eXBlb2YgZGVwID09PSBcInVuZGVmaW5lZFwiKVxyXG4gXHRcdFx0XHRcdGhvdC5fc2VsZkFjY2VwdGVkID0gdHJ1ZTtcclxuIFx0XHRcdFx0ZWxzZSBpZih0eXBlb2YgZGVwID09PSBcImZ1bmN0aW9uXCIpXHJcbiBcdFx0XHRcdFx0aG90Ll9zZWxmQWNjZXB0ZWQgPSBkZXA7XHJcbiBcdFx0XHRcdGVsc2UgaWYodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIilcclxuIFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxyXG4gXHRcdFx0XHRcdFx0aG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBbaV1dID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcclxuIFx0XHRcdFx0ZWxzZVxyXG4gXHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XHJcbiBcdFx0XHR9LFxyXG4gXHRcdFx0ZGVjbGluZTogZnVuY3Rpb24oZGVwKSB7XHJcbiBcdFx0XHRcdGlmKHR5cGVvZiBkZXAgPT09IFwidW5kZWZpbmVkXCIpXHJcbiBcdFx0XHRcdFx0aG90Ll9zZWxmRGVjbGluZWQgPSB0cnVlO1xyXG4gXHRcdFx0XHRlbHNlIGlmKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXHJcbiBcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKylcclxuIFx0XHRcdFx0XHRcdGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IHRydWU7XHJcbiBcdFx0XHRcdGVsc2VcclxuIFx0XHRcdFx0XHRob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW2RlcF0gPSB0cnVlO1xyXG4gXHRcdFx0fSxcclxuIFx0XHRcdGRpc3Bvc2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiBcdFx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xyXG4gXHRcdFx0fSxcclxuIFx0XHRcdGFkZERpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gXHRcdFx0XHRob3QuX2Rpc3Bvc2VIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTtcclxuIFx0XHRcdH0sXHJcbiBcdFx0XHRyZW1vdmVEaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuIFx0XHRcdFx0dmFyIGlkeCA9IGhvdC5fZGlzcG9zZUhhbmRsZXJzLmluZGV4T2YoY2FsbGJhY2spO1xyXG4gXHRcdFx0XHRpZihpZHggPj0gMCkgaG90Ll9kaXNwb3NlSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XHJcbiBcdFx0XHR9LFxyXG4gXHRcclxuIFx0XHRcdC8vIE1hbmFnZW1lbnQgQVBJXHJcbiBcdFx0XHRjaGVjazogaG90Q2hlY2ssXHJcbiBcdFx0XHRhcHBseTogaG90QXBwbHksXHJcbiBcdFx0XHRzdGF0dXM6IGZ1bmN0aW9uKGwpIHtcclxuIFx0XHRcdFx0aWYoIWwpIHJldHVybiBob3RTdGF0dXM7XHJcbiBcdFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzLnB1c2gobCk7XHJcbiBcdFx0XHR9LFxyXG4gXHRcdFx0YWRkU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkge1xyXG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xyXG4gXHRcdFx0fSxcclxuIFx0XHRcdHJlbW92ZVN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uKGwpIHtcclxuIFx0XHRcdFx0dmFyIGlkeCA9IGhvdFN0YXR1c0hhbmRsZXJzLmluZGV4T2YobCk7XHJcbiBcdFx0XHRcdGlmKGlkeCA+PSAwKSBob3RTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcclxuIFx0XHRcdH0sXHJcbiBcdFxyXG4gXHRcdFx0Ly9pbmhlcml0IGZyb20gcHJldmlvdXMgZGlzcG9zZSBjYWxsXHJcbiBcdFx0XHRkYXRhOiBob3RDdXJyZW50TW9kdWxlRGF0YVttb2R1bGVJZF1cclxuIFx0XHR9O1xyXG4gXHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHVuZGVmaW5lZDtcclxuIFx0XHRyZXR1cm4gaG90O1xyXG4gXHR9XHJcbiBcdFxyXG4gXHR2YXIgaG90U3RhdHVzSGFuZGxlcnMgPSBbXTtcclxuIFx0dmFyIGhvdFN0YXR1cyA9IFwiaWRsZVwiO1xyXG4gXHRcclxuIFx0ZnVuY3Rpb24gaG90U2V0U3RhdHVzKG5ld1N0YXR1cykge1xyXG4gXHRcdGhvdFN0YXR1cyA9IG5ld1N0YXR1cztcclxuIFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgaG90U3RhdHVzSGFuZGxlcnMubGVuZ3RoOyBpKyspXHJcbiBcdFx0XHRob3RTdGF0dXNIYW5kbGVyc1tpXS5jYWxsKG51bGwsIG5ld1N0YXR1cyk7XHJcbiBcdH1cclxuIFx0XHJcbiBcdC8vIHdoaWxlIGRvd25sb2FkaW5nXHJcbiBcdHZhciBob3RXYWl0aW5nRmlsZXMgPSAwO1xyXG4gXHR2YXIgaG90Q2h1bmtzTG9hZGluZyA9IDA7XHJcbiBcdHZhciBob3RXYWl0aW5nRmlsZXNNYXAgPSB7fTtcclxuIFx0dmFyIGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307XHJcbiBcdHZhciBob3RBdmFpbGFibGVGaWxlc01hcCA9IHt9O1xyXG4gXHR2YXIgaG90RGVmZXJyZWQ7XHJcbiBcdFxyXG4gXHQvLyBUaGUgdXBkYXRlIGluZm9cclxuIFx0dmFyIGhvdFVwZGF0ZSwgaG90VXBkYXRlTmV3SGFzaDtcclxuIFx0XHJcbiBcdGZ1bmN0aW9uIHRvTW9kdWxlSWQoaWQpIHtcclxuIFx0XHR2YXIgaXNOdW1iZXIgPSAoK2lkKSArIFwiXCIgPT09IGlkO1xyXG4gXHRcdHJldHVybiBpc051bWJlciA/ICtpZCA6IGlkO1xyXG4gXHR9XHJcbiBcdFxyXG4gXHRmdW5jdGlvbiBob3RDaGVjayhhcHBseSkge1xyXG4gXHRcdGlmKGhvdFN0YXR1cyAhPT0gXCJpZGxlXCIpIHRocm93IG5ldyBFcnJvcihcImNoZWNrKCkgaXMgb25seSBhbGxvd2VkIGluIGlkbGUgc3RhdHVzXCIpO1xyXG4gXHRcdGhvdEFwcGx5T25VcGRhdGUgPSBhcHBseTtcclxuIFx0XHRob3RTZXRTdGF0dXMoXCJjaGVja1wiKTtcclxuIFx0XHRyZXR1cm4gaG90RG93bmxvYWRNYW5pZmVzdChob3RSZXF1ZXN0VGltZW91dCkudGhlbihmdW5jdGlvbih1cGRhdGUpIHtcclxuIFx0XHRcdGlmKCF1cGRhdGUpIHtcclxuIFx0XHRcdFx0aG90U2V0U3RhdHVzKFwiaWRsZVwiKTtcclxuIFx0XHRcdFx0cmV0dXJuIG51bGw7XHJcbiBcdFx0XHR9XHJcbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcCA9IHt9O1xyXG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzTWFwID0ge307XHJcbiBcdFx0XHRob3RBdmFpbGFibGVGaWxlc01hcCA9IHVwZGF0ZS5jO1xyXG4gXHRcdFx0aG90VXBkYXRlTmV3SGFzaCA9IHVwZGF0ZS5oO1xyXG4gXHRcclxuIFx0XHRcdGhvdFNldFN0YXR1cyhcInByZXBhcmVcIik7XHJcbiBcdFx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gXHRcdFx0XHRob3REZWZlcnJlZCA9IHtcclxuIFx0XHRcdFx0XHRyZXNvbHZlOiByZXNvbHZlLFxyXG4gXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XHJcbiBcdFx0XHRcdH07XHJcbiBcdFx0XHR9KTtcclxuIFx0XHRcdGhvdFVwZGF0ZSA9IHt9O1xyXG4gXHRcdFx0dmFyIGNodW5rSWQgPSAwO1xyXG4gXHRcdFx0eyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxvbmUtYmxvY2tzXHJcbiBcdFx0XHRcdC8qZ2xvYmFscyBjaHVua0lkICovXHJcbiBcdFx0XHRcdGhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpO1xyXG4gXHRcdFx0fVxyXG4gXHRcdFx0aWYoaG90U3RhdHVzID09PSBcInByZXBhcmVcIiAmJiBob3RDaHVua3NMb2FkaW5nID09PSAwICYmIGhvdFdhaXRpbmdGaWxlcyA9PT0gMCkge1xyXG4gXHRcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XHJcbiBcdFx0XHR9XHJcbiBcdFx0XHRyZXR1cm4gcHJvbWlzZTtcclxuIFx0XHR9KTtcclxuIFx0fVxyXG4gXHRcclxuIFx0ZnVuY3Rpb24gaG90QWRkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgbW9yZU1vZHVsZXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gXHRcdGlmKCFob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSB8fCAhaG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0pXHJcbiBcdFx0XHRyZXR1cm47XHJcbiBcdFx0aG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0gPSBmYWxzZTtcclxuIFx0XHRmb3IodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XHJcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xyXG4gXHRcdFx0XHRob3RVcGRhdGVbbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xyXG4gXHRcdFx0fVxyXG4gXHRcdH1cclxuIFx0XHRpZigtLWhvdFdhaXRpbmdGaWxlcyA9PT0gMCAmJiBob3RDaHVua3NMb2FkaW5nID09PSAwKSB7XHJcbiBcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XHJcbiBcdFx0fVxyXG4gXHR9XHJcbiBcdFxyXG4gXHRmdW5jdGlvbiBob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKSB7XHJcbiBcdFx0aWYoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdKSB7XHJcbiBcdFx0XHRob3RXYWl0aW5nRmlsZXNNYXBbY2h1bmtJZF0gPSB0cnVlO1xyXG4gXHRcdH0gZWxzZSB7XHJcbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IHRydWU7XHJcbiBcdFx0XHRob3RXYWl0aW5nRmlsZXMrKztcclxuIFx0XHRcdGhvdERvd25sb2FkVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XHJcbiBcdFx0fVxyXG4gXHR9XHJcbiBcdFxyXG4gXHRmdW5jdGlvbiBob3RVcGRhdGVEb3dubG9hZGVkKCkge1xyXG4gXHRcdGhvdFNldFN0YXR1cyhcInJlYWR5XCIpO1xyXG4gXHRcdHZhciBkZWZlcnJlZCA9IGhvdERlZmVycmVkO1xyXG4gXHRcdGhvdERlZmVycmVkID0gbnVsbDtcclxuIFx0XHRpZighZGVmZXJyZWQpIHJldHVybjtcclxuIFx0XHRpZihob3RBcHBseU9uVXBkYXRlKSB7XHJcbiBcdFx0XHQvLyBXcmFwIGRlZmVycmVkIG9iamVjdCBpbiBQcm9taXNlIHRvIG1hcmsgaXQgYXMgYSB3ZWxsLWhhbmRsZWQgUHJvbWlzZSB0b1xyXG4gXHRcdFx0Ly8gYXZvaWQgdHJpZ2dlcmluZyB1bmNhdWdodCBleGNlcHRpb24gd2FybmluZyBpbiBDaHJvbWUuXHJcbiBcdFx0XHQvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDY1NjY2XHJcbiBcdFx0XHRQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkge1xyXG4gXHRcdFx0XHRyZXR1cm4gaG90QXBwbHkoaG90QXBwbHlPblVwZGF0ZSk7XHJcbiBcdFx0XHR9KS50aGVuKFxyXG4gXHRcdFx0XHRmdW5jdGlvbihyZXN1bHQpIHtcclxuIFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XHJcbiBcdFx0XHRcdH0sXHJcbiBcdFx0XHRcdGZ1bmN0aW9uKGVycikge1xyXG4gXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdChlcnIpO1xyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHQpO1xyXG4gXHRcdH0gZWxzZSB7XHJcbiBcdFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW107XHJcbiBcdFx0XHRmb3IodmFyIGlkIGluIGhvdFVwZGF0ZSkge1xyXG4gXHRcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcclxuIFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaCh0b01vZHVsZUlkKGlkKSk7XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdH1cclxuIFx0XHRcdGRlZmVycmVkLnJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTtcclxuIFx0XHR9XHJcbiBcdH1cclxuIFx0XHJcbiBcdGZ1bmN0aW9uIGhvdEFwcGx5KG9wdGlvbnMpIHtcclxuIFx0XHRpZihob3RTdGF0dXMgIT09IFwicmVhZHlcIikgdGhyb3cgbmV3IEVycm9yKFwiYXBwbHkoKSBpcyBvbmx5IGFsbG93ZWQgaW4gcmVhZHkgc3RhdHVzXCIpO1xyXG4gXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gXHRcclxuIFx0XHR2YXIgY2I7XHJcbiBcdFx0dmFyIGk7XHJcbiBcdFx0dmFyIGo7XHJcbiBcdFx0dmFyIG1vZHVsZTtcclxuIFx0XHR2YXIgbW9kdWxlSWQ7XHJcbiBcdFxyXG4gXHRcdGZ1bmN0aW9uIGdldEFmZmVjdGVkU3R1ZmYodXBkYXRlTW9kdWxlSWQpIHtcclxuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xyXG4gXHRcdFx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XHJcbiBcdFxyXG4gXHRcdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLnNsaWNlKCkubWFwKGZ1bmN0aW9uKGlkKSB7XHJcbiBcdFx0XHRcdHJldHVybiB7XHJcbiBcdFx0XHRcdFx0Y2hhaW46IFtpZF0sXHJcbiBcdFx0XHRcdFx0aWQ6IGlkXHJcbiBcdFx0XHRcdH07XHJcbiBcdFx0XHR9KTtcclxuIFx0XHRcdHdoaWxlKHF1ZXVlLmxlbmd0aCA+IDApIHtcclxuIFx0XHRcdFx0dmFyIHF1ZXVlSXRlbSA9IHF1ZXVlLnBvcCgpO1xyXG4gXHRcdFx0XHR2YXIgbW9kdWxlSWQgPSBxdWV1ZUl0ZW0uaWQ7XHJcbiBcdFx0XHRcdHZhciBjaGFpbiA9IHF1ZXVlSXRlbS5jaGFpbjtcclxuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XHJcbiBcdFx0XHRcdGlmKCFtb2R1bGUgfHwgbW9kdWxlLmhvdC5fc2VsZkFjY2VwdGVkKVxyXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG4gXHRcdFx0XHRpZihtb2R1bGUuaG90Ll9zZWxmRGVjbGluZWQpIHtcclxuIFx0XHRcdFx0XHRyZXR1cm4ge1xyXG4gXHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWRlY2xpbmVkXCIsXHJcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXHJcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcclxuIFx0XHRcdFx0XHR9O1xyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHRcdGlmKG1vZHVsZS5ob3QuX21haW4pIHtcclxuIFx0XHRcdFx0XHRyZXR1cm4ge1xyXG4gXHRcdFx0XHRcdFx0dHlwZTogXCJ1bmFjY2VwdGVkXCIsXHJcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXHJcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcclxuIFx0XHRcdFx0XHR9O1xyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBtb2R1bGUucGFyZW50cy5sZW5ndGg7IGkrKykge1xyXG4gXHRcdFx0XHRcdHZhciBwYXJlbnRJZCA9IG1vZHVsZS5wYXJlbnRzW2ldO1xyXG4gXHRcdFx0XHRcdHZhciBwYXJlbnQgPSBpbnN0YWxsZWRNb2R1bGVzW3BhcmVudElkXTtcclxuIFx0XHRcdFx0XHRpZighcGFyZW50KSBjb250aW51ZTtcclxuIFx0XHRcdFx0XHRpZihwYXJlbnQuaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcclxuIFx0XHRcdFx0XHRcdHJldHVybiB7XHJcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGVjbGluZWRcIixcclxuIFx0XHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSxcclxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxyXG4gXHRcdFx0XHRcdFx0XHRwYXJlbnRJZDogcGFyZW50SWRcclxuIFx0XHRcdFx0XHRcdH07XHJcbiBcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRcdGlmKG91dGRhdGVkTW9kdWxlcy5pbmRleE9mKHBhcmVudElkKSA+PSAwKSBjb250aW51ZTtcclxuIFx0XHRcdFx0XHRpZihwYXJlbnQuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcclxuIFx0XHRcdFx0XHRcdGlmKCFvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0pXHJcbiBcdFx0XHRcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSA9IFtdO1xyXG4gXHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdLCBbbW9kdWxlSWRdKTtcclxuIFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG4gXHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0XHRkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdO1xyXG4gXHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKHBhcmVudElkKTtcclxuIFx0XHRcdFx0XHRxdWV1ZS5wdXNoKHtcclxuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXHJcbiBcdFx0XHRcdFx0XHRpZDogcGFyZW50SWRcclxuIFx0XHRcdFx0XHR9KTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0fVxyXG4gXHRcclxuIFx0XHRcdHJldHVybiB7XHJcbiBcdFx0XHRcdHR5cGU6IFwiYWNjZXB0ZWRcIixcclxuIFx0XHRcdFx0bW9kdWxlSWQ6IHVwZGF0ZU1vZHVsZUlkLFxyXG4gXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXM6IG91dGRhdGVkTW9kdWxlcyxcclxuIFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXM6IG91dGRhdGVkRGVwZW5kZW5jaWVzXHJcbiBcdFx0XHR9O1xyXG4gXHRcdH1cclxuIFx0XHJcbiBcdFx0ZnVuY3Rpb24gYWRkQWxsVG9TZXQoYSwgYikge1xyXG4gXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuIFx0XHRcdFx0dmFyIGl0ZW0gPSBiW2ldO1xyXG4gXHRcdFx0XHRpZihhLmluZGV4T2YoaXRlbSkgPCAwKVxyXG4gXHRcdFx0XHRcdGEucHVzaChpdGVtKTtcclxuIFx0XHRcdH1cclxuIFx0XHR9XHJcbiBcdFxyXG4gXHRcdC8vIGF0IGJlZ2luIGFsbCB1cGRhdGVzIG1vZHVsZXMgYXJlIG91dGRhdGVkXHJcbiBcdFx0Ly8gdGhlIFwib3V0ZGF0ZWRcIiBzdGF0dXMgY2FuIHByb3BhZ2F0ZSB0byBwYXJlbnRzIGlmIHRoZXkgZG9uJ3QgYWNjZXB0IHRoZSBjaGlsZHJlblxyXG4gXHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xyXG4gXHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcclxuIFx0XHR2YXIgYXBwbGllZFVwZGF0ZSA9IHt9O1xyXG4gXHRcclxuIFx0XHR2YXIgd2FyblVuZXhwZWN0ZWRSZXF1aXJlID0gZnVuY3Rpb24gd2FyblVuZXhwZWN0ZWRSZXF1aXJlKCkge1xyXG4gXHRcdFx0Y29uc29sZS53YXJuKFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgcmVzdWx0Lm1vZHVsZUlkICsgXCIpIHRvIGRpc3Bvc2VkIG1vZHVsZVwiKTtcclxuIFx0XHR9O1xyXG4gXHRcclxuIFx0XHRmb3IodmFyIGlkIGluIGhvdFVwZGF0ZSkge1xyXG4gXHRcdFx0aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhvdFVwZGF0ZSwgaWQpKSB7XHJcbiBcdFx0XHRcdG1vZHVsZUlkID0gdG9Nb2R1bGVJZChpZCk7XHJcbiBcdFx0XHRcdHZhciByZXN1bHQ7XHJcbiBcdFx0XHRcdGlmKGhvdFVwZGF0ZVtpZF0pIHtcclxuIFx0XHRcdFx0XHRyZXN1bHQgPSBnZXRBZmZlY3RlZFN0dWZmKG1vZHVsZUlkKTtcclxuIFx0XHRcdFx0fSBlbHNlIHtcclxuIFx0XHRcdFx0XHRyZXN1bHQgPSB7XHJcbiBcdFx0XHRcdFx0XHR0eXBlOiBcImRpc3Bvc2VkXCIsXHJcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogaWRcclxuIFx0XHRcdFx0XHR9O1xyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHRcdHZhciBhYm9ydEVycm9yID0gZmFsc2U7XHJcbiBcdFx0XHRcdHZhciBkb0FwcGx5ID0gZmFsc2U7XHJcbiBcdFx0XHRcdHZhciBkb0Rpc3Bvc2UgPSBmYWxzZTtcclxuIFx0XHRcdFx0dmFyIGNoYWluSW5mbyA9IFwiXCI7XHJcbiBcdFx0XHRcdGlmKHJlc3VsdC5jaGFpbikge1xyXG4gXHRcdFx0XHRcdGNoYWluSW5mbyA9IFwiXFxuVXBkYXRlIHByb3BhZ2F0aW9uOiBcIiArIHJlc3VsdC5jaGFpbi5qb2luKFwiIC0+IFwiKTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRzd2l0Y2gocmVzdWx0LnR5cGUpIHtcclxuIFx0XHRcdFx0XHRjYXNlIFwic2VsZi1kZWNsaW5lZFwiOlxyXG4gXHRcdFx0XHRcdFx0aWYob3B0aW9ucy5vbkRlY2xpbmVkKVxyXG4gXHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcclxuIFx0XHRcdFx0XHRcdGlmKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxyXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFwiQWJvcnRlZCBiZWNhdXNlIG9mIHNlbGYgZGVjbGluZTogXCIgKyByZXN1bHQubW9kdWxlSWQgKyBjaGFpbkluZm8pO1xyXG4gXHRcdFx0XHRcdFx0YnJlYWs7XHJcbiBcdFx0XHRcdFx0Y2FzZSBcImRlY2xpbmVkXCI6XHJcbiBcdFx0XHRcdFx0XHRpZihvcHRpb25zLm9uRGVjbGluZWQpXHJcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25EZWNsaW5lZChyZXN1bHQpO1xyXG4gXHRcdFx0XHRcdFx0aWYoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXHJcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXCJBYm9ydGVkIGJlY2F1c2Ugb2YgZGVjbGluZWQgZGVwZW5kZW5jeTogXCIgKyByZXN1bHQubW9kdWxlSWQgKyBcIiBpbiBcIiArIHJlc3VsdC5wYXJlbnRJZCArIGNoYWluSW5mbyk7XHJcbiBcdFx0XHRcdFx0XHRicmVhaztcclxuIFx0XHRcdFx0XHRjYXNlIFwidW5hY2NlcHRlZFwiOlxyXG4gXHRcdFx0XHRcdFx0aWYob3B0aW9ucy5vblVuYWNjZXB0ZWQpXHJcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25VbmFjY2VwdGVkKHJlc3VsdCk7XHJcbiBcdFx0XHRcdFx0XHRpZighb3B0aW9ucy5pZ25vcmVVbmFjY2VwdGVkKVxyXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFwiQWJvcnRlZCBiZWNhdXNlIFwiICsgbW9kdWxlSWQgKyBcIiBpcyBub3QgYWNjZXB0ZWRcIiArIGNoYWluSW5mbyk7XHJcbiBcdFx0XHRcdFx0XHRicmVhaztcclxuIFx0XHRcdFx0XHRjYXNlIFwiYWNjZXB0ZWRcIjpcclxuIFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMub25BY2NlcHRlZClcclxuIFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkFjY2VwdGVkKHJlc3VsdCk7XHJcbiBcdFx0XHRcdFx0XHRkb0FwcGx5ID0gdHJ1ZTtcclxuIFx0XHRcdFx0XHRcdGJyZWFrO1xyXG4gXHRcdFx0XHRcdGNhc2UgXCJkaXNwb3NlZFwiOlxyXG4gXHRcdFx0XHRcdFx0aWYob3B0aW9ucy5vbkRpc3Bvc2VkKVxyXG4gXHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRGlzcG9zZWQocmVzdWx0KTtcclxuIFx0XHRcdFx0XHRcdGRvRGlzcG9zZSA9IHRydWU7XHJcbiBcdFx0XHRcdFx0XHRicmVhaztcclxuIFx0XHRcdFx0XHRkZWZhdWx0OlxyXG4gXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leGNlcHRpb24gdHlwZSBcIiArIHJlc3VsdC50eXBlKTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRpZihhYm9ydEVycm9yKSB7XHJcbiBcdFx0XHRcdFx0aG90U2V0U3RhdHVzKFwiYWJvcnRcIik7XHJcbiBcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0RXJyb3IpO1xyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHRcdGlmKGRvQXBwbHkpIHtcclxuIFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IGhvdFVwZGF0ZVttb2R1bGVJZF07XHJcbiBcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWRNb2R1bGVzLCByZXN1bHQub3V0ZGF0ZWRNb2R1bGVzKTtcclxuIFx0XHRcdFx0XHRmb3IobW9kdWxlSWQgaW4gcmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XHJcbiBcdFx0XHRcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZCkpIHtcclxuIFx0XHRcdFx0XHRcdFx0aWYoIW91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSlcclxuIFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0gPSBbXTtcclxuIFx0XHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdLCByZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKTtcclxuIFx0XHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdFx0aWYoZG9EaXNwb3NlKSB7XHJcbiBcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWRNb2R1bGVzLCBbcmVzdWx0Lm1vZHVsZUlkXSk7XHJcbiBcdFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSB3YXJuVW5leHBlY3RlZFJlcXVpcmU7XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdH1cclxuIFx0XHR9XHJcbiBcdFxyXG4gXHRcdC8vIFN0b3JlIHNlbGYgYWNjZXB0ZWQgb3V0ZGF0ZWQgbW9kdWxlcyB0byByZXF1aXJlIHRoZW0gbGF0ZXIgYnkgdGhlIG1vZHVsZSBzeXN0ZW1cclxuIFx0XHR2YXIgb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzID0gW107XHJcbiBcdFx0Zm9yKGkgPSAwOyBpIDwgb3V0ZGF0ZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XHJcbiBcdFx0XHRtb2R1bGVJZCA9IG91dGRhdGVkTW9kdWxlc1tpXTtcclxuIFx0XHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdICYmIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmhvdC5fc2VsZkFjY2VwdGVkKVxyXG4gXHRcdFx0XHRvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMucHVzaCh7XHJcbiBcdFx0XHRcdFx0bW9kdWxlOiBtb2R1bGVJZCxcclxuIFx0XHRcdFx0XHRlcnJvckhhbmRsZXI6IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmhvdC5fc2VsZkFjY2VwdGVkXHJcbiBcdFx0XHRcdH0pO1xyXG4gXHRcdH1cclxuIFx0XHJcbiBcdFx0Ly8gTm93IGluIFwiZGlzcG9zZVwiIHBoYXNlXHJcbiBcdFx0aG90U2V0U3RhdHVzKFwiZGlzcG9zZVwiKTtcclxuIFx0XHRPYmplY3Qua2V5cyhob3RBdmFpbGFibGVGaWxlc01hcCkuZm9yRWFjaChmdW5jdGlvbihjaHVua0lkKSB7XHJcbiBcdFx0XHRpZihob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSA9PT0gZmFsc2UpIHtcclxuIFx0XHRcdFx0aG90RGlzcG9zZUNodW5rKGNodW5rSWQpO1xyXG4gXHRcdFx0fVxyXG4gXHRcdH0pO1xyXG4gXHRcclxuIFx0XHR2YXIgaWR4O1xyXG4gXHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpO1xyXG4gXHRcdHdoaWxlKHF1ZXVlLmxlbmd0aCA+IDApIHtcclxuIFx0XHRcdG1vZHVsZUlkID0gcXVldWUucG9wKCk7XHJcbiBcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcclxuIFx0XHRcdGlmKCFtb2R1bGUpIGNvbnRpbnVlO1xyXG4gXHRcclxuIFx0XHRcdHZhciBkYXRhID0ge307XHJcbiBcdFxyXG4gXHRcdFx0Ly8gQ2FsbCBkaXNwb3NlIGhhbmRsZXJzXHJcbiBcdFx0XHR2YXIgZGlzcG9zZUhhbmRsZXJzID0gbW9kdWxlLmhvdC5fZGlzcG9zZUhhbmRsZXJzO1xyXG4gXHRcdFx0Zm9yKGogPSAwOyBqIDwgZGlzcG9zZUhhbmRsZXJzLmxlbmd0aDsgaisrKSB7XHJcbiBcdFx0XHRcdGNiID0gZGlzcG9zZUhhbmRsZXJzW2pdO1xyXG4gXHRcdFx0XHRjYihkYXRhKTtcclxuIFx0XHRcdH1cclxuIFx0XHRcdGhvdEN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXSA9IGRhdGE7XHJcbiBcdFxyXG4gXHRcdFx0Ly8gZGlzYWJsZSBtb2R1bGUgKHRoaXMgZGlzYWJsZXMgcmVxdWlyZXMgZnJvbSB0aGlzIG1vZHVsZSlcclxuIFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XHJcbiBcdFxyXG4gXHRcdFx0Ly8gcmVtb3ZlIG1vZHVsZSBmcm9tIGNhY2hlXHJcbiBcdFx0XHRkZWxldGUgaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XHJcbiBcdFxyXG4gXHRcdFx0Ly8gd2hlbiBkaXNwb3NpbmcgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIGRpc3Bvc2UgaGFuZGxlclxyXG4gXHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcclxuIFx0XHJcbiBcdFx0XHQvLyByZW1vdmUgXCJwYXJlbnRzXCIgcmVmZXJlbmNlcyBmcm9tIGFsbCBjaGlsZHJlblxyXG4gXHRcdFx0Zm9yKGogPSAwOyBqIDwgbW9kdWxlLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XHJcbiBcdFx0XHRcdHZhciBjaGlsZCA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlLmNoaWxkcmVuW2pdXTtcclxuIFx0XHRcdFx0aWYoIWNoaWxkKSBjb250aW51ZTtcclxuIFx0XHRcdFx0aWR4ID0gY2hpbGQucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKTtcclxuIFx0XHRcdFx0aWYoaWR4ID49IDApIHtcclxuIFx0XHRcdFx0XHRjaGlsZC5wYXJlbnRzLnNwbGljZShpZHgsIDEpO1xyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHR9XHJcbiBcdFx0fVxyXG4gXHRcclxuIFx0XHQvLyByZW1vdmUgb3V0ZGF0ZWQgZGVwZW5kZW5jeSBmcm9tIG1vZHVsZSBjaGlsZHJlblxyXG4gXHRcdHZhciBkZXBlbmRlbmN5O1xyXG4gXHRcdHZhciBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcztcclxuIFx0XHRmb3IobW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcclxuIFx0XHRcdGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpKSB7XHJcbiBcdFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xyXG4gXHRcdFx0XHRpZihtb2R1bGUpIHtcclxuIFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9IG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcclxuIFx0XHRcdFx0XHRmb3IoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xyXG4gXHRcdFx0XHRcdFx0ZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2pdO1xyXG4gXHRcdFx0XHRcdFx0aWR4ID0gbW9kdWxlLmNoaWxkcmVuLmluZGV4T2YoZGVwZW5kZW5jeSk7XHJcbiBcdFx0XHRcdFx0XHRpZihpZHggPj0gMCkgbW9kdWxlLmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xyXG4gXHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0fVxyXG4gXHRcdH1cclxuIFx0XHJcbiBcdFx0Ly8gTm90IGluIFwiYXBwbHlcIiBwaGFzZVxyXG4gXHRcdGhvdFNldFN0YXR1cyhcImFwcGx5XCIpO1xyXG4gXHRcclxuIFx0XHRob3RDdXJyZW50SGFzaCA9IGhvdFVwZGF0ZU5ld0hhc2g7XHJcbiBcdFxyXG4gXHRcdC8vIGluc2VydCBuZXcgY29kZVxyXG4gXHRcdGZvcihtb2R1bGVJZCBpbiBhcHBsaWVkVXBkYXRlKSB7XHJcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXBwbGllZFVwZGF0ZSwgbW9kdWxlSWQpKSB7XHJcbiBcdFx0XHRcdG1vZHVsZXNbbW9kdWxlSWRdID0gYXBwbGllZFVwZGF0ZVttb2R1bGVJZF07XHJcbiBcdFx0XHR9XHJcbiBcdFx0fVxyXG4gXHRcclxuIFx0XHQvLyBjYWxsIGFjY2VwdCBoYW5kbGVyc1xyXG4gXHRcdHZhciBlcnJvciA9IG51bGw7XHJcbiBcdFx0Zm9yKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XHJcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3V0ZGF0ZWREZXBlbmRlbmNpZXMsIG1vZHVsZUlkKSkge1xyXG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcclxuIFx0XHRcdFx0aWYobW9kdWxlKSB7XHJcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XHJcbiBcdFx0XHRcdFx0dmFyIGNhbGxiYWNrcyA9IFtdO1xyXG4gXHRcdFx0XHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiBcdFx0XHRcdFx0XHRkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV07XHJcbiBcdFx0XHRcdFx0XHRjYiA9IG1vZHVsZS5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldO1xyXG4gXHRcdFx0XHRcdFx0aWYoY2IpIHtcclxuIFx0XHRcdFx0XHRcdFx0aWYoY2FsbGJhY2tzLmluZGV4T2YoY2IpID49IDApIGNvbnRpbnVlO1xyXG4gXHRcdFx0XHRcdFx0XHRjYWxsYmFja3MucHVzaChjYik7XHJcbiBcdFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRcdGZvcihpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gXHRcdFx0XHRcdFx0Y2IgPSBjYWxsYmFja3NbaV07XHJcbiBcdFx0XHRcdFx0XHR0cnkge1xyXG4gXHRcdFx0XHRcdFx0XHRjYihtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyk7XHJcbiBcdFx0XHRcdFx0XHR9IGNhdGNoKGVycikge1xyXG4gXHRcdFx0XHRcdFx0XHRpZihvcHRpb25zLm9uRXJyb3JlZCkge1xyXG4gXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcclxuIFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiYWNjZXB0LWVycm9yZWRcIixcclxuIFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcclxuIFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3lJZDogbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV0sXHJcbiBcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXHJcbiBcdFx0XHRcdFx0XHRcdFx0fSk7XHJcbiBcdFx0XHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0XHRcdFx0aWYoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xyXG4gXHRcdFx0XHRcdFx0XHRcdGlmKCFlcnJvcilcclxuIFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yID0gZXJyO1xyXG4gXHRcdFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHR9XHJcbiBcdFx0fVxyXG4gXHRcclxuIFx0XHQvLyBMb2FkIHNlbGYgYWNjZXB0ZWQgbW9kdWxlc1xyXG4gXHRcdGZvcihpID0gMDsgaSA8IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5sZW5ndGg7IGkrKykge1xyXG4gXHRcdFx0dmFyIGl0ZW0gPSBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXNbaV07XHJcbiBcdFx0XHRtb2R1bGVJZCA9IGl0ZW0ubW9kdWxlO1xyXG4gXHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xyXG4gXHRcdFx0dHJ5IHtcclxuIFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCk7XHJcbiBcdFx0XHR9IGNhdGNoKGVycikge1xyXG4gXHRcdFx0XHRpZih0eXBlb2YgaXRlbS5lcnJvckhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gXHRcdFx0XHRcdHRyeSB7XHJcbiBcdFx0XHRcdFx0XHRpdGVtLmVycm9ySGFuZGxlcihlcnIpO1xyXG4gXHRcdFx0XHRcdH0gY2F0Y2goZXJyMikge1xyXG4gXHRcdFx0XHRcdFx0aWYob3B0aW9ucy5vbkVycm9yZWQpIHtcclxuIFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xyXG4gXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1hY2NlcHQtZXJyb3ItaGFuZGxlci1lcnJvcmVkXCIsXHJcbiBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxyXG4gXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBlcnIyLFxyXG4gXHRcdFx0XHRcdFx0XHRcdG9yZ2luYWxFcnJvcjogZXJyLCAvLyBUT0RPIHJlbW92ZSBpbiB3ZWJwYWNrIDRcclxuIFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcclxuIFx0XHRcdFx0XHRcdFx0fSk7XHJcbiBcdFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0XHRpZighb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XHJcbiBcdFx0XHRcdFx0XHRcdGlmKCFlcnJvcilcclxuIFx0XHRcdFx0XHRcdFx0XHRlcnJvciA9IGVycjI7XHJcbiBcdFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0XHRpZighZXJyb3IpXHJcbiBcdFx0XHRcdFx0XHRcdGVycm9yID0gZXJyO1xyXG4gXHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0fSBlbHNlIHtcclxuIFx0XHRcdFx0XHRpZihvcHRpb25zLm9uRXJyb3JlZCkge1xyXG4gXHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xyXG4gXHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yZWRcIixcclxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxyXG4gXHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXHJcbiBcdFx0XHRcdFx0XHR9KTtcclxuIFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0aWYoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xyXG4gXHRcdFx0XHRcdFx0aWYoIWVycm9yKVxyXG4gXHRcdFx0XHRcdFx0XHRlcnJvciA9IGVycjtcclxuIFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdH1cclxuIFx0XHR9XHJcbiBcdFxyXG4gXHRcdC8vIGhhbmRsZSBlcnJvcnMgaW4gYWNjZXB0IGhhbmRsZXJzIGFuZCBzZWxmIGFjY2VwdGVkIG1vZHVsZSBsb2FkXHJcbiBcdFx0aWYoZXJyb3IpIHtcclxuIFx0XHRcdGhvdFNldFN0YXR1cyhcImZhaWxcIik7XHJcbiBcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gXHRcdH1cclxuIFx0XHJcbiBcdFx0aG90U2V0U3RhdHVzKFwiaWRsZVwiKTtcclxuIFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xyXG4gXHRcdFx0cmVzb2x2ZShvdXRkYXRlZE1vZHVsZXMpO1xyXG4gXHRcdH0pO1xyXG4gXHR9XHJcblxuIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge30sXG4gXHRcdFx0aG90OiBob3RDcmVhdGVNb2R1bGUobW9kdWxlSWQpLFxuIFx0XHRcdHBhcmVudHM6IChob3RDdXJyZW50UGFyZW50c1RlbXAgPSBob3RDdXJyZW50UGFyZW50cywgaG90Q3VycmVudFBhcmVudHMgPSBbXSwgaG90Q3VycmVudFBhcmVudHNUZW1wKSxcbiBcdFx0XHRjaGlsZHJlbjogW11cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgaG90Q3JlYXRlUmVxdWlyZShtb2R1bGVJZCkpO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBfX3dlYnBhY2tfaGFzaF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSBmdW5jdGlvbigpIHsgcmV0dXJuIGhvdEN1cnJlbnRIYXNoOyB9O1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBob3RDcmVhdGVSZXF1aXJlKDE1KShfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgYzlmZDEyYzlhZTkzOWY1OTYyMmIiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlcXVpcmUoJ3BhdGgnKVwiXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmNvbnN0IERBVEFfUEFUSCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9kYXRhJyk7XG5jb25zdCBBTkFMWVRJQ1NfUEFUSCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9zcmMnKTtcbmNvbnN0IEFOT01BTElFU19QQVRIID0gcGF0aC5qb2luKEFOQUxZVElDU19QQVRILCAnYW5vbWFsaWVzJyk7XG5jb25zdCBTRUdNRU5UU19QQVRIID0gcGF0aC5qb2luKEFOQUxZVElDU19QQVRILCAnc2VnbWVudHMnKTtcbmNvbnN0IE1FVFJJQ1NfUEFUSCA9IHBhdGguam9pbihBTkFMWVRJQ1NfUEFUSCwgJ21ldHJpY3MnKTtcblxuZXhwb3J0IHsgREFUQV9QQVRILCBBTkFMWVRJQ1NfUEFUSCwgQU5PTUFMSUVTX1BBVEgsIFNFR01FTlRTX1BBVEgsIE1FVFJJQ1NfUEFUSCB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcudHMiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeScpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5JylcIlxuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3InKVwiXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlJylcIlxuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBnZXRKc29uRGF0YVN5bmMsIHdyaXRlSnNvbkRhdGFTeW5jIH0gZnJvbSAnLi9qc29uJ1xuaW1wb3J0IHsgQU5PTUFMSUVTX1BBVEggfSBmcm9tICcuLi9jb25maWcnXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcydcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5leHBvcnQgdHlwZSBEYXRhc291cmNlID0ge1xuICBtZXRob2Q6IHN0cmluZyxcbiAgZGF0YTogT2JqZWN0LFxuICBwYXJhbXM6IE9iamVjdCxcbiAgdHlwZTogc3RyaW5nLFxuICB1cmw6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBNZXRyaWMgPSB7XG4gIGRhdGFzb3VyY2U6IHN0cmluZyxcbiAgdGFyZ2V0czogc3RyaW5nW11cbn1cblxuZXhwb3J0IHR5cGUgQW5vbWFseSA9IHtcbiAgbmFtZTogc3RyaW5nLFxuXG4gIHBhbmVsVXJsOiBzdHJpbmcsXG5cbiAgbWV0cmljOiBNZXRyaWMsXG4gIGRhdGFzb3VyY2U6IERhdGFzb3VyY2VcbiAgc3RhdHVzOiBzdHJpbmcsXG4gIGVycm9yPzogc3RyaW5nLFxuXG4gIGxhc3RfcHJlZGljdGlvbl90aW1lOiBudW1iZXIsXG4gIG5leHRfaWQ6IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBBbm9tYWx5SWQgPSBzdHJpbmc7XG5cbmxldCBhbm9tYWxpZXNOYW1lVG9JZE1hcCA9IHt9O1xuXG5mdW5jdGlvbiBsb2FkQW5vbWFsaWVzTWFwKCkge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGBhbGxfYW5vbWFsaWVzLmpzb25gKTtcbiAgYW5vbWFsaWVzTmFtZVRvSWRNYXAgPSBnZXRKc29uRGF0YVN5bmMoZmlsZW5hbWUpO1xufVxuXG5mdW5jdGlvbiBzYXZlQW5vbWFsaWVzTWFwKCkge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGBhbGxfYW5vbWFsaWVzLmpzb25gKTtcbiAgd3JpdGVKc29uRGF0YVN5bmMoZmlsZW5hbWUsIGFub21hbGllc05hbWVUb0lkTWFwKTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5vbWFseUlkQnlOYW1lKGFub21hbHlOYW1lOnN0cmluZykgOiBBbm9tYWx5SWQge1xuICBsb2FkQW5vbWFsaWVzTWFwKCk7XG4gIGFub21hbHlOYW1lID0gYW5vbWFseU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgaWYoYW5vbWFseU5hbWUgaW4gYW5vbWFsaWVzTmFtZVRvSWRNYXApIHtcbiAgICByZXR1cm4gYW5vbWFsaWVzTmFtZVRvSWRNYXBbYW5vbWFseU5hbWVdO1xuICB9XG4gIHJldHVybiBhbm9tYWx5TmFtZTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QW5vbWFseShhbm9tYWx5OiBBbm9tYWx5KSA6IEFub21hbHlJZCB7XG4gIGNvbnN0IGhhc2hTdHJpbmcgPSBhbm9tYWx5Lm5hbWUgKyAobmV3IERhdGUoKSkudG9TdHJpbmcoKTtcbiAgY29uc3QgYW5vbWFseUlkOkFub21hbHlJZCA9IGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoaGFzaFN0cmluZykuZGlnZXN0KCdoZXgnKTtcbiAgYW5vbWFsaWVzTmFtZVRvSWRNYXBbYW5vbWFseS5uYW1lXSA9IGFub21hbHlJZDtcbiAgc2F2ZUFub21hbGllc01hcCgpO1xuICAvLyByZXR1cm4gYW5vbWFseUlkXG4gIC8vIGNvbnN0IGFub21hbHlJZDpBbm9tYWx5SWQgPSBhbm9tYWx5Lm5hbWU7XG4gIGxldCBmaWxlbmFtZSA9IHBhdGguam9pbihBTk9NQUxJRVNfUEFUSCwgYCR7YW5vbWFseUlkfS5qc29uYCk7XG4gIGlmKGZzLmV4aXN0c1N5bmMoZmlsZW5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgc2F2ZUFub21hbHkoYW5vbWFseUlkLCBhbm9tYWx5KTtcbiAgcmV0dXJuIGFub21hbHlJZDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQW5vbWFseShhbm9tYWx5SWQ6QW5vbWFseUlkKSB7XG4gIGxldCBmaWxlbmFtZSA9IHBhdGguam9pbihBTk9NQUxJRVNfUEFUSCwgYCR7YW5vbWFseUlkfS5qc29uYCk7XG4gIGZzLnVubGlua1N5bmMoZmlsZW5hbWUpO1xufVxuXG5mdW5jdGlvbiBzYXZlQW5vbWFseShhbm9tYWx5SWQ6IEFub21hbHlJZCwgYW5vbWFseTogQW5vbWFseSkge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGAke2Fub21hbHlJZH0uanNvbmApO1xuICByZXR1cm4gd3JpdGVKc29uRGF0YVN5bmMoZmlsZW5hbWUsIGFub21hbHkpO1xufVxuXG5mdW5jdGlvbiBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkOiBBbm9tYWx5SWQpIDogQW5vbWFseSB7XG4gIGxldCBmaWxlbmFtZSA9IHBhdGguam9pbihBTk9NQUxJRVNfUEFUSCwgYCR7YW5vbWFseUlkfS5qc29uYCk7XG4gIGlmKCFmcy5leGlzdHNTeW5jKGZpbGVuYW1lKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBnZXRKc29uRGF0YVN5bmMoZmlsZW5hbWUpO1xufVxuXG5mdW5jdGlvbiBsb2FkQW5vbWFseUJ5TmFtZShhbm9tYWx5TmFtZTogc3RyaW5nKSA6IEFub21hbHkge1xuICBsZXQgYW5vbWFseUlkID0gZ2V0QW5vbWFseUlkQnlOYW1lKGFub21hbHlOYW1lKTtcbiAgcmV0dXJuIGxvYWRBbm9tYWx5QnlJZChhbm9tYWx5SWQpO1xufVxuXG5mdW5jdGlvbiBzYXZlQW5vbWFseVR5cGVJbmZvKGluZm8pIHtcbiAgY29uc29sZS5sb2coJ1NhdmluZycpO1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGAke2luZm8ubmFtZX0uanNvbmApO1xuICBpZihpbmZvLm5leHRfaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGluZm8ubmV4dF9pZCA9IDA7XG4gIH1cbiAgaWYoaW5mby5sYXN0X3ByZWRpY3Rpb25fdGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmZvLmxhc3RfcHJlZGljdGlvbl90aW1lID0gMDtcbiAgfVxuXG4gIHJldHVybiB3cml0ZUpzb25EYXRhU3luYyhmaWxlbmFtZSwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGdldEFub21hbHlUeXBlSW5mbyhuYW1lKSB7XG4gIHJldHVybiBnZXRKc29uRGF0YVN5bmMocGF0aC5qb2luKEFOT01BTElFU19QQVRILCBgJHtuYW1lfS5qc29uYCkpO1xufVxuXG5mdW5jdGlvbiBzZXRBbm9tYWx5U3RhdHVzKGFub21hbHlJZDpBbm9tYWx5SWQsIHN0YXR1czpzdHJpbmcsIGVycm9yPzpzdHJpbmcpIHtcbiAgbGV0IGluZm8gPSBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkKTtcbiAgaW5mby5zdGF0dXMgPSBzdGF0dXM7XG4gIGlmKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbmZvLmVycm9yID0gZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAgaW5mby5lcnJvciA9ICcnO1xuICB9XG4gIHNhdmVBbm9tYWx5KGFub21hbHlJZCwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIHNldEFub21hbHlQcmVkaWN0aW9uVGltZShhbm9tYWx5SWQ6QW5vbWFseUlkLCBsYXN0UHJlZGljdGlvblRpbWU6bnVtYmVyKSB7XG4gIGxldCBpbmZvID0gbG9hZEFub21hbHlCeUlkKGFub21hbHlJZCk7XG4gIGluZm8ubGFzdF9wcmVkaWN0aW9uX3RpbWUgPSBsYXN0UHJlZGljdGlvblRpbWU7XG4gIHNhdmVBbm9tYWx5KGFub21hbHlJZCwgaW5mbyk7XG59XG5cbmV4cG9ydCB7XG4gIHNhdmVBbm9tYWx5LCBsb2FkQW5vbWFseUJ5SWQsIGxvYWRBbm9tYWx5QnlOYW1lLCBpbnNlcnRBbm9tYWx5LCByZW1vdmVBbm9tYWx5LCBzYXZlQW5vbWFseVR5cGVJbmZvLFxuICBnZXRBbm9tYWx5VHlwZUluZm8sIGdldEFub21hbHlJZEJ5TmFtZSwgc2V0QW5vbWFseVN0YXR1cywgc2V0QW5vbWFseVByZWRpY3Rpb25UaW1lXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2aWNlcy9hbm9tYWx5VHlwZS50cyIsImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcblxuYXN5bmMgZnVuY3Rpb24gZ2V0SnNvbkRhdGEoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8T2JqZWN0PiB7XG4gIHZhciBkYXRhID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZEZpbGUoZmlsZW5hbWUsICd1dGY4JywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgaWYoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgcmVqZWN0KCdDYW5gdCByZWFkIGZpbGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gIH0gY2F0Y2goZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBmaWxlIGZvcm1hdCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlSnNvbkRhdGEoZmlsZW5hbWU6IHN0cmluZywgZGF0YTogT2JqZWN0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMud3JpdGVGaWxlKGZpbGVuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSwgJ3V0ZjgnLCAoZXJyKSA9PiB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICByZWplY3QoJ0NhdGB0IHdyaXRlIGZpbGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0SnNvbkRhdGFTeW5jKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgbGV0IGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsICd1dGY4Jyk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gIH0gY2F0Y2goZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBmaWxlIGZvcm1hdCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlSnNvbkRhdGFTeW5jKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGE6IE9iamVjdCkge1xuICBmcy53cml0ZUZpbGVTeW5jKGZpbGVuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCB7XG4gIGdldEpzb25EYXRhLFxuICB3cml0ZUpzb25EYXRhLFxuICBnZXRKc29uRGF0YVN5bmMsXG4gIHdyaXRlSnNvbkRhdGFTeW5jXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2aWNlcy9qc29uLnRzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdleHByZXNzJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJyZXF1aXJlKCdleHByZXNzJylcIlxuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9nZXQtaXRlcmF0b3InKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9nZXQtaXRlcmF0b3InKVwiXG4vLyBtb2R1bGUgaWQgPSA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZnMnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlcXVpcmUoJ2ZzJylcIlxuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBBTkFMWVRJQ1NfUEFUSCB9IGZyb20gJy4uL2NvbmZpZydcbmltcG9ydCB7XG4gIEFub21hbHksXG4gIEFub21hbHlJZCwgZ2V0QW5vbWFseVR5cGVJbmZvLFxuICBsb2FkQW5vbWFseUJ5SWQsXG4gIHNldEFub21hbHlQcmVkaWN0aW9uVGltZSxcbiAgc2V0QW5vbWFseVN0YXR1c1xufSBmcm9tICcuL2Fub21hbHlUeXBlJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi9tZXRyaWNzJztcbmltcG9ydCB7IGdldExhYmVsZWRTZWdtZW50cywgaW5zZXJ0U2VnbWVudHMsIHJlbW92ZVNlZ21lbnRzIH0gZnJvbSAnLi9zZWdtZW50cyc7XG5pbXBvcnQgeyBzcGxpdCwgbWFwLCBtYXBTeW5jIH0gZnJvbSAnZXZlbnQtc3RyZWFtJ1xuXG5jb25zdCBsZWFybldvcmtlciA9IHNwYXduKCdweXRob24zJywgWyd3b3JrZXIucHknXSwgeyBjd2Q6IEFOQUxZVElDU19QQVRIIH0pXG5sZWFybldvcmtlci5zdGRvdXQucGlwZShzcGxpdCgpKVxuICAucGlwZShcbiAgICBtYXBTeW5jKGZ1bmN0aW9uKGxpbmUpe1xuICAgICAgb25NZXNzYWdlKGxpbmUpXG4gICAgfSlcbiAgKTtcblxubGVhcm5Xb3JrZXIuc3RkZXJyLm9uKCdkYXRhJywgZGF0YSA9PiBjb25zb2xlLmVycm9yKGB3b3JrZXIgc3RkZXJyOiAke2RhdGF9YCkpO1xuXG5jb25zdCB0YXNrTWFwID0ge307XG5sZXQgbmV4dFRhc2tJZCA9IDA7XG5cbmZ1bmN0aW9uIG9uTWVzc2FnZShkYXRhKSB7XG4gIGNvbnNvbGUubG9nKGB3b3JrZXIgc3Rkb3V0OiAke2RhdGF9YCk7XG4gIGxldCByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gIGxldCB0YXNrSWQgPSByZXNwb25zZS5fX3Rhc2tfaWQ7XG4gIC8vIGxldCBhbm9tYWx5TmFtZSA9IHJlc3BvbnNlLmFub21hbHlfbmFtZTtcbiAgLy8gbGV0IHRhc2sgPSByZXNwb25zZS50YXNrO1xuICBsZXQgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gIGlmKHN0YXR1cyA9PT0gJ3N1Y2Nlc3MnIHx8IHN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICBpZih0YXNrSWQgaW4gdGFza01hcCkge1xuICAgICAgbGV0IHJlc29sdmVyID0gdGFza01hcFt0YXNrSWRdO1xuICAgICAgcmVzb2x2ZXIocmVzcG9uc2UpO1xuICAgICAgZGVsZXRlIHRhc2tNYXBbdGFza0lkXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcnVuVGFzayh0YXNrKSA6IFByb21pc2U8YW55PiB7XG4gIGxldCBhbm9tYWx5OkFub21hbHkgPSBsb2FkQW5vbWFseUJ5SWQodGFzay5hbm9tYWx5X2lkKTtcbiAgdGFzay5tZXRyaWMgPSB7XG4gICAgZGF0YXNvdXJjZTogYW5vbWFseS5tZXRyaWMuZGF0YXNvdXJjZSxcbiAgICB0YXJnZXRzOiBhbm9tYWx5Lm1ldHJpYy50YXJnZXRzLm1hcCh0ID0+IGdldFRhcmdldCh0KSlcbiAgfTtcblxuICB0YXNrLl9fdGFza19pZCA9IG5leHRUYXNrSWQrKztcbiAgbGV0IGNvbW1hbmQgPSBKU09OLnN0cmluZ2lmeSh0YXNrKVxuICBsZWFybldvcmtlci5zdGRpbi53cml0ZShgJHtjb21tYW5kfVxcbmApO1xuICByZXR1cm4gbmV3IFByb21pc2U8T2JqZWN0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGFza01hcFt0YXNrLl9fdGFza19pZF0gPSByZXNvbHZlXG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkxlYXJuaW5nKGFub21hbHlJZDpBbm9tYWx5SWQpIHtcbiAgbGV0IHNlZ21lbnRzID0gZ2V0TGFiZWxlZFNlZ21lbnRzKGFub21hbHlJZCk7XG4gIHNldEFub21hbHlTdGF0dXMoYW5vbWFseUlkLCAnbGVhcm5pbmcnKTtcbiAgbGV0IGFub21hbHk6QW5vbWFseSAgPSBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkKTtcbiAgbGV0IGFuYWx5dGljc1R5cGUgPSBcImFub21hbGllc1wiO1xuICBsZXQgcHJlc2V0ID0gdW5kZWZpbmVkO1xuICBpZiAoYW5vbWFseS5uYW1lLmluY2x1ZGVzKFwianVtcHNcIikpIHtcbiAgICBhbmFseXRpY3NUeXBlID0gXCJwYXR0ZXJuc1wiO1xuICAgIHByZXNldCA9IFwic3RlcHNcIlxuICB9XG4gIGlmIChhbm9tYWx5Lm5hbWUuaW5jbHVkZXMoXCJjbGlmZnNcIikgfHwgYW5vbWFseS5uYW1lLmluY2x1ZGVzKFwiZHJvcHNcIikpIHtcbiAgICBhbmFseXRpY3NUeXBlID0gXCJwYXR0ZXJuc1wiO1xuICAgIHByZXNldCA9IFwiY2xpZmZzXCJcbiAgfVxuICBpZiAoYW5vbWFseS5uYW1lLmluY2x1ZGVzKFwicGVha3NcIikpIHtcbiAgICBhbmFseXRpY3NUeXBlID0gXCJwYXR0ZXJuc1wiO1xuICAgIHByZXNldCA9IFwicGVha3NcIlxuICB9XG4gIGxldCB0YXNrID0ge1xuICAgIHR5cGU6ICdsZWFybicsXG4gICAgYW5vbWFseV9pZDogYW5vbWFseUlkLFxuICAgIGFuYWx5dGljc190eXBlOiBhbmFseXRpY3NUeXBlLFxuICAgIHByZXNldCxcbiAgICBzZWdtZW50czogc2VnbWVudHNcbiAgfTtcblxuICBsZXQgcmVzdWx0ID0gYXdhaXQgcnVuVGFzayh0YXNrKTtcblxuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgc2V0QW5vbWFseVN0YXR1cyhhbm9tYWx5SWQsICdyZWFkeScpO1xuICAgIGluc2VydFNlZ21lbnRzKGFub21hbHlJZCwgcmVzdWx0LnNlZ21lbnRzLCBmYWxzZSk7XG4gICAgc2V0QW5vbWFseVByZWRpY3Rpb25UaW1lKGFub21hbHlJZCwgcmVzdWx0Lmxhc3RfcHJlZGljdGlvbl90aW1lKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRBbm9tYWx5U3RhdHVzKGFub21hbHlJZCwgJ2ZhaWxlZCcsIHJlc3VsdC5lcnJvcik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuUHJlZGljdChhbm9tYWx5SWQ6QW5vbWFseUlkKSB7XG4gIGxldCBhbm9tYWx5OkFub21hbHkgPSBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkKTtcbiAgbGV0IGFuYWx5dGljc1R5cGUgPSBcImFub21hbGllc1wiO1xuICBsZXQgcHJlc2V0ID0gdW5kZWZpbmVkO1xuICBpZiAoYW5vbWFseS5uYW1lLmluY2x1ZGVzKFwianVtcFwiKSkge1xuICAgIGFuYWx5dGljc1R5cGUgPSBcInBhdHRlcm5zXCI7XG4gICAgcHJlc2V0ID0gXCJzdGVwc1wiXG4gIH1cbiAgaWYgKGFub21hbHkubmFtZS5pbmNsdWRlcyhcImNsaWZmc1wiKSB8fCBhbm9tYWx5Lm5hbWUuaW5jbHVkZXMoXCJkcm9wc1wiKSkge1xuICAgIGFuYWx5dGljc1R5cGUgPSBcInBhdHRlcm5zXCI7XG4gICAgcHJlc2V0ID0gXCJjbGlmZnNcIlxuICB9XG4gIGlmIChhbm9tYWx5Lm5hbWUuaW5jbHVkZXMoXCJwZWFrc1wiKSkge1xuICAgIGFuYWx5dGljc1R5cGUgPSBcInBhdHRlcm5zXCI7XG4gICAgcHJlc2V0ID0gXCJwZWFrc1wiXG4gIH1cbiAgbGV0IHRhc2sgPSB7XG4gICAgdHlwZTogJ3ByZWRpY3QnLFxuICAgIGFub21hbHlfaWQ6IGFub21hbHlJZCxcbiAgICBhbmFseXRpY3NfdHlwZTogYW5hbHl0aWNzVHlwZSxcbiAgICBwcmVzZXQsXG4gICAgbGFzdF9wcmVkaWN0aW9uX3RpbWU6IGFub21hbHkubGFzdF9wcmVkaWN0aW9uX3RpbWVcbiAgfTtcbiAgbGV0IHJlc3VsdCA9IGF3YWl0IHJ1blRhc2sodGFzayk7XG5cbiAgaWYocmVzdWx0LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gTWVyZ2luZyBzZWdtZW50c1xuICBsZXQgc2VnbWVudHMgPSBnZXRMYWJlbGVkU2VnbWVudHMoYW5vbWFseUlkKTtcbiAgaWYoc2VnbWVudHMubGVuZ3RoID4gMCAmJiByZXN1bHQuc2VnbWVudHMubGVuZ3RoID4gMCkge1xuICAgIGxldCBsYXN0T2xkU2VnbWVudCA9IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGxldCBmaXJzdE5ld1NlZ21lbnQgPSByZXN1bHQuc2VnbWVudHNbMF07XG5cbiAgICBpZihmaXJzdE5ld1NlZ21lbnQuc3RhcnQgPD0gbGFzdE9sZFNlZ21lbnQuZmluaXNoKSB7XG4gICAgICByZXN1bHQuc2VnbWVudHNbMF0uc3RhcnQgPSBsYXN0T2xkU2VnbWVudC5zdGFydDtcbiAgICAgIHJlbW92ZVNlZ21lbnRzKGFub21hbHlJZCwgW2xhc3RPbGRTZWdtZW50LmlkXSk7XG4gICAgfVxuICB9XG5cbiAgaW5zZXJ0U2VnbWVudHMoYW5vbWFseUlkLCByZXN1bHQuc2VnbWVudHMsIGZhbHNlKTtcbiAgc2V0QW5vbWFseVByZWRpY3Rpb25UaW1lKGFub21hbHlJZCwgcmVzdWx0Lmxhc3RfcHJlZGljdGlvbl90aW1lKTtcbiAgcmV0dXJuIHJlc3VsdC5zZWdtZW50cztcbn1cblxuZXhwb3J0IHsgcnVuTGVhcm5pbmcsIHJ1blByZWRpY3QgfVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmljZXMvYW5hbHl0aWNzLnRzIiwiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGdldEpzb25EYXRhU3luYywgd3JpdGVKc29uRGF0YVN5bmMgfSAgZnJvbSAnLi9qc29uJztcbmltcG9ydCB7IFNFR01FTlRTX1BBVEggfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQW5vbWFseUlkLCBsb2FkQW5vbWFseUJ5SWQsIHNhdmVBbm9tYWx5IH0gZnJvbSAnLi9hbm9tYWx5VHlwZSc7XG5cbmZ1bmN0aW9uIGdldExhYmVsZWRTZWdtZW50cyhhbm9tYWx5SWQ6IEFub21hbHlJZCkge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oU0VHTUVOVFNfUEFUSCwgYCR7YW5vbWFseUlkfV9sYWJlbGVkLmpzb25gKTtcblxuICBsZXQgc2VnbWVudHMgPSBbXTtcbiAgdHJ5IHtcbiAgICBzZWdtZW50cyA9IGdldEpzb25EYXRhU3luYyhmaWxlbmFtZSk7XG4gICAgZm9yIChsZXQgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgaWYgKHNlZ21lbnQubGFiZWxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNlZ21lbnQubGFiZWxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoZS5tZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gc2VnbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldFByZWRpY3RlZFNlZ21lbnRzKGFub21hbHlJZDogQW5vbWFseUlkKSB7XG4gIGxldCBmaWxlbmFtZSA9IHBhdGguam9pbihTRUdNRU5UU19QQVRILCBgJHthbm9tYWx5SWR9X3NlZ21lbnRzLmpzb25gKTtcblxuICBsZXQganNvbkRhdGE7XG4gIHRyeSB7XG4gICAganNvbkRhdGEgPSBnZXRKc29uRGF0YVN5bmMoZmlsZW5hbWUpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7XG4gICAganNvbkRhdGEgPSBbXTtcbiAgfVxuICByZXR1cm4ganNvbkRhdGE7XG59XG5cbmZ1bmN0aW9uIHNhdmVTZWdtZW50cyhhbm9tYWx5SWQ6IEFub21hbHlJZCwgc2VnbWVudHMpIHtcbiAgbGV0IGZpbGVuYW1lID0gcGF0aC5qb2luKFNFR01FTlRTX1BBVEgsIGAke2Fub21hbHlJZH1fbGFiZWxlZC5qc29uYCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gd3JpdGVKc29uRGF0YVN5bmMoZmlsZW5hbWUsIHNlZ21lbnRzKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpO1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FuYHQgd3JpdGUgdG8gZGInKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRTZWdtZW50cyhhbm9tYWx5SWQ6IEFub21hbHlJZCwgYWRkZWRTZWdtZW50cywgbGFiZWxlZDpib29sZWFuKSB7XG4gIC8vIFNldCBzdGF0dXNcbiAgbGV0IGluZm8gPSBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkKTtcbiAgbGV0IHNlZ21lbnRzID0gZ2V0TGFiZWxlZFNlZ21lbnRzKGFub21hbHlJZCk7XG5cbiAgbGV0IG5leHRJZCA9IGluZm8ubmV4dF9pZDtcbiAgbGV0IGFkZGVkSWRzID0gW11cbiAgZm9yIChsZXQgc2VnbWVudCBvZiBhZGRlZFNlZ21lbnRzKSB7XG4gICAgc2VnbWVudC5pZCA9IG5leHRJZDtcbiAgICBzZWdtZW50LmxhYmVsZWQgPSBsYWJlbGVkO1xuICAgIGFkZGVkSWRzLnB1c2gobmV4dElkKTtcbiAgICBuZXh0SWQrKztcbiAgICBzZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICB9XG4gIGluZm8ubmV4dF9pZCA9IG5leHRJZDtcbiAgc2F2ZVNlZ21lbnRzKGFub21hbHlJZCwgc2VnbWVudHMpO1xuICBzYXZlQW5vbWFseShhbm9tYWx5SWQsIGluZm8pO1xuICByZXR1cm4gYWRkZWRJZHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNlZ21lbnRzKGFub21hbHlJZDogQW5vbWFseUlkLCByZW1vdmVkU2VnbWVudHMpIHtcbiAgbGV0IHNlZ21lbnRzID0gZ2V0TGFiZWxlZFNlZ21lbnRzKGFub21hbHlJZCk7XG4gIGZvciAobGV0IHNlZ21lbnRJZCBvZiByZW1vdmVkU2VnbWVudHMpIHtcbiAgICBzZWdtZW50cyA9IHNlZ21lbnRzLmZpbHRlcihlbCA9PiBlbC5pZCAhPT0gc2VnbWVudElkKTtcbiAgfVxuICBzYXZlU2VnbWVudHMoYW5vbWFseUlkLCBzZWdtZW50cyk7XG59XG5cbmV4cG9ydCB7IGdldExhYmVsZWRTZWdtZW50cywgZ2V0UHJlZGljdGVkU2VnbWVudHMsIHNhdmVTZWdtZW50cywgaW5zZXJ0U2VnbWVudHMsIHJlbW92ZVNlZ21lbnRzIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZpY2VzL3NlZ21lbnRzLnRzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdjcnlwdG8nKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlcXVpcmUoJ2NyeXB0bycpXCJcbi8vIG1vZHVsZSBpZCA9IDEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBnZXRKc29uRGF0YVN5bmMsIHdyaXRlSnNvbkRhdGFTeW5jIH0gIGZyb20gJy4vanNvbic7XG5pbXBvcnQgeyBNRVRSSUNTX1BBVEggfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmZ1bmN0aW9uIHNhdmVUYXJnZXRzKHRhcmdldHMpIHtcbiAgbGV0IG1ldHJpY3MgPSBbXTtcbiAgZm9yIChsZXQgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICBtZXRyaWNzLnB1c2goc2F2ZVRhcmdldCh0YXJnZXQpKTtcbiAgfVxuICByZXR1cm4gbWV0cmljcztcbn1cblxuZnVuY3Rpb24gc2F2ZVRhcmdldCh0YXJnZXQpIHtcbiAgLy9jb25zdCBtZDUgPSBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JylcbiAgY29uc3QgdGFyZ2V0SWQgPSBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKEpTT04uc3RyaW5naWZ5KHRhcmdldCkpLmRpZ2VzdCgnaGV4Jyk7XG4gIGxldCBmaWxlbmFtZSA9IHBhdGguam9pbihNRVRSSUNTX1BBVEgsIGAke3RhcmdldElkfS5qc29uYCk7XG4gIHdyaXRlSnNvbkRhdGFTeW5jKGZpbGVuYW1lLCB0YXJnZXQpO1xuICByZXR1cm4gdGFyZ2V0SWQ7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXRJZCkge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oTUVUUklDU19QQVRILCBgJHt0YXJnZXRJZH0uanNvbmApO1xuICByZXR1cm4gZ2V0SnNvbkRhdGFTeW5jKGZpbGVuYW1lKTtcbn1cblxuZXhwb3J0IHsgc2F2ZVRhcmdldHMsIGdldFRhcmdldCB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2aWNlcy9tZXRyaWNzLnRzIiwiLy9pbXBvcnQgKiBhcyBUZWxlZ3JhZiBmcm9tICd0ZWxlZ3JhZidcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEQVRBX1BBVEggfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgZ2V0SnNvbkRhdGFTeW5jLCB3cml0ZUpzb25EYXRhU3luYyB9IGZyb20gJy4vanNvbic7XG5pbXBvcnQgeyBBbm9tYWx5SWQgfSBmcm9tICcuL2Fub21hbHlUeXBlJztcblxuXG50eXBlIFN1YnNjcmliZXJJZCA9IHN0cmluZztcbnR5cGUgU3Vic2NyaWJlcnNNYXAgPSBNYXA8IEFub21hbHlJZCwgU3Vic2NyaWJlcklkW10gPjtcblxudHlwZSBCb3RDb25maWcgPSB7XG4gIHRva2VuOiBzdHJpbmcsXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmliZXJzTWFwXG59O1xuXG5mdW5jdGlvbiBzZW5kTm90aWZpY2F0aW9uKGFub21hbHlOYW1lLCBhY3RpdmUpIHtcbiAgY29uc29sZS5sb2coJ05vdGlmaWNhdGlvbiAnICsgYW5vbWFseU5hbWUpO1xuICBpZihhbm9tYWx5TmFtZSBpbiBib3RDb25maWcuc3Vic2NyaXB0aW9ucykge1xuICAgIGxldCBub3RpZmljYXRpb25NZXNzYWdlO1xuICAgIGlmKGFjdGl2ZSkge1xuICAgICAgbm90aWZpY2F0aW9uTWVzc2FnZSA9ICdBbGVydCEgQW5vbWFseSB0eXBlICcgKyBhbm9tYWx5TmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZpY2F0aW9uTWVzc2FnZSA9ICdPayEgQW5vbWFseSB0eXBlICcgKyBhbm9tYWx5TmFtZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBTdWJzY3JpYmVySWQgb2YgYm90Q29uZmlnLnN1YnNjcmlwdGlvbnNbYW5vbWFseU5hbWVdKSB7XG4gICAgICBib3QudGVsZWdyYW0uc2VuZE1lc3NhZ2UoU3Vic2NyaWJlcklkLCBub3RpZmljYXRpb25NZXNzYWdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZEJvdENvbmZpZygpIDogQm90Q29uZmlnIHtcbiAgbGV0IGZpbGVuYW1lID0gcGF0aC5qb2luKERBVEFfUEFUSCwgYGJvdF9jb25maWcuanNvbmApO1xuICBsZXQganNvbkRhdGE7XG4gIHRyeSB7XG4gICAganNvbkRhdGEgPSBnZXRKc29uRGF0YVN5bmMoZmlsZW5hbWUpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7XG4gICAganNvbkRhdGEgPSBbXTtcbiAgfVxuICByZXR1cm4ganNvbkRhdGE7XG59XG5cbmZ1bmN0aW9uIHNhdmVCb3RDb25maWcoYm90Q29uZmlnOiBCb3RDb25maWcpIHtcbiAgbGV0IGZpbGVuYW1lID0gcGF0aC5qb2luKERBVEFfUEFUSCwgYGJvdF9jb25maWcuanNvbmApO1xuICB0cnkge1xuICAgIHdyaXRlSnNvbkRhdGFTeW5jKGZpbGVuYW1lLCBib3RDb25maWcpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7XG4gIH1cbn1cblxuY29uc3QgY29tbWFuZEFyZ3MgPSAoY3R4LCBuZXh0KSA9PiB7XG4gIHRyeSB7XG4gICAgaWYoY3R4LnVwZGF0ZVR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgY29uc3QgdGV4dCA9IGN0eC51cGRhdGUubWVzc2FnZS50ZXh0O1xuICAgICAgaWYodGV4dCAhPT0gdW5kZWZpbmVkICYmIHRleHQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGV4dC5tYXRjaCgvXlxcLyhbXlxcc10rKVxccz8oLispPy8pO1xuICAgICAgICBsZXQgYXJncyA9IFtdO1xuICAgICAgICBsZXQgY29tbWFuZDtcbiAgICAgICAgaWYobWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBpZihtYXRjaFsxXSkge1xuICAgICAgICAgICAgY29tbWFuZCA9IG1hdGNoWzFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihtYXRjaFsyXSkge1xuICAgICAgICAgICAgYXJncyA9IG1hdGNoWzJdLnNwbGl0KCcgJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN0eC5zdGF0ZS5jb21tYW5kID0ge1xuICAgICAgICAgIHJhdzogdGV4dCxcbiAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgIGFyZ3MsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0KGN0eCk7XG4gIH0gY2F0Y2ggKGUpIHtcblxuICB9XG59O1xuXG5mdW5jdGlvbiBhZGROb3RpZmljYXRpb24oY3R4KSB7XG4gIGNvbnNvbGUubG9nKCdhZGROb3RpZmljYXRpb24nKVxuICBsZXQgY29tbWFuZCA9IGN0eC5zdGF0ZS5jb21tYW5kO1xuICBsZXQgY2hhdElkID0gY3R4LmNoYXQuaWQ7XG4gIGlmKGNvbW1hbmQuYXJncy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChsZXQgYW5vbWFseU5hbWUgb2YgY29tbWFuZC5hcmdzKSB7XG4gICAgICBpZighKGFub21hbHlOYW1lIGluIGJvdENvbmZpZy5zdWJzY3JpcHRpb25zKSkge1xuICAgICAgICBib3RDb25maWcuc3Vic2NyaXB0aW9uc1thbm9tYWx5TmFtZV0gPSBbXVxuICAgICAgfVxuICAgICAgaWYoYm90Q29uZmlnLnN1YnNjcmlwdGlvbnNbYW5vbWFseU5hbWVdLmluY2x1ZGVzKGNoYXRJZCkpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5yZXBseSgnWW91IGFyZSBhbHJlYWR5IHN1YnNjcmliZWQgb24gYWxlcnRzIGZyb20gYW5vbWFseSAnICsgY29tbWFuZC5hcmdzKVxuICAgICAgfSAgZWxzZSB7XG4gICAgICAgIGJvdENvbmZpZy5zdWJzY3JpcHRpb25zW2Fub21hbHlOYW1lXS5wdXNoKGNoYXRJZCk7XG4gICAgICAgIHNhdmVCb3RDb25maWcoYm90Q29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eC5yZXBseSgnWW91IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgc3Vic2NyaWJlZCBvbiBhbGVydHMgZnJvbSBhbm9tYWx5ICcgKyBjb21tYW5kLmFyZ3MpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGN0eC5yZXBseSgnWW91IHNob3VsZCB1c2Ugc3ludGF4OiBcXC9hZGROb3RpZmljYXRpb24gPGFub21hbHlfbmFtZT4nKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vdGlmaWNhdGlvbihjdHgpIHtcbiAgbGV0IGNvbW1hbmQgPSBjdHguc3RhdGUuY29tbWFuZDtcbiAgbGV0IGNoYXRJZCA9IGN0eC5jaGF0LmlkO1xuICBpZihjb21tYW5kLmFyZ3MubGVuZ3RoID4gMCkge1xuICAgIGZvciAobGV0IGFub21hbHlOYW1lIG9mIGNvbW1hbmQuYXJncykge1xuICAgICAgaWYoYW5vbWFseU5hbWUgaW4gYm90Q29uZmlnLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgYm90Q29uZmlnLnN1YnNjcmlwdGlvbnNbYW5vbWFseU5hbWVdID0gYm90Q29uZmlnLnN1YnNjcmlwdGlvbnNbYW5vbWFseU5hbWVdLmZpbHRlcihlbCA9PiBlbCAhPT0gY2hhdElkKTtcbiAgICAgICAgc2F2ZUJvdENvbmZpZyhib3RDb25maWcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4LnJlcGx5KCdZb3UgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSB1bnN1YnNjcmliZWQgZnJvbSBhbGVydHMgZnJvbSAnICsgY29tbWFuZC5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3R4LnJlcGx5KCdZb3Ugc2hvdWxkIHVzZSBzeW50YXg6IFxcL3JlbW92ZU5vdGlmaWNhdGlvbiA8YW5vbWFseV9uYW1lPicpO1xuICB9XG59XG5cbi8vIGNvbnN0IFRlbGVncmFmID0gcmVxdWlyZSgndGVsZWdyYWYnKTtcbmxldCBib3RDb25maWc6IEJvdENvbmZpZztcbmxldCBib3Q7XG5cbmZ1bmN0aW9uIHRnQm90SW5pdCgpIHtcbiAgdHJ5IHtcbiAgICAvLyBib3RDb25maWcgPSBsb2FkQm90Q29uZmlnKCk7XG4gICAgLy8gYm90ID0gbmV3IFRlbGVncmFmKGJvdENvbmZpZy50b2tlbik7XG5cbiAgICAvLyBib3QudXNlKGNvbW1hbmRBcmdzKTtcblxuICAgIC8vIGJvdC5jb21tYW5kKCdhZGROb3RpZmljYXRpb24nLCBhZGROb3RpZmljYXRpb24pO1xuICAgIC8vIGJvdC5jb21tYW5kKCdyZW1vdmVOb3RpZmljYXRpb24nLCByZW1vdmVOb3RpZmljYXRpb24pO1xuXG4gICAgLy8gYm90LnN0YXJ0UG9sbGluZygpO1xuICB9IGNhdGNoKGUpIHtcbiAgICAvLyBUT0RPOiBoYW5kbGUgZXhjZXB0aW9uXG4gIH1cbn1cblxuZXhwb3J0IHsgc2VuZE5vdGlmaWNhdGlvbiwgdGdCb3RJbml0IH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZpY2VzL25vdGlmaWNhdGlvbi50cyIsImltcG9ydCAqIGFzIGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgKiBhcyBib2R5UGFyc2VyIGZyb20gJ2JvZHktcGFyc2VyJztcblxuaW1wb3J0IHsgcm91dGVyIGFzIGFub21hbGllc1JvdXRlciB9IGZyb20gJy4vcm91dGVzL2Fub21hbGllcyc7XG5pbXBvcnQgeyByb3V0ZXIgYXMgc2VnbWVudHNSb3V0ZXIgfSBmcm9tICcuL3JvdXRlcy9zZWdtZW50cyc7XG5pbXBvcnQgeyByb3V0ZXIgYXMgYWxlcnRzUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXMvYWxlcnRzJztcbmltcG9ydCB7IHRnQm90SW5pdCB9IGZyb20gJy4vc2VydmljZXMvbm90aWZpY2F0aW9uJztcblxuY29uc3QgYXBwID0gZXhwcmVzcygpO1xuY29uc3QgUE9SVCA9IHByb2Nlc3MuZW52LkhBU1RJQ19QT1JUIHx8IDgwMDA7XG5cbmFwcC51c2UoYm9keVBhcnNlci5qc29uKCkpO1xuYXBwLnVzZShib2R5UGFyc2VyLnVybGVuY29kZWQoeyBleHRlbmRlZDogdHJ1ZSB9KSk7XG5cbmFwcC51c2UoZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJyk7XG4gIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLCAnR0VULCBQT1NULCBQVVQsIERFTEVURSwgUEFUQ0gsIE9QVElPTlMnKTtcbiAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsICdPcmlnaW4sIFgtUmVxdWVzdGVkLVdpdGgsIENvbnRlbnQtVHlwZSwgQWNjZXB0Jyk7XG4gIG5leHQoKTtcbn0pO1xuXG5hcHAudXNlKCcvYW5vbWFsaWVzJywgYW5vbWFsaWVzUm91dGVyKTtcbmFwcC51c2UoJy9zZWdtZW50cycsIHNlZ21lbnRzUm91dGVyKTtcbmFwcC51c2UoJy9hbGVydHMnLCBhbGVydHNSb3V0ZXIpO1xuYXBwLnVzZSgnLycsIChyZXEsIHJlcykgPT4gcmVzLnNlbmQoeyBzdGF0dXM6ICdPSycgfSkpO1xuXG5hcHAubGlzdGVuKFBPUlQsICgpID0+IHtcbiAgY29uc29sZS5sb2coYFNlcnZlciBpcyBydW5uaW5nIG9uIDoke1BPUlR9YClcbn0pO1xuXG50Z0JvdEluaXQoKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2luZGV4LnRzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdib2R5LXBhcnNlcicpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicmVxdWlyZSgnYm9keS1wYXJzZXInKVwiXG4vLyBtb2R1bGUgaWQgPSAxNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgKiBhcyBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuXG5pbXBvcnQge1xuICBEYXRhc291cmNlLFxuICBNZXRyaWMsXG4gIEFub21hbHksXG4gIHNhdmVBbm9tYWx5LFxuICBpbnNlcnRBbm9tYWx5LCByZW1vdmVBbm9tYWx5LCBsb2FkQW5vbWFseUJ5TmFtZSwgbG9hZEFub21hbHlCeUlkLCBnZXRBbm9tYWx5SWRCeU5hbWVcbn0gZnJvbSAnLi4vc2VydmljZXMvYW5vbWFseVR5cGUnO1xuaW1wb3J0IHsgcnVuTGVhcm5pbmcgfSBmcm9tICcuLi9zZXJ2aWNlcy9hbmFseXRpY3MnXG5pbXBvcnQgeyBzYXZlVGFyZ2V0cyB9IGZyb20gJy4uL3NlcnZpY2VzL21ldHJpY3MnO1xuXG5hc3luYyBmdW5jdGlvbiBzZW5kQW5vbWFseVR5cGVTdGF0dXMocmVxLCByZXMpIHtcbiAgbGV0IGlkID0gcmVxLnF1ZXJ5LmlkO1xuICBsZXQgbmFtZSA9IHJlcS5xdWVyeS5uYW1lO1xuICB0cnkge1xuICAgIGxldCBhbm9tYWx5OiBBbm9tYWx5O1xuICAgIGlmKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFub21hbHkgPSBsb2FkQW5vbWFseUJ5SWQoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbm9tYWx5ID0gbG9hZEFub21hbHlCeU5hbWUobmFtZSk7XG4gICAgfVxuICAgIGlmKGFub21hbHkgPT09IG51bGwpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5zZW5kKHtcbiAgICAgICAgY29kZTogNDA0LFxuICAgICAgICBtZXNzYWdlOiAnTm90IGZvdW5kJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmKGFub21hbHkuc3RhdHVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3RhdHVzIGZvciAnICsgbmFtZSk7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHsgc3RhdHVzOiBhbm9tYWx5LnN0YXR1cywgZXJyb3JNZXNzYWdlOiBhbm9tYWx5LmVycm9yIH0pO1xuICB9IGNhdGNoKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIC8vIFRPRE86IGJldHRlciBzZW5kIDQwNCB3aGVuIHdlIGtub3cgdGhhbiBpc25gdCBmb3VuZFxuICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHsgZXJyb3I6ICdDYW5gdCByZXR1cm4gYW55dGhpbmcnIH0pO1xuICB9XG5cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QW5vbWFseShyZXEsIHJlcykge1xuICB0cnkge1xuICAgIGxldCBpZCA9IHJlcS5xdWVyeS5pZDtcbiAgICBsZXQgbmFtZSA9IHJlcS5xdWVyeS5uYW1lO1xuXG4gICAgbGV0IGFub21hbHk6QW5vbWFseTtcbiAgICBpZihpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbm9tYWx5ID0gbG9hZEFub21hbHlCeUlkKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5vbWFseSA9IGxvYWRBbm9tYWx5QnlOYW1lKG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICAgIGlmKGFub21hbHkgPT09IG51bGwpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5zZW5kKHtcbiAgICAgICAgY29kZTogNDA0LFxuICAgICAgICBtZXNzYWdlOiAnTm90IGZvdW5kJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBuYW1lOiBhbm9tYWx5Lm5hbWUsXG4gICAgICBtZXRyaWM6IGFub21hbHkubWV0cmljLFxuICAgICAgc3RhdHVzOiBhbm9tYWx5LnN0YXR1c1xuICAgIH0pO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHBheWxvYWQpXG4gIH0gY2F0Y2goZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgLy8gVE9ETzogYmV0dGVyIHNlbmQgNDA0IHdoZW4gd2Uga25vdyB0aGFuIGlzbmB0IGZvdW5kXG4gICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoJ0NhbmB0IGdldCBhbnl0aGluZycpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFub21hbHkocmVxLCByZXMpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBtZXRyaWM6TWV0cmljID0ge1xuICAgICAgZGF0YXNvdXJjZTogcmVxLmJvZHkubWV0cmljLmRhdGFzb3VyY2UsXG4gICAgICB0YXJnZXRzOiBzYXZlVGFyZ2V0cyhyZXEuYm9keS5tZXRyaWMudGFyZ2V0cylcbiAgICB9O1xuXG4gICAgY29uc3QgYW5vbWFseTpBbm9tYWx5ID0ge1xuICAgICAgbmFtZTogcmVxLmJvZHkubmFtZSxcbiAgICAgIHBhbmVsVXJsOiByZXEuYm9keS5wYW5lbFVybCxcbiAgICAgIG1ldHJpYzogbWV0cmljLFxuICAgICAgZGF0YXNvdXJjZTogcmVxLmJvZHkuZGF0YXNvdXJjZSxcbiAgICAgIHN0YXR1czogJ2xlYXJuaW5nJyxcbiAgICAgIGxhc3RfcHJlZGljdGlvbl90aW1lOiAwLFxuICAgICAgbmV4dF9pZDogMFxuICAgIH07XG4gICAgbGV0IGFub21hbHlJZCA9IGluc2VydEFub21hbHkoYW5vbWFseSk7XG4gICAgaWYoYW5vbWFseUlkID09PSBudWxsKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMykuc2VuZCh7XG4gICAgICAgIGNvZGU6IDQwMyxcbiAgICAgICAgbWVzc2FnZTogJ0FscmVhZHkgZXhpc3RzJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7IGFub21hbHlfaWQ6IGFub21hbHlJZCB9KVxuICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHBheWxvYWQpO1xuXG4gICAgcnVuTGVhcm5pbmcoYW5vbWFseUlkKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgY29kZTogNTAwLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIGVycm9yJ1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZUFub21hbHkocmVxLCByZXMpIHtcbiAgdHJ5IHtcbiAgICBsZXQgaWQgPSByZXEucXVlcnkuaWQ7XG4gICAgbGV0IG5hbWUgPSByZXEucXVlcnkubmFtZTtcblxuICAgIGlmKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbW92ZUFub21hbHkoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVBbm9tYWx5KG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICAgIFxuICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHtcbiAgICAgIGNvZGU6IDIwMCxcbiAgICAgIG1lc3NhZ2U6ICdTdWNjZXNzJ1xuICAgIH0pO1xuICB9IGNhdGNoKGUpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuc2VuZCh7XG4gICAgICBjb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiAnSW50ZXJuYWwgZXJyb3InXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJvdXRlciA9IGV4cHJlc3MuUm91dGVyKCk7XG5cbnJvdXRlci5nZXQoJy9zdGF0dXMnLCBzZW5kQW5vbWFseVR5cGVTdGF0dXMpO1xucm91dGVyLmdldCgnLycsIGdldEFub21hbHkpO1xucm91dGVyLnBvc3QoJy8nLCBjcmVhdGVBbm9tYWx5KTtcbnJvdXRlci5kZWxldGUoJy8nLCBkZWxldGVBbm9tYWx5KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3JvdXRlcy9hbm9tYWxpZXMudHMiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKVwiXG4vLyBtb2R1bGUgaWQgPSAxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2V2ZW50LXN0cmVhbScpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicmVxdWlyZSgnZXZlbnQtc3RyZWFtJylcIlxuLy8gbW9kdWxlIGlkID0gMTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCB7XG4gIGdldExhYmVsZWRTZWdtZW50cyxcbiAgaW5zZXJ0U2VnbWVudHMsXG4gIHJlbW92ZVNlZ21lbnRzLFxufSBmcm9tICcuLi9zZXJ2aWNlcy9zZWdtZW50cyc7XG5pbXBvcnQge3J1bkxlYXJuaW5nfSBmcm9tICcuLi9zZXJ2aWNlcy9hbmFseXRpY3MnO1xuaW1wb3J0IHtBbm9tYWx5LCBBbm9tYWx5SWQsIGdldEFub21hbHlJZEJ5TmFtZSwgbG9hZEFub21hbHlCeUlkfSBmcm9tICcuLi9zZXJ2aWNlcy9hbm9tYWx5VHlwZSc7XG5cblxuYXN5bmMgZnVuY3Rpb24gc2VuZFNlZ21lbnRzKHJlcSwgcmVzKSB7XG4gIHRyeSB7XG4gICAgbGV0IGFub21hbHlJZDogQW5vbWFseUlkID0gcmVxLnF1ZXJ5LmFub21hbHlfaWQ7XG4gICAgbGV0IGFub21hbHk6QW5vbWFseSA9IGxvYWRBbm9tYWx5QnlJZChhbm9tYWx5SWQpO1xuICAgIGlmKGFub21hbHkgPT09IG51bGwpIHtcbiAgICAgIGFub21hbHlJZCA9IGdldEFub21hbHlJZEJ5TmFtZShhbm9tYWx5SWQpO1xuICAgIH1cblxuICAgIGxldCBsYXN0U2VnbWVudElkID0gcmVxLnF1ZXJ5Lmxhc3Rfc2VnbWVudDtcbiAgICBsZXQgdGltZUZyb20gPSByZXEucXVlcnkuZnJvbTtcbiAgICBsZXQgdGltZVRvID0gcmVxLnF1ZXJ5LnRvO1xuXG4gICAgbGV0IHNlZ21lbnRzID0gZ2V0TGFiZWxlZFNlZ21lbnRzKGFub21hbHlJZCk7XG5cbiAgICAvLyBJZCBmaWx0ZXJpbmdcbiAgICBpZihsYXN0U2VnbWVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlZ21lbnRzID0gc2VnbWVudHMuZmlsdGVyKGVsID0+IGVsLmlkID4gbGFzdFNlZ21lbnRJZCk7XG4gICAgfVxuXG4gICAgLy8gVGltZSBmaWx0ZXJpbmdcbiAgICBpZih0aW1lRnJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZWdtZW50cyA9IHNlZ21lbnRzLmZpbHRlcihlbCA9PiBlbC5maW5pc2ggPiB0aW1lRnJvbSk7XG4gICAgfVxuXG4gICAgaWYodGltZVRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlZ21lbnRzID0gc2VnbWVudHMuZmlsdGVyKGVsID0+IGVsLnN0YXJ0IDwgdGltZVRvKTtcbiAgICB9XG5cbiAgICBsZXQgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHNlZ21lbnRzXG4gICAgfSk7XG4gICAgcmVzLnN0YXR1cygyMDApLnNlbmQocGF5bG9hZCk7XG4gIH0gY2F0Y2goZSkge1xuICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHtcbiAgICAgIGNvZGU6IDUwMCxcbiAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBlcnJvcidcbiAgICB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVTZWdtZW50cyhyZXEsIHJlcykge1xuICB0cnkge1xuICAgIGxldCBzZWdtZW50c1VwZGF0ZSA9IHJlcS5ib2R5O1xuXG4gICAgbGV0IGFub21hbHlJZCA9IHNlZ21lbnRzVXBkYXRlLmFub21hbHlfaWQ7XG4gICAgbGV0IGFub21hbHlOYW1lID0gc2VnbWVudHNVcGRhdGUubmFtZTtcblxuICAgIGlmKGFub21hbHlJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbm9tYWx5SWQgPSBnZXRBbm9tYWx5SWRCeU5hbWUoYW5vbWFseU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgbGV0IGFkZGVkSWRzID0gaW5zZXJ0U2VnbWVudHMoYW5vbWFseUlkLCBzZWdtZW50c1VwZGF0ZS5hZGRlZF9zZWdtZW50cywgdHJ1ZSk7XG4gICAgcmVtb3ZlU2VnbWVudHMoYW5vbWFseUlkLCBzZWdtZW50c1VwZGF0ZS5yZW1vdmVkX3NlZ21lbnRzKTtcblxuICAgIGxldCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoeyBhZGRlZF9pZHM6IGFkZGVkSWRzIH0pO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHBheWxvYWQpO1xuXG4gICAgcnVuTGVhcm5pbmcoYW5vbWFseUlkKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgY29kZTogNTAwLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIGVycm9yJ1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuXG5yb3V0ZXIuZ2V0KCcvJywgc2VuZFNlZ21lbnRzKTtcbnJvdXRlci5wYXRjaCgnLycsIHVwZGF0ZVNlZ21lbnRzKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3JvdXRlcy9zZWdtZW50cy50cyIsImltcG9ydCAqIGFzIGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge0Fub21hbHlJZCwgZ2V0QW5vbWFseUlkQnlOYW1lLCBsb2FkQW5vbWFseUJ5SWR9IGZyb20gJy4uL3NlcnZpY2VzL2Fub21hbHlUeXBlJztcbmltcG9ydCB7IGdldEFsZXJ0c0Fub21hbGllcywgc2F2ZUFsZXJ0c0Fub21hbGllcyB9IGZyb20gJy4uL3NlcnZpY2VzL2FsZXJ0cyc7XG5cbmZ1bmN0aW9uIGdldEFsZXJ0KHJlcSwgcmVzKSB7XG4gIHRyeSB7XG4gICAgbGV0IGFub21hbHlJZDogQW5vbWFseUlkID0gcmVxLnF1ZXJ5LmFub21hbHlfaWQ7XG4gICAgbGV0IGFub21hbHkgPSBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkKVxuICAgIGlmIChhbm9tYWx5ID09IG51bGwpIHtcbiAgICAgIGFub21hbHlJZCA9IGdldEFub21hbHlJZEJ5TmFtZShhbm9tYWx5SWQudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgbGV0IGFsZXJ0c0Fub21hbGllcyA9IGdldEFsZXJ0c0Fub21hbGllcygpO1xuICAgIGxldCBwb3MgPSBhbGVydHNBbm9tYWxpZXMuaW5kZXhPZihhbm9tYWx5SWQpO1xuXG4gICAgbGV0IGVuYWJsZTogYm9vbGVhbiA9IChwb3MgIT09IC0xKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuc2VuZCh7XG4gICAgICBlbmFibGVcbiAgICB9KTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgY29kZTogNTAwLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIGVycm9yJ1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUFsZXJ0KHJlcSwgcmVzKSB7XG4gIHRyeSB7XG4gICAgbGV0IGFub21hbHlJZDogQW5vbWFseUlkID0gcmVxLmJvZHkuYW5vbWFseV9pZDtcbiAgICBsZXQgZW5hYmxlOiBib29sZWFuID0gcmVxLmJvZHkuZW5hYmxlO1xuXG4gICAgbGV0IGFub21hbHkgPSBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkKVxuICAgIGlmIChhbm9tYWx5ID09IG51bGwpIHtcbiAgICAgIGFub21hbHlJZCA9IGdldEFub21hbHlJZEJ5TmFtZShhbm9tYWx5SWQudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgbGV0IGFsZXJ0c0Fub21hbGllcyA9IGdldEFsZXJ0c0Fub21hbGllcygpO1xuICAgIGxldCBwb3M6IG51bWJlciA9IGFsZXJ0c0Fub21hbGllcy5pbmRleE9mKGFub21hbHlJZCk7XG4gICAgaWYoZW5hYmxlICYmIHBvcyA9PSAtMSkge1xuICAgICAgYWxlcnRzQW5vbWFsaWVzLnB1c2goYW5vbWFseUlkKTtcbiAgICAgIHNhdmVBbGVydHNBbm9tYWxpZXMoYWxlcnRzQW5vbWFsaWVzKTtcbiAgICB9IGVsc2UgaWYoIWVuYWJsZSAmJiBwb3MgPiAtMSkge1xuICAgICAgYWxlcnRzQW5vbWFsaWVzLnNwbGljZShwb3MsIDEpO1xuICAgICAgc2F2ZUFsZXJ0c0Fub21hbGllcyhhbGVydHNBbm9tYWxpZXMpO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKDIwMCkuc2VuZCh7XG4gICAgICBzdGF0dXM6ICdPaydcbiAgICB9KTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgY29kZTogNTAwLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIGVycm9yJ1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuXG5yb3V0ZXIuZ2V0KCcvJywgZ2V0QWxlcnQpO1xucm91dGVyLnBvc3QoJy8nLCBjaGFuZ2VBbGVydCk7XG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3JvdXRlcy9hbGVydHMudHMiLCJpbXBvcnQgeyBnZXRKc29uRGF0YVN5bmMsIHdyaXRlSnNvbkRhdGFTeW5jIH0gZnJvbSAnLi9qc29uJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBBbm9tYWx5SWQgfSBmcm9tICcuL2Fub21hbHlUeXBlJztcbmltcG9ydCB7IEFOT01BTElFU19QQVRIIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IHJ1blByZWRpY3QgfSBmcm9tICcuL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBzZW5kTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9ub3RpZmljYXRpb24nO1xuaW1wb3J0IHsgZ2V0TGFiZWxlZFNlZ21lbnRzIH0gZnJvbSAnLi9zZWdtZW50cyc7XG5cbmZ1bmN0aW9uIGdldEFsZXJ0c0Fub21hbGllcygpIDogQW5vbWFseUlkW10ge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGBhbGVydHNfYW5vbWFsaWVzLmpzb25gKTtcbiAgaWYoIWZzLmV4aXN0c1N5bmMoZmlsZW5hbWUpKSB7XG4gICAgc2F2ZUFsZXJ0c0Fub21hbGllcyhbXSk7XG4gIH1cbiAgcmV0dXJuIGdldEpzb25EYXRhU3luYyhwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGBhbGVydHNfYW5vbWFsaWVzLmpzb25gKSk7XG59XG5cbmZ1bmN0aW9uIHNhdmVBbGVydHNBbm9tYWxpZXMoYW5vbWFsaWVzOiBBbm9tYWx5SWRbXSkge1xuICByZXR1cm4gd3JpdGVKc29uRGF0YVN5bmMocGF0aC5qb2luKEFOT01BTElFU19QQVRILCBgYWxlcnRzX2Fub21hbGllcy5qc29uYCksIGFub21hbGllcyk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBbGVydHMoYW5vbWFseUlkKSB7XG4gIGxldCBzZWdtZW50cyA9IGdldExhYmVsZWRTZWdtZW50cyhhbm9tYWx5SWQpO1xuXG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIGNvbnN0IGFjdGl2ZUFsZXJ0ID0gYWN0aXZlQWxlcnRzLmhhcyhhbm9tYWx5SWQpO1xuICBsZXQgbmV3QWN0aXZlQWxlcnQgPSBmYWxzZTtcblxuICBpZihzZWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IGxhc3RTZWdtZW50ID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgaWYobGFzdFNlZ21lbnQuZmluaXNoID49IGN1cnJlbnRUaW1lIC0gYWxlcnRUaW1lb3V0KSB7XG4gICAgICBuZXdBY3RpdmVBbGVydCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYoIWFjdGl2ZUFsZXJ0ICYmIG5ld0FjdGl2ZUFsZXJ0KSB7XG4gICAgYWN0aXZlQWxlcnRzLmFkZChhbm9tYWx5SWQpO1xuICAgIHNlbmROb3RpZmljYXRpb24oYW5vbWFseUlkLCB0cnVlKTtcbiAgfSBlbHNlIGlmKGFjdGl2ZUFsZXJ0ICYmICFuZXdBY3RpdmVBbGVydCkge1xuICAgIGFjdGl2ZUFsZXJ0cy5kZWxldGUoYW5vbWFseUlkKTtcbiAgICBzZW5kTm90aWZpY2F0aW9uKGFub21hbHlJZCwgZmFsc2UpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFsZXJ0c1RpY2soKSB7XG4gIGxldCBhbGVydHNBbm9tYWxpZXMgPSBnZXRBbGVydHNBbm9tYWxpZXMoKTtcbiAgZm9yIChsZXQgYW5vbWFseUlkIG9mIGFsZXJ0c0Fub21hbGllcykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW5QcmVkaWN0KGFub21hbHlJZCk7XG4gICAgICBwcm9jZXNzQWxlcnRzKGFub21hbHlJZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cbiAgc2V0VGltZW91dChhbGVydHNUaWNrLCA1MDAwKTtcbn1cblxuY29uc3QgYWxlcnRUaW1lb3V0ID0gNjAwMDA7IC8vIG1zXG5jb25zdCBhY3RpdmVBbGVydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbnNldFRpbWVvdXQoYWxlcnRzVGljaywgNTAwMCk7XG5cblxuZXhwb3J0IHsgZ2V0QWxlcnRzQW5vbWFsaWVzLCBzYXZlQWxlcnRzQW5vbWFsaWVzIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZpY2VzL2FsZXJ0cy50cyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3NldCcpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3NldCcpXCJcbi8vIG1vZHVsZSBpZCA9IDIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgYWUxMDIxMjgyYzM3MjcyZWFmYzciLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicGF0aFwiIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJidWZmZXJcIiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2RlcGQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2V4cHJlc3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9jb25maWcudHMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9ieXRlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3N0YXR1c2VzL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvdHlwZS1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3BhcnNldXJsL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovLy8uL3NlcnZpY2VzL2Fub21hbHlUeXBlLnRzIiwid2VicGFjazovLy8uL3NlcnZpY2VzL2pzb24udHMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9leHByZXNzL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29udGVudC10eXBlL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaHR0cC1lcnJvcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zZXRwcm90b3R5cGVvZi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2JvZHktcGFyc2VyL2xpYi9yZWFkLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvb24tZmluaXNoZWQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9lbmNvZGV1cmwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9lc2NhcGUtaHRtbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2FycmF5LWZsYXR0ZW4vYXJyYXktZmxhdHRlbi5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJodHRwXCIiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy91dGlscy1tZXJnZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9nZXQtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwidXRpbFwiIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdGFibGVzL2NwOTM2Lmpzb24iLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZXRob2RzL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc2VuZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2aWNlcy9hbmFseXRpY3MudHMiLCJ3ZWJwYWNrOi8vLy4vc2VydmljZXMvc2VnbWVudHMudHMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy90aHJvdWdoL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvYm9keS1wYXJzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kZXBkL2xpYi9jb21wYXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9kZWJ1Zy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIm5ldFwiIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2RlcGQvbGliL2NvbXBhdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvbGliL2luZGV4LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcInN0cmluZ19kZWNvZGVyXCIiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvZ2JrLWFkZGVkLmpzb24iLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvY3A5NTAuanNvbiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3VucGlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvZm9ybWF0cy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJxdWVyeXN0cmluZ1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcInVybFwiIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZXhwcmVzcy9saWIvcm91dGVyL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZXhwcmVzcy9saWIvcm91dGVyL3JvdXRlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZXhwcmVzcy9saWIvcm91dGVyL2xheWVyLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZXhwcmVzcy9saWIvbWlkZGxld2FyZS9xdWVyeS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29udGVudC1kaXNwb3NpdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2V0YWcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9mcmVzaC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JhbmdlLXBhcnNlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3Byb3h5LWFkZHIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2aWNlcy9tZXRyaWNzLnRzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZHVwbGV4ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2V4cHJlc3MvbGliL2V4cHJlc3MuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kZXBkL2xpYi9jb21wYXQvY2FsbHNpdGUtdG9zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kZXBkL2xpYi9jb21wYXQvZXZlbnQtbGlzdGVuZXItY291bnQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9ib2R5LXBhcnNlci9saWIvdHlwZXMvanNvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3N0YXR1c2VzL2NvZGVzLmpzb24iLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ0dHlcIiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3Jhdy1ib2R5L2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2h0dHAtZXJyb3JzL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2RlcGQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvZGVwZC9saWIvY29tcGF0L2NhbGxzaXRlLXRvc3RyaW5nLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2RlcGQvbGliL2NvbXBhdC9ldmVudC1saXN0ZW5lci1jb3VudC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3Jhdy1ib2R5L25vZGVfbW9kdWxlcy9zZXRwcm90b3R5cGVvZi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvbGliL2JvbS1oYW5kbGluZy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy91dGYxNi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3V0ZjcuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWNvZGVjLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3Mvc2Jjcy1kYXRhLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3Mvc2Jjcy1kYXRhLWdlbmVyYXRlZC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2RiY3MtY29kZWMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9kYmNzLWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvc2hpZnRqaXMuanNvbiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9ldWNqcC5qc29uIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdGFibGVzL2diMTgwMzAtcmFuZ2VzLmpzb24iLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvY3A5NDkuanNvbiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9iaWc1LWFkZGVkLmpzb24iLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9zdHJlYW1zLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9saWIvZXh0ZW5kLW5vZGUuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9lZS1maXJzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ6bGliXCIiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZWRpYS10eXBlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21pbWUtZGIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9taW1lLWRiL2RiLmpzb24iLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9ib2R5LXBhcnNlci9saWIvdHlwZXMvcmF3LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvYm9keS1wYXJzZXIvbGliL3R5cGVzL3RleHQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9ib2R5LXBhcnNlci9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9tZXJnZS1kZXNjcmlwdG9ycy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2V4cHJlc3MvbGliL2FwcGxpY2F0aW9uLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZmluYWxoYW5kbGVyL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9leHByZXNzL2xpYi9taWRkbGV3YXJlL2luaXQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9leHByZXNzL2xpYi92aWV3LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZXhwcmVzcy9saWIiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kZXN0cm95L2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWltZS9taW1lLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWltZS90eXBlcy5qc29uIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZm9yd2FyZGVkL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvaXBhZGRyLmpzL2xpYi9pcGFkZHIuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vbW9kdWxlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZXhwcmVzcy9saWIvcmVxdWVzdC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2FjY2VwdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9uZWdvdGlhdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbmVnb3RpYXRvci9saWIvY2hhcnNldC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL25lZ290aWF0b3IvbGliL2VuY29kaW5nLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbmVnb3RpYXRvci9saWIvbGFuZ3VhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9uZWdvdGlhdG9yL2xpYi9tZWRpYVR5cGUuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9leHByZXNzL2xpYi9yZXNwb25zZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nvb2tpZS1zaWduYXR1cmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb29raWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy92YXJ5L2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc2VydmUtc3RhdGljL2luZGV4LmpzIiwid2VicGFjazovLy8uL3JvdXRlcy9hbm9tYWxpZXMudHMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vanNvbi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUtbW9kdWxlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnByb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW52b2tlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJjaGlsZF9wcm9jZXNzXCIiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9ldmVudC1zdHJlYW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9mcm9tL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvbWFwLXN0cmVhbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3BhdXNlLXN0cmVhbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NwbGl0L2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWNvbWJpbmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL3JvdXRlcy9zZWdtZW50cy50cyIsIndlYnBhY2s6Ly8vLi9yb3V0ZXMvYWxlcnRzLnRzIiwid2VicGFjazovLy8uL3NlcnZpY2VzL2FsZXJ0cy50cyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zZXQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc2V0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LW1ldGhvZHMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zZXQub2YuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsb0RBQTRDO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQSwwQ0FBa0M7QUFDbEM7QUFDQTtBQUNBLFlBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2Q0FBcUM7QUFDckM7QUFDQTs7OztBQUlBO0FBQ0Esc0RBQThDO0FBQzlDO0FBQ0E7QUFDQSxvQ0FBNEI7QUFDNUIscUNBQTZCO0FBQzdCLHlDQUFpQzs7QUFFakMsK0NBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhDQUFzQztBQUN0QztBQUNBO0FBQ0EscUNBQTZCO0FBQzdCLHFDQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsYUFBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxhQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5QkFBaUIsOEJBQThCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQUk7QUFDSjs7QUFFQSw0REFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBLGNBQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBa0IsY0FBYztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QjtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUM7O0FBRXZDO0FBQ0EsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsV0FBVztBQUM1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsa0JBQWtCO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsaUNBQWlDO0FBQzVELGNBQWMsb0JBQW9CO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFD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QTtBQUNBLHFDQUFxQztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7OztBQ25RQSw0Q0FBNEMsYUFBYTs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7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WSxPQUFPO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEIsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FB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RUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVixjQUFjLFNBQVM7QUFDdkIsY0FBYyxTQUFTO0FBQ3ZCLGNBQWMsU0FBUztBQUN2QixjQUFjLFNBQVM7QUFDdkI7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FB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O0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUN2SkEsZ0M7Ozs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDOUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxREFBcUQ7QUFDckQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBa0Q7O0FBRWxEO0FBQ0EsaUVBQWlFLEVBQUU7O0FBRW5FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEseUVBQXlFO0FBQ3pFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDbkpBLDJDOzs7Ozs7QUNBQSxvNUI7Ozs7OztBQ0FBLDJxZTs7Ozs7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixzQkFBc0I7QUFDdkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsU0FBUztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7QUMzTEE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkJBQTJCLGdCQUFnQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7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QTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHNCQUFzQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDLFNBQVM7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDcnBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFlBQVksTUFBTTtBQUNsQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLG9CQUFvQjtBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QjtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLCtCQUErQjtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7O0FDdk5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDcExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUM5Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0RBQXNELFlBQVk7O0FBRWxFO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsRUFBRTtBQUN4QywrQ0FBK0MsRUFBRTs7QUFFakQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EscUJBQXFCLE1BQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsTUFBTTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQsaUJBQWlCLElBQUksYUFBYSxFQUFFLEVBQUUsSUFBSSxVQUFVLElBQUksb0JBQW9CLEVBQUU7O0FBRS9IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4RUFBOEU7O0FBRTlFO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsZUFBZTtBQUMxQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsZUFBZTtBQUMxQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDNWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFF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Q0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxzQkFBc0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUN0VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7Ozs7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQSxxRUFBcUU7QUFDckUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7QUNYRDtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ0hBO0FBQ0E7Ozs7Ozs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDSkE7QUFDQSxVQUFVO0FBQ1Y7Ozs7Ozs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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QUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsVUFBVTtBQUNWLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNILENBQUM7Ozs7Ozs7O0FDL0dEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFD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Q0EsNkJBQTZCO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkNBQTJDLG1CQUFtQjtBQUM5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDdlBBLGdDOzs7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsdUJBQXVCO0FBQ2xDLFdBQVcsU0FBUztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDN1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUM7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsaUJBQWlCLGdCQUFnQjtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUM7O0FBRXZDO0FBQ0EsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsV0FBVztBQUM1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxrQkFBa0I7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsaUNBQWlDO0FBQzVELGNBQWMsb0JBQW9CO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7Ozs7Ozs7QUN2Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDckJBLDRDQUE0QyxhQUFhOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQ2RBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FDbERBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsb0JBQW9CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDckJBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWEsbUNBQW1DO0FBQ2hELGFBQWEsbUNBQW1DO0FBQ2hEOztBQUVBLGFBQWEsbUNBQW1DO0FBQ2hEOztBQUVBLGFBQWEsb0JBQW9CO0FBQ2pDLGFBQWEsb0JBQW9CO0FBQ2pDLGFBQWEsb0JBQW9COztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQ3ZLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1TkFBdU4saUVBQWlFLEVBQUU7QUFDMVIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNB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QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEZBQThGOztBQUU5Rjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUN0TkE7QUFDQTtBQUNB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OztBQUVBO0FBQ0E7Ozs7Ozs7O0FDN0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixhQUFhLE9BQU87QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7Ozs7Ozs7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixZQUFZLElBQUk7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsU0FBUztB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QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUMzRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsU0FBUztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsU0FBUztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsUUFBUTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFNBQVM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLFNBQVM7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsU0FBUztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFNBQVM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFFBQVE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLHlCQUF5QixHQUFHOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSxFQUFFO0FBQ25FO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOzs7Ozs7OztBQy9tQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQ3JCQTtBQUNB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OEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDN09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7OztBQzNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCOztBQUVsQixpQkFBaUIscUJBQXFCO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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Q0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRGQUE0RjtBQUM1Rjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtB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QSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwREFBMEQsb0JBQW9CO0FBQzlFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7OztBQzdSRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ1hBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsc0JBQXNCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7Ozs7Ozs7QUNwRUE7QUFDQTs7QUFFQTs7Ozs7OztBQ0hBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQyxxQkFBcUI7QUFDdEQ7QUFDQSxpQ0FBaUMsU0FBUyxFQUFFO0FBQzVDLENBQUMsWUFBWTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsU0FBUyxxQkFBcUI7QUFDM0QsaUNBQWlDLGFBQWE7QUFDOUM7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBOzs7Ozs7OztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsVUFBVSxFQUFFO0FBQzFFLEtBQUs7QUFDTDtBQUNBLDhEQUE4RCxTQUFTLEVBQUU7QUFDekUsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFQUFFOzs7Ozs7OztBQ25CSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7Ozs7OztBQ1hILDBDOzs7Ozs7QUNBQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ05BOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQixXQUFXO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGdDQUFnQyxlQUFlOztBQUUvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUMsaUJBQWlCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQ2xVQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7Ozs7O0FDbkVBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyw4QkFBOEI7QUFDbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7O0FDNUlBO0FBQ0E7Ozs7Ozs7O0FDREE7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7Ozs7OztBQzdEQTs7QUFFQTs7QUFFQTtBQUNBO0FB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REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wiLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0ZnVuY3Rpb24gaG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcclxuIFx0XHR2YXIgY2h1bmsgPSByZXF1aXJlKFwiLi9cIiArIFwiXCIgKyBjaHVua0lkICsgXCIuXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNcIik7XHJcbiBcdFx0aG90QWRkVXBkYXRlQ2h1bmsoY2h1bmsuaWQsIGNodW5rLm1vZHVsZXMpO1xyXG4gXHR9XHJcbiBcdFxyXG4gXHRmdW5jdGlvbiBob3REb3dubG9hZE1hbmlmZXN0KCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXHJcbiBcdFx0dHJ5IHtcclxuIFx0XHRcdHZhciB1cGRhdGUgPSByZXF1aXJlKFwiLi9cIiArIFwiXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNvblwiKTtcclxuIFx0XHR9IGNhdGNoKGUpIHtcclxuIFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuIFx0XHR9XHJcbiBcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cGRhdGUpO1xyXG4gXHR9XHJcbiBcdFxyXG4gXHRmdW5jdGlvbiBob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCkgeyAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcclxuIFx0XHRkZWxldGUgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xyXG4gXHR9XHJcblxuIFx0XHJcbiBcdFxyXG4gXHR2YXIgaG90QXBwbHlPblVwZGF0ZSA9IHRydWU7XHJcbiBcdHZhciBob3RDdXJyZW50SGFzaCA9IFwiYWUxMDIxMjgyYzM3MjcyZWFmYzdcIjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gXHR2YXIgaG90UmVxdWVzdFRpbWVvdXQgPSAxMDAwMDtcclxuIFx0dmFyIGhvdEN1cnJlbnRNb2R1bGVEYXRhID0ge307XHJcbiBcdHZhciBob3RDdXJyZW50Q2hpbGRNb2R1bGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcclxuIFx0dmFyIGhvdEN1cnJlbnRQYXJlbnRzID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcclxuIFx0dmFyIGhvdEN1cnJlbnRQYXJlbnRzVGVtcCA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXHJcbiBcdFxyXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVSZXF1aXJlKG1vZHVsZUlkKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcclxuIFx0XHR2YXIgbWUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcclxuIFx0XHRpZighbWUpIHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fO1xyXG4gXHRcdHZhciBmbiA9IGZ1bmN0aW9uKHJlcXVlc3QpIHtcclxuIFx0XHRcdGlmKG1lLmhvdC5hY3RpdmUpIHtcclxuIFx0XHRcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XSkge1xyXG4gXHRcdFx0XHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKSA8IDApXHJcbiBcdFx0XHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdLnBhcmVudHMucHVzaChtb2R1bGVJZCk7XHJcbiBcdFx0XHRcdH0gZWxzZSB7XHJcbiBcdFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xyXG4gXHRcdFx0XHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHJlcXVlc3Q7XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdFx0aWYobWUuY2hpbGRyZW4uaW5kZXhPZihyZXF1ZXN0KSA8IDApXHJcbiBcdFx0XHRcdFx0bWUuY2hpbGRyZW4ucHVzaChyZXF1ZXN0KTtcclxuIFx0XHRcdH0gZWxzZSB7XHJcbiBcdFx0XHRcdGNvbnNvbGUud2FybihcIltITVJdIHVuZXhwZWN0ZWQgcmVxdWlyZShcIiArIHJlcXVlc3QgKyBcIikgZnJvbSBkaXNwb3NlZCBtb2R1bGUgXCIgKyBtb2R1bGVJZCk7XHJcbiBcdFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gW107XHJcbiBcdFx0XHR9XHJcbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhyZXF1ZXN0KTtcclxuIFx0XHR9O1xyXG4gXHRcdHZhciBPYmplY3RGYWN0b3J5ID0gZnVuY3Rpb24gT2JqZWN0RmFjdG9yeShuYW1lKSB7XHJcbiBcdFx0XHRyZXR1cm4ge1xyXG4gXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXHJcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcbiBcdFx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcbiBcdFx0XHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX19bbmFtZV07XHJcbiBcdFx0XHRcdH0sXHJcbiBcdFx0XHRcdHNldDogZnVuY3Rpb24odmFsdWUpIHtcclxuIFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fW25hbWVdID0gdmFsdWU7XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdH07XHJcbiBcdFx0fTtcclxuIFx0XHRmb3IodmFyIG5hbWUgaW4gX193ZWJwYWNrX3JlcXVpcmVfXykge1xyXG4gXHRcdFx0aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9fd2VicGFja19yZXF1aXJlX18sIG5hbWUpICYmIG5hbWUgIT09IFwiZVwiKSB7XHJcbiBcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgbmFtZSwgT2JqZWN0RmFjdG9yeShuYW1lKSk7XHJcbiBcdFx0XHR9XHJcbiBcdFx0fVxyXG4gXHRcdGZuLmUgPSBmdW5jdGlvbihjaHVua0lkKSB7XHJcbiBcdFx0XHRpZihob3RTdGF0dXMgPT09IFwicmVhZHlcIilcclxuIFx0XHRcdFx0aG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcclxuIFx0XHRcdGhvdENodW5rc0xvYWRpbmcrKztcclxuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmUoY2h1bmtJZCkudGhlbihmaW5pc2hDaHVua0xvYWRpbmcsIGZ1bmN0aW9uKGVycikge1xyXG4gXHRcdFx0XHRmaW5pc2hDaHVua0xvYWRpbmcoKTtcclxuIFx0XHRcdFx0dGhyb3cgZXJyO1xyXG4gXHRcdFx0fSk7XHJcbiBcdFxyXG4gXHRcdFx0ZnVuY3Rpb24gZmluaXNoQ2h1bmtMb2FkaW5nKCkge1xyXG4gXHRcdFx0XHRob3RDaHVua3NMb2FkaW5nLS07XHJcbiBcdFx0XHRcdGlmKGhvdFN0YXR1cyA9PT0gXCJwcmVwYXJlXCIpIHtcclxuIFx0XHRcdFx0XHRpZighaG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdKSB7XHJcbiBcdFx0XHRcdFx0XHRob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKTtcclxuIFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0aWYoaG90Q2h1bmtzTG9hZGluZyA9PT0gMCAmJiBob3RXYWl0aW5nRmlsZXMgPT09IDApIHtcclxuIFx0XHRcdFx0XHRcdGhvdFVwZGF0ZURvd25sb2FkZWQoKTtcclxuIFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdH1cclxuIFx0XHR9O1xyXG4gXHRcdHJldHVybiBmbjtcclxuIFx0fVxyXG4gXHRcclxuIFx0ZnVuY3Rpb24gaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcclxuIFx0XHR2YXIgaG90ID0ge1xyXG4gXHRcdFx0Ly8gcHJpdmF0ZSBzdHVmZlxyXG4gXHRcdFx0X2FjY2VwdGVkRGVwZW5kZW5jaWVzOiB7fSxcclxuIFx0XHRcdF9kZWNsaW5lZERlcGVuZGVuY2llczoge30sXHJcbiBcdFx0XHRfc2VsZkFjY2VwdGVkOiBmYWxzZSxcclxuIFx0XHRcdF9zZWxmRGVjbGluZWQ6IGZhbHNlLFxyXG4gXHRcdFx0X2Rpc3Bvc2VIYW5kbGVyczogW10sXHJcbiBcdFx0XHRfbWFpbjogaG90Q3VycmVudENoaWxkTW9kdWxlICE9PSBtb2R1bGVJZCxcclxuIFx0XHJcbiBcdFx0XHQvLyBNb2R1bGUgQVBJXHJcbiBcdFx0XHRhY3RpdmU6IHRydWUsXHJcbiBcdFx0XHRhY2NlcHQ6IGZ1bmN0aW9uKGRlcCwgY2FsbGJhY2spIHtcclxuIFx0XHRcdFx0aWYodHlwZW9mIGRlcCA9PT0gXCJ1bmRlZmluZWRcIilcclxuIFx0XHRcdFx0XHRob3QuX3NlbGZBY2NlcHRlZCA9IHRydWU7XHJcbiBcdFx0XHRcdGVsc2UgaWYodHlwZW9mIGRlcCA9PT0gXCJmdW5jdGlvblwiKVxyXG4gXHRcdFx0XHRcdGhvdC5fc2VsZkFjY2VwdGVkID0gZGVwO1xyXG4gXHRcdFx0XHRlbHNlIGlmKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXHJcbiBcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKylcclxuIFx0XHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XHJcbiBcdFx0XHRcdGVsc2VcclxuIFx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xyXG4gXHRcdFx0fSxcclxuIFx0XHRcdGRlY2xpbmU6IGZ1bmN0aW9uKGRlcCkge1xyXG4gXHRcdFx0XHRpZih0eXBlb2YgZGVwID09PSBcInVuZGVmaW5lZFwiKVxyXG4gXHRcdFx0XHRcdGhvdC5fc2VsZkRlY2xpbmVkID0gdHJ1ZTtcclxuIFx0XHRcdFx0ZWxzZSBpZih0eXBlb2YgZGVwID09PSBcIm9iamVjdFwiKVxyXG4gXHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXAubGVuZ3RoOyBpKyspXHJcbiBcdFx0XHRcdFx0XHRob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW2RlcFtpXV0gPSB0cnVlO1xyXG4gXHRcdFx0XHRlbHNlXHJcbiBcdFx0XHRcdFx0aG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBdID0gdHJ1ZTtcclxuIFx0XHRcdH0sXHJcbiBcdFx0XHRkaXNwb3NlOiBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gXHRcdFx0XHRob3QuX2Rpc3Bvc2VIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTtcclxuIFx0XHRcdH0sXHJcbiBcdFx0XHRhZGREaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuIFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XHJcbiBcdFx0XHR9LFxyXG4gXHRcdFx0cmVtb3ZlRGlzcG9zZUhhbmRsZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiBcdFx0XHRcdHZhciBpZHggPSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5pbmRleE9mKGNhbGxiYWNrKTtcclxuIFx0XHRcdFx0aWYoaWR4ID49IDApIGhvdC5fZGlzcG9zZUhhbmRsZXJzLnNwbGljZShpZHgsIDEpO1xyXG4gXHRcdFx0fSxcclxuIFx0XHJcbiBcdFx0XHQvLyBNYW5hZ2VtZW50IEFQSVxyXG4gXHRcdFx0Y2hlY2s6IGhvdENoZWNrLFxyXG4gXHRcdFx0YXBwbHk6IGhvdEFwcGx5LFxyXG4gXHRcdFx0c3RhdHVzOiBmdW5jdGlvbihsKSB7XHJcbiBcdFx0XHRcdGlmKCFsKSByZXR1cm4gaG90U3RhdHVzO1xyXG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xyXG4gXHRcdFx0fSxcclxuIFx0XHRcdGFkZFN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uKGwpIHtcclxuIFx0XHRcdFx0aG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTtcclxuIFx0XHRcdH0sXHJcbiBcdFx0XHRyZW1vdmVTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbihsKSB7XHJcbiBcdFx0XHRcdHZhciBpZHggPSBob3RTdGF0dXNIYW5kbGVycy5pbmRleE9mKGwpO1xyXG4gXHRcdFx0XHRpZihpZHggPj0gMCkgaG90U3RhdHVzSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XHJcbiBcdFx0XHR9LFxyXG4gXHRcclxuIFx0XHRcdC8vaW5oZXJpdCBmcm9tIHByZXZpb3VzIGRpc3Bvc2UgY2FsbFxyXG4gXHRcdFx0ZGF0YTogaG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdXHJcbiBcdFx0fTtcclxuIFx0XHRob3RDdXJyZW50Q2hpbGRNb2R1bGUgPSB1bmRlZmluZWQ7XHJcbiBcdFx0cmV0dXJuIGhvdDtcclxuIFx0fVxyXG4gXHRcclxuIFx0dmFyIGhvdFN0YXR1c0hhbmRsZXJzID0gW107XHJcbiBcdHZhciBob3RTdGF0dXMgPSBcImlkbGVcIjtcclxuIFx0XHJcbiBcdGZ1bmN0aW9uIGhvdFNldFN0YXR1cyhuZXdTdGF0dXMpIHtcclxuIFx0XHRob3RTdGF0dXMgPSBuZXdTdGF0dXM7XHJcbiBcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGhvdFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxyXG4gXHRcdFx0aG90U3RhdHVzSGFuZGxlcnNbaV0uY2FsbChudWxsLCBuZXdTdGF0dXMpO1xyXG4gXHR9XHJcbiBcdFxyXG4gXHQvLyB3aGlsZSBkb3dubG9hZGluZ1xyXG4gXHR2YXIgaG90V2FpdGluZ0ZpbGVzID0gMDtcclxuIFx0dmFyIGhvdENodW5rc0xvYWRpbmcgPSAwO1xyXG4gXHR2YXIgaG90V2FpdGluZ0ZpbGVzTWFwID0ge307XHJcbiBcdHZhciBob3RSZXF1ZXN0ZWRGaWxlc01hcCA9IHt9O1xyXG4gXHR2YXIgaG90QXZhaWxhYmxlRmlsZXNNYXAgPSB7fTtcclxuIFx0dmFyIGhvdERlZmVycmVkO1xyXG4gXHRcclxuIFx0Ly8gVGhlIHVwZGF0ZSBpbmZvXHJcbiBcdHZhciBob3RVcGRhdGUsIGhvdFVwZGF0ZU5ld0hhc2g7XHJcbiBcdFxyXG4gXHRmdW5jdGlvbiB0b01vZHVsZUlkKGlkKSB7XHJcbiBcdFx0dmFyIGlzTnVtYmVyID0gKCtpZCkgKyBcIlwiID09PSBpZDtcclxuIFx0XHRyZXR1cm4gaXNOdW1iZXIgPyAraWQgOiBpZDtcclxuIFx0fVxyXG4gXHRcclxuIFx0ZnVuY3Rpb24gaG90Q2hlY2soYXBwbHkpIHtcclxuIFx0XHRpZihob3RTdGF0dXMgIT09IFwiaWRsZVwiKSB0aHJvdyBuZXcgRXJyb3IoXCJjaGVjaygpIGlzIG9ubHkgYWxsb3dlZCBpbiBpZGxlIHN0YXR1c1wiKTtcclxuIFx0XHRob3RBcHBseU9uVXBkYXRlID0gYXBwbHk7XHJcbiBcdFx0aG90U2V0U3RhdHVzKFwiY2hlY2tcIik7XHJcbiBcdFx0cmV0dXJuIGhvdERvd25sb2FkTWFuaWZlc3QoaG90UmVxdWVzdFRpbWVvdXQpLnRoZW4oZnVuY3Rpb24odXBkYXRlKSB7XHJcbiBcdFx0XHRpZighdXBkYXRlKSB7XHJcbiBcdFx0XHRcdGhvdFNldFN0YXR1cyhcImlkbGVcIik7XHJcbiBcdFx0XHRcdHJldHVybiBudWxsO1xyXG4gXHRcdFx0fVxyXG4gXHRcdFx0aG90UmVxdWVzdGVkRmlsZXNNYXAgPSB7fTtcclxuIFx0XHRcdGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xyXG4gXHRcdFx0aG90QXZhaWxhYmxlRmlsZXNNYXAgPSB1cGRhdGUuYztcclxuIFx0XHRcdGhvdFVwZGF0ZU5ld0hhc2ggPSB1cGRhdGUuaDtcclxuIFx0XHJcbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJwcmVwYXJlXCIpO1xyXG4gXHRcdFx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuIFx0XHRcdFx0aG90RGVmZXJyZWQgPSB7XHJcbiBcdFx0XHRcdFx0cmVzb2x2ZTogcmVzb2x2ZSxcclxuIFx0XHRcdFx0XHRyZWplY3Q6IHJlamVjdFxyXG4gXHRcdFx0XHR9O1xyXG4gXHRcdFx0fSk7XHJcbiBcdFx0XHRob3RVcGRhdGUgPSB7fTtcclxuIFx0XHRcdHZhciBjaHVua0lkID0gMDtcclxuIFx0XHRcdHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sb25lLWJsb2Nrc1xyXG4gXHRcdFx0XHQvKmdsb2JhbHMgY2h1bmtJZCAqL1xyXG4gXHRcdFx0XHRob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKTtcclxuIFx0XHRcdH1cclxuIFx0XHRcdGlmKGhvdFN0YXR1cyA9PT0gXCJwcmVwYXJlXCIgJiYgaG90Q2h1bmtzTG9hZGluZyA9PT0gMCAmJiBob3RXYWl0aW5nRmlsZXMgPT09IDApIHtcclxuIFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xyXG4gXHRcdFx0fVxyXG4gXHRcdFx0cmV0dXJuIHByb21pc2U7XHJcbiBcdFx0fSk7XHJcbiBcdH1cclxuIFx0XHJcbiBcdGZ1bmN0aW9uIGhvdEFkZFVwZGF0ZUNodW5rKGNodW5rSWQsIG1vcmVNb2R1bGVzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcclxuIFx0XHRpZighaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gfHwgIWhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdKVxyXG4gXHRcdFx0cmV0dXJuO1xyXG4gXHRcdGhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdID0gZmFsc2U7XHJcbiBcdFx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xyXG4gXHRcdFx0aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcclxuIFx0XHRcdFx0aG90VXBkYXRlW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcclxuIFx0XHRcdH1cclxuIFx0XHR9XHJcbiBcdFx0aWYoLS1ob3RXYWl0aW5nRmlsZXMgPT09IDAgJiYgaG90Q2h1bmtzTG9hZGluZyA9PT0gMCkge1xyXG4gXHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xyXG4gXHRcdH1cclxuIFx0fVxyXG4gXHRcclxuIFx0ZnVuY3Rpb24gaG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCkge1xyXG4gXHRcdGlmKCFob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSkge1xyXG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdID0gdHJ1ZTtcclxuIFx0XHR9IGVsc2Uge1xyXG4gXHRcdFx0aG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0gPSB0cnVlO1xyXG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzKys7XHJcbiBcdFx0XHRob3REb3dubG9hZFVwZGF0ZUNodW5rKGNodW5rSWQpO1xyXG4gXHRcdH1cclxuIFx0fVxyXG4gXHRcclxuIFx0ZnVuY3Rpb24gaG90VXBkYXRlRG93bmxvYWRlZCgpIHtcclxuIFx0XHRob3RTZXRTdGF0dXMoXCJyZWFkeVwiKTtcclxuIFx0XHR2YXIgZGVmZXJyZWQgPSBob3REZWZlcnJlZDtcclxuIFx0XHRob3REZWZlcnJlZCA9IG51bGw7XHJcbiBcdFx0aWYoIWRlZmVycmVkKSByZXR1cm47XHJcbiBcdFx0aWYoaG90QXBwbHlPblVwZGF0ZSkge1xyXG4gXHRcdFx0Ly8gV3JhcCBkZWZlcnJlZCBvYmplY3QgaW4gUHJvbWlzZSB0byBtYXJrIGl0IGFzIGEgd2VsbC1oYW5kbGVkIFByb21pc2UgdG9cclxuIFx0XHRcdC8vIGF2b2lkIHRyaWdnZXJpbmcgdW5jYXVnaHQgZXhjZXB0aW9uIHdhcm5pbmcgaW4gQ2hyb21lLlxyXG4gXHRcdFx0Ly8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ2NTY2NlxyXG4gXHRcdFx0UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHtcclxuIFx0XHRcdFx0cmV0dXJuIGhvdEFwcGx5KGhvdEFwcGx5T25VcGRhdGUpO1xyXG4gXHRcdFx0fSkudGhlbihcclxuIFx0XHRcdFx0ZnVuY3Rpb24ocmVzdWx0KSB7XHJcbiBcdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpO1xyXG4gXHRcdFx0XHR9LFxyXG4gXHRcdFx0XHRmdW5jdGlvbihlcnIpIHtcclxuIFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3QoZXJyKTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0KTtcclxuIFx0XHR9IGVsc2Uge1xyXG4gXHRcdFx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xyXG4gXHRcdFx0Zm9yKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcclxuIFx0XHRcdFx0aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhvdFVwZGF0ZSwgaWQpKSB7XHJcbiBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzLnB1c2godG9Nb2R1bGVJZChpZCkpO1xyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHR9XHJcbiBcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7XHJcbiBcdFx0fVxyXG4gXHR9XHJcbiBcdFxyXG4gXHRmdW5jdGlvbiBob3RBcHBseShvcHRpb25zKSB7XHJcbiBcdFx0aWYoaG90U3RhdHVzICE9PSBcInJlYWR5XCIpIHRocm93IG5ldyBFcnJvcihcImFwcGx5KCkgaXMgb25seSBhbGxvd2VkIGluIHJlYWR5IHN0YXR1c1wiKTtcclxuIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuIFx0XHJcbiBcdFx0dmFyIGNiO1xyXG4gXHRcdHZhciBpO1xyXG4gXHRcdHZhciBqO1xyXG4gXHRcdHZhciBtb2R1bGU7XHJcbiBcdFx0dmFyIG1vZHVsZUlkO1xyXG4gXHRcclxuIFx0XHRmdW5jdGlvbiBnZXRBZmZlY3RlZFN0dWZmKHVwZGF0ZU1vZHVsZUlkKSB7XHJcbiBcdFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW3VwZGF0ZU1vZHVsZUlkXTtcclxuIFx0XHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xyXG4gXHRcclxuIFx0XHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpLm1hcChmdW5jdGlvbihpZCkge1xyXG4gXHRcdFx0XHRyZXR1cm4ge1xyXG4gXHRcdFx0XHRcdGNoYWluOiBbaWRdLFxyXG4gXHRcdFx0XHRcdGlkOiBpZFxyXG4gXHRcdFx0XHR9O1xyXG4gXHRcdFx0fSk7XHJcbiBcdFx0XHR3aGlsZShxdWV1ZS5sZW5ndGggPiAwKSB7XHJcbiBcdFx0XHRcdHZhciBxdWV1ZUl0ZW0gPSBxdWV1ZS5wb3AoKTtcclxuIFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWVJdGVtLmlkO1xyXG4gXHRcdFx0XHR2YXIgY2hhaW4gPSBxdWV1ZUl0ZW0uY2hhaW47XHJcbiBcdFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xyXG4gXHRcdFx0XHRpZighbW9kdWxlIHx8IG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZClcclxuIFx0XHRcdFx0XHRjb250aW51ZTtcclxuIFx0XHRcdFx0aWYobW9kdWxlLmhvdC5fc2VsZkRlY2xpbmVkKSB7XHJcbiBcdFx0XHRcdFx0cmV0dXJuIHtcclxuIFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1kZWNsaW5lZFwiLFxyXG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxyXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXHJcbiBcdFx0XHRcdFx0fTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRpZihtb2R1bGUuaG90Ll9tYWluKSB7XHJcbiBcdFx0XHRcdFx0cmV0dXJuIHtcclxuIFx0XHRcdFx0XHRcdHR5cGU6IFwidW5hY2NlcHRlZFwiLFxyXG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxyXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXHJcbiBcdFx0XHRcdFx0fTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbW9kdWxlLnBhcmVudHMubGVuZ3RoOyBpKyspIHtcclxuIFx0XHRcdFx0XHR2YXIgcGFyZW50SWQgPSBtb2R1bGUucGFyZW50c1tpXTtcclxuIFx0XHRcdFx0XHR2YXIgcGFyZW50ID0gaW5zdGFsbGVkTW9kdWxlc1twYXJlbnRJZF07XHJcbiBcdFx0XHRcdFx0aWYoIXBhcmVudCkgY29udGludWU7XHJcbiBcdFx0XHRcdFx0aWYocGFyZW50LmhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XHJcbiBcdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG4gXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRlY2xpbmVkXCIsXHJcbiBcdFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXHJcbiBcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcclxuIFx0XHRcdFx0XHRcdFx0cGFyZW50SWQ6IHBhcmVudElkXHJcbiBcdFx0XHRcdFx0XHR9O1xyXG4gXHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0XHRpZihvdXRkYXRlZE1vZHVsZXMuaW5kZXhPZihwYXJlbnRJZCkgPj0gMCkgY29udGludWU7XHJcbiBcdFx0XHRcdFx0aWYocGFyZW50LmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XHJcbiBcdFx0XHRcdFx0XHRpZighb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdKVxyXG4gXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0gPSBbXTtcclxuIFx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSwgW21vZHVsZUlkXSk7XHJcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuIFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXTtcclxuIFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaChwYXJlbnRJZCk7XHJcbiBcdFx0XHRcdFx0cXVldWUucHVzaCh7XHJcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4uY29uY2F0KFtwYXJlbnRJZF0pLFxyXG4gXHRcdFx0XHRcdFx0aWQ6IHBhcmVudElkXHJcbiBcdFx0XHRcdFx0fSk7XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdH1cclxuIFx0XHJcbiBcdFx0XHRyZXR1cm4ge1xyXG4gXHRcdFx0XHR0eXBlOiBcImFjY2VwdGVkXCIsXHJcbiBcdFx0XHRcdG1vZHVsZUlkOiB1cGRhdGVNb2R1bGVJZCxcclxuIFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzOiBvdXRkYXRlZE1vZHVsZXMsXHJcbiBcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzOiBvdXRkYXRlZERlcGVuZGVuY2llc1xyXG4gXHRcdFx0fTtcclxuIFx0XHR9XHJcbiBcdFxyXG4gXHRcdGZ1bmN0aW9uIGFkZEFsbFRvU2V0KGEsIGIpIHtcclxuIFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XHJcbiBcdFx0XHRcdHZhciBpdGVtID0gYltpXTtcclxuIFx0XHRcdFx0aWYoYS5pbmRleE9mKGl0ZW0pIDwgMClcclxuIFx0XHRcdFx0XHRhLnB1c2goaXRlbSk7XHJcbiBcdFx0XHR9XHJcbiBcdFx0fVxyXG4gXHRcclxuIFx0XHQvLyBhdCBiZWdpbiBhbGwgdXBkYXRlcyBtb2R1bGVzIGFyZSBvdXRkYXRlZFxyXG4gXHRcdC8vIHRoZSBcIm91dGRhdGVkXCIgc3RhdHVzIGNhbiBwcm9wYWdhdGUgdG8gcGFyZW50cyBpZiB0aGV5IGRvbid0IGFjY2VwdCB0aGUgY2hpbGRyZW5cclxuIFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcclxuIFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW107XHJcbiBcdFx0dmFyIGFwcGxpZWRVcGRhdGUgPSB7fTtcclxuIFx0XHJcbiBcdFx0dmFyIHdhcm5VbmV4cGVjdGVkUmVxdWlyZSA9IGZ1bmN0aW9uIHdhcm5VbmV4cGVjdGVkUmVxdWlyZSgpIHtcclxuIFx0XHRcdGNvbnNvbGUud2FybihcIltITVJdIHVuZXhwZWN0ZWQgcmVxdWlyZShcIiArIHJlc3VsdC5tb2R1bGVJZCArIFwiKSB0byBkaXNwb3NlZCBtb2R1bGVcIik7XHJcbiBcdFx0fTtcclxuIFx0XHJcbiBcdFx0Zm9yKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcclxuIFx0XHRcdGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChob3RVcGRhdGUsIGlkKSkge1xyXG4gXHRcdFx0XHRtb2R1bGVJZCA9IHRvTW9kdWxlSWQoaWQpO1xyXG4gXHRcdFx0XHR2YXIgcmVzdWx0O1xyXG4gXHRcdFx0XHRpZihob3RVcGRhdGVbaWRdKSB7XHJcbiBcdFx0XHRcdFx0cmVzdWx0ID0gZ2V0QWZmZWN0ZWRTdHVmZihtb2R1bGVJZCk7XHJcbiBcdFx0XHRcdH0gZWxzZSB7XHJcbiBcdFx0XHRcdFx0cmVzdWx0ID0ge1xyXG4gXHRcdFx0XHRcdFx0dHlwZTogXCJkaXNwb3NlZFwiLFxyXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IGlkXHJcbiBcdFx0XHRcdFx0fTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0XHR2YXIgYWJvcnRFcnJvciA9IGZhbHNlO1xyXG4gXHRcdFx0XHR2YXIgZG9BcHBseSA9IGZhbHNlO1xyXG4gXHRcdFx0XHR2YXIgZG9EaXNwb3NlID0gZmFsc2U7XHJcbiBcdFx0XHRcdHZhciBjaGFpbkluZm8gPSBcIlwiO1xyXG4gXHRcdFx0XHRpZihyZXN1bHQuY2hhaW4pIHtcclxuIFx0XHRcdFx0XHRjaGFpbkluZm8gPSBcIlxcblVwZGF0ZSBwcm9wYWdhdGlvbjogXCIgKyByZXN1bHQuY2hhaW4uam9pbihcIiAtPiBcIik7XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdFx0c3dpdGNoKHJlc3VsdC50eXBlKSB7XHJcbiBcdFx0XHRcdFx0Y2FzZSBcInNlbGYtZGVjbGluZWRcIjpcclxuIFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMub25EZWNsaW5lZClcclxuIFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XHJcbiBcdFx0XHRcdFx0XHRpZighb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcclxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIkFib3J0ZWQgYmVjYXVzZSBvZiBzZWxmIGRlY2xpbmU6IFwiICsgcmVzdWx0Lm1vZHVsZUlkICsgY2hhaW5JbmZvKTtcclxuIFx0XHRcdFx0XHRcdGJyZWFrO1xyXG4gXHRcdFx0XHRcdGNhc2UgXCJkZWNsaW5lZFwiOlxyXG4gXHRcdFx0XHRcdFx0aWYob3B0aW9ucy5vbkRlY2xpbmVkKVxyXG4gXHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcclxuIFx0XHRcdFx0XHRcdGlmKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxyXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFwiQWJvcnRlZCBiZWNhdXNlIG9mIGRlY2xpbmVkIGRlcGVuZGVuY3k6IFwiICsgcmVzdWx0Lm1vZHVsZUlkICsgXCIgaW4gXCIgKyByZXN1bHQucGFyZW50SWQgKyBjaGFpbkluZm8pO1xyXG4gXHRcdFx0XHRcdFx0YnJlYWs7XHJcbiBcdFx0XHRcdFx0Y2FzZSBcInVuYWNjZXB0ZWRcIjpcclxuIFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMub25VbmFjY2VwdGVkKVxyXG4gXHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uVW5hY2NlcHRlZChyZXN1bHQpO1xyXG4gXHRcdFx0XHRcdFx0aWYoIW9wdGlvbnMuaWdub3JlVW5hY2NlcHRlZClcclxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcIkFib3J0ZWQgYmVjYXVzZSBcIiArIG1vZHVsZUlkICsgXCIgaXMgbm90IGFjY2VwdGVkXCIgKyBjaGFpbkluZm8pO1xyXG4gXHRcdFx0XHRcdFx0YnJlYWs7XHJcbiBcdFx0XHRcdFx0Y2FzZSBcImFjY2VwdGVkXCI6XHJcbiBcdFx0XHRcdFx0XHRpZihvcHRpb25zLm9uQWNjZXB0ZWQpXHJcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25BY2NlcHRlZChyZXN1bHQpO1xyXG4gXHRcdFx0XHRcdFx0ZG9BcHBseSA9IHRydWU7XHJcbiBcdFx0XHRcdFx0XHRicmVhaztcclxuIFx0XHRcdFx0XHRjYXNlIFwiZGlzcG9zZWRcIjpcclxuIFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMub25EaXNwb3NlZClcclxuIFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkRpc3Bvc2VkKHJlc3VsdCk7XHJcbiBcdFx0XHRcdFx0XHRkb0Rpc3Bvc2UgPSB0cnVlO1xyXG4gXHRcdFx0XHRcdFx0YnJlYWs7XHJcbiBcdFx0XHRcdFx0ZGVmYXVsdDpcclxuIFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhjZXB0aW9uIHR5cGUgXCIgKyByZXN1bHQudHlwZSk7XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdFx0aWYoYWJvcnRFcnJvcikge1xyXG4gXHRcdFx0XHRcdGhvdFNldFN0YXR1cyhcImFib3J0XCIpO1xyXG4gXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChhYm9ydEVycm9yKTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRpZihkb0FwcGx5KSB7XHJcbiBcdFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSBob3RVcGRhdGVbbW9kdWxlSWRdO1xyXG4gXHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgcmVzdWx0Lm91dGRhdGVkTW9kdWxlcyk7XHJcbiBcdFx0XHRcdFx0Zm9yKG1vZHVsZUlkIGluIHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcykge1xyXG4gXHRcdFx0XHRcdFx0aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpKSB7XHJcbiBcdFx0XHRcdFx0XHRcdGlmKCFvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pXHJcbiBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdID0gW107XHJcbiBcdFx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSwgcmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSk7XHJcbiBcdFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHRcdGlmKGRvRGlzcG9zZSkge1xyXG4gXHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgW3Jlc3VsdC5tb2R1bGVJZF0pO1xyXG4gXHRcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdID0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlO1xyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHR9XHJcbiBcdFx0fVxyXG4gXHRcclxuIFx0XHQvLyBTdG9yZSBzZWxmIGFjY2VwdGVkIG91dGRhdGVkIG1vZHVsZXMgdG8gcmVxdWlyZSB0aGVtIGxhdGVyIGJ5IHRoZSBtb2R1bGUgc3lzdGVtXHJcbiBcdFx0dmFyIG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcyA9IFtdO1xyXG4gXHRcdGZvcihpID0gMDsgaSA8IG91dGRhdGVkTW9kdWxlcy5sZW5ndGg7IGkrKykge1xyXG4gXHRcdFx0bW9kdWxlSWQgPSBvdXRkYXRlZE1vZHVsZXNbaV07XHJcbiBcdFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSAmJiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZClcclxuIFx0XHRcdFx0b3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLnB1c2goe1xyXG4gXHRcdFx0XHRcdG1vZHVsZTogbW9kdWxlSWQsXHJcbiBcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyOiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZFxyXG4gXHRcdFx0XHR9KTtcclxuIFx0XHR9XHJcbiBcdFxyXG4gXHRcdC8vIE5vdyBpbiBcImRpc3Bvc2VcIiBwaGFzZVxyXG4gXHRcdGhvdFNldFN0YXR1cyhcImRpc3Bvc2VcIik7XHJcbiBcdFx0T2JqZWN0LmtleXMoaG90QXZhaWxhYmxlRmlsZXNNYXApLmZvckVhY2goZnVuY3Rpb24oY2h1bmtJZCkge1xyXG4gXHRcdFx0aWYoaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gPT09IGZhbHNlKSB7XHJcbiBcdFx0XHRcdGhvdERpc3Bvc2VDaHVuayhjaHVua0lkKTtcclxuIFx0XHRcdH1cclxuIFx0XHR9KTtcclxuIFx0XHJcbiBcdFx0dmFyIGlkeDtcclxuIFx0XHR2YXIgcXVldWUgPSBvdXRkYXRlZE1vZHVsZXMuc2xpY2UoKTtcclxuIFx0XHR3aGlsZShxdWV1ZS5sZW5ndGggPiAwKSB7XHJcbiBcdFx0XHRtb2R1bGVJZCA9IHF1ZXVlLnBvcCgpO1xyXG4gXHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XHJcbiBcdFx0XHRpZighbW9kdWxlKSBjb250aW51ZTtcclxuIFx0XHJcbiBcdFx0XHR2YXIgZGF0YSA9IHt9O1xyXG4gXHRcclxuIFx0XHRcdC8vIENhbGwgZGlzcG9zZSBoYW5kbGVyc1xyXG4gXHRcdFx0dmFyIGRpc3Bvc2VIYW5kbGVycyA9IG1vZHVsZS5ob3QuX2Rpc3Bvc2VIYW5kbGVycztcclxuIFx0XHRcdGZvcihqID0gMDsgaiA8IGRpc3Bvc2VIYW5kbGVycy5sZW5ndGg7IGorKykge1xyXG4gXHRcdFx0XHRjYiA9IGRpc3Bvc2VIYW5kbGVyc1tqXTtcclxuIFx0XHRcdFx0Y2IoZGF0YSk7XHJcbiBcdFx0XHR9XHJcbiBcdFx0XHRob3RDdXJyZW50TW9kdWxlRGF0YVttb2R1bGVJZF0gPSBkYXRhO1xyXG4gXHRcclxuIFx0XHRcdC8vIGRpc2FibGUgbW9kdWxlICh0aGlzIGRpc2FibGVzIHJlcXVpcmVzIGZyb20gdGhpcyBtb2R1bGUpXHJcbiBcdFx0XHRtb2R1bGUuaG90LmFjdGl2ZSA9IGZhbHNlO1xyXG4gXHRcclxuIFx0XHRcdC8vIHJlbW92ZSBtb2R1bGUgZnJvbSBjYWNoZVxyXG4gXHRcdFx0ZGVsZXRlIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xyXG4gXHRcclxuIFx0XHRcdC8vIHdoZW4gZGlzcG9zaW5nIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCBkaXNwb3NlIGhhbmRsZXJcclxuIFx0XHRcdGRlbGV0ZSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XHJcbiBcdFxyXG4gXHRcdFx0Ly8gcmVtb3ZlIFwicGFyZW50c1wiIHJlZmVyZW5jZXMgZnJvbSBhbGwgY2hpbGRyZW5cclxuIFx0XHRcdGZvcihqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xyXG4gXHRcdFx0XHR2YXIgY2hpbGQgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZS5jaGlsZHJlbltqXV07XHJcbiBcdFx0XHRcdGlmKCFjaGlsZCkgY29udGludWU7XHJcbiBcdFx0XHRcdGlkeCA9IGNoaWxkLnBhcmVudHMuaW5kZXhPZihtb2R1bGVJZCk7XHJcbiBcdFx0XHRcdGlmKGlkeCA+PSAwKSB7XHJcbiBcdFx0XHRcdFx0Y2hpbGQucGFyZW50cy5zcGxpY2UoaWR4LCAxKTtcclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0fVxyXG4gXHRcdH1cclxuIFx0XHJcbiBcdFx0Ly8gcmVtb3ZlIG91dGRhdGVkIGRlcGVuZGVuY3kgZnJvbSBtb2R1bGUgY2hpbGRyZW5cclxuIFx0XHR2YXIgZGVwZW5kZW5jeTtcclxuIFx0XHR2YXIgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXM7XHJcbiBcdFx0Zm9yKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XHJcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3V0ZGF0ZWREZXBlbmRlbmNpZXMsIG1vZHVsZUlkKSkge1xyXG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcclxuIFx0XHRcdFx0aWYobW9kdWxlKSB7XHJcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XHJcbiBcdFx0XHRcdFx0Zm9yKGogPSAwOyBqIDwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMubGVuZ3RoOyBqKyspIHtcclxuIFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcclxuIFx0XHRcdFx0XHRcdGlkeCA9IG1vZHVsZS5jaGlsZHJlbi5pbmRleE9mKGRlcGVuZGVuY3kpO1xyXG4gXHRcdFx0XHRcdFx0aWYoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcclxuIFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdH1cclxuIFx0XHRcdH1cclxuIFx0XHR9XHJcbiBcdFxyXG4gXHRcdC8vIE5vdCBpbiBcImFwcGx5XCIgcGhhc2VcclxuIFx0XHRob3RTZXRTdGF0dXMoXCJhcHBseVwiKTtcclxuIFx0XHJcbiBcdFx0aG90Q3VycmVudEhhc2ggPSBob3RVcGRhdGVOZXdIYXNoO1xyXG4gXHRcclxuIFx0XHQvLyBpbnNlcnQgbmV3IGNvZGVcclxuIFx0XHRmb3IobW9kdWxlSWQgaW4gYXBwbGllZFVwZGF0ZSkge1xyXG4gXHRcdFx0aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFwcGxpZWRVcGRhdGUsIG1vZHVsZUlkKSkge1xyXG4gXHRcdFx0XHRtb2R1bGVzW21vZHVsZUlkXSA9IGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdO1xyXG4gXHRcdFx0fVxyXG4gXHRcdH1cclxuIFx0XHJcbiBcdFx0Ly8gY2FsbCBhY2NlcHQgaGFuZGxlcnNcclxuIFx0XHR2YXIgZXJyb3IgPSBudWxsO1xyXG4gXHRcdGZvcihtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xyXG4gXHRcdFx0aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZCkpIHtcclxuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XHJcbiBcdFx0XHRcdGlmKG1vZHVsZSkge1xyXG4gXHRcdFx0XHRcdG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzID0gb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdO1xyXG4gXHRcdFx0XHRcdHZhciBjYWxsYmFja3MgPSBbXTtcclxuIFx0XHRcdFx0XHRmb3IoaSA9IDA7IGkgPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xyXG4gXHRcdFx0XHRcdFx0ZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2ldO1xyXG4gXHRcdFx0XHRcdFx0Y2IgPSBtb2R1bGUuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBlbmRlbmN5XTtcclxuIFx0XHRcdFx0XHRcdGlmKGNiKSB7XHJcbiBcdFx0XHRcdFx0XHRcdGlmKGNhbGxiYWNrcy5pbmRleE9mKGNiKSA+PSAwKSBjb250aW51ZTtcclxuIFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tzLnB1c2goY2IpO1xyXG4gXHRcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0XHRmb3IoaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcclxuIFx0XHRcdFx0XHRcdGNiID0gY2FsbGJhY2tzW2ldO1xyXG4gXHRcdFx0XHRcdFx0dHJ5IHtcclxuIFx0XHRcdFx0XHRcdFx0Y2IobW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMpO1xyXG4gXHRcdFx0XHRcdFx0fSBjYXRjaChlcnIpIHtcclxuIFx0XHRcdFx0XHRcdFx0aWYob3B0aW9ucy5vbkVycm9yZWQpIHtcclxuIFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XHJcbiBcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImFjY2VwdC1lcnJvcmVkXCIsXHJcbiBcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXHJcbiBcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2ldLFxyXG4gXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxyXG4gXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG4gXHRcdFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdFx0XHRcdGlmKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcclxuIFx0XHRcdFx0XHRcdFx0XHRpZighZXJyb3IpXHJcbiBcdFx0XHRcdFx0XHRcdFx0XHRlcnJvciA9IGVycjtcclxuIFx0XHRcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRcdH1cclxuIFx0XHRcdFx0fVxyXG4gXHRcdFx0fVxyXG4gXHRcdH1cclxuIFx0XHJcbiBcdFx0Ly8gTG9hZCBzZWxmIGFjY2VwdGVkIG1vZHVsZXNcclxuIFx0XHRmb3IoaSA9IDA7IGkgPCBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcclxuIFx0XHRcdHZhciBpdGVtID0gb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzW2ldO1xyXG4gXHRcdFx0bW9kdWxlSWQgPSBpdGVtLm1vZHVsZTtcclxuIFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcclxuIFx0XHRcdHRyeSB7XHJcbiBcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpO1xyXG4gXHRcdFx0fSBjYXRjaChlcnIpIHtcclxuIFx0XHRcdFx0aWYodHlwZW9mIGl0ZW0uZXJyb3JIYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcclxuIFx0XHRcdFx0XHR0cnkge1xyXG4gXHRcdFx0XHRcdFx0aXRlbS5lcnJvckhhbmRsZXIoZXJyKTtcclxuIFx0XHRcdFx0XHR9IGNhdGNoKGVycjIpIHtcclxuIFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMub25FcnJvcmVkKSB7XHJcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcclxuIFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yLWhhbmRsZXItZXJyb3JlZFwiLFxyXG4gXHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcclxuIFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyMixcclxuIFx0XHRcdFx0XHRcdFx0XHRvcmdpbmFsRXJyb3I6IGVyciwgLy8gVE9ETyByZW1vdmUgaW4gd2VicGFjayA0XHJcbiBcdFx0XHRcdFx0XHRcdFx0b3JpZ2luYWxFcnJvcjogZXJyXHJcbiBcdFx0XHRcdFx0XHRcdH0pO1xyXG4gXHRcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRcdFx0aWYoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xyXG4gXHRcdFx0XHRcdFx0XHRpZighZXJyb3IpXHJcbiBcdFx0XHRcdFx0XHRcdFx0ZXJyb3IgPSBlcnIyO1xyXG4gXHRcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRcdFx0aWYoIWVycm9yKVxyXG4gXHRcdFx0XHRcdFx0XHRlcnJvciA9IGVycjtcclxuIFx0XHRcdFx0XHR9XHJcbiBcdFx0XHRcdH0gZWxzZSB7XHJcbiBcdFx0XHRcdFx0aWYob3B0aW9ucy5vbkVycm9yZWQpIHtcclxuIFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcclxuIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvcmVkXCIsXHJcbiBcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcclxuIFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxyXG4gXHRcdFx0XHRcdFx0fSk7XHJcbiBcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHRcdGlmKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcclxuIFx0XHRcdFx0XHRcdGlmKCFlcnJvcilcclxuIFx0XHRcdFx0XHRcdFx0ZXJyb3IgPSBlcnI7XHJcbiBcdFx0XHRcdFx0fVxyXG4gXHRcdFx0XHR9XHJcbiBcdFx0XHR9XHJcbiBcdFx0fVxyXG4gXHRcclxuIFx0XHQvLyBoYW5kbGUgZXJyb3JzIGluIGFjY2VwdCBoYW5kbGVycyBhbmQgc2VsZiBhY2NlcHRlZCBtb2R1bGUgbG9hZFxyXG4gXHRcdGlmKGVycm9yKSB7XHJcbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJmYWlsXCIpO1xyXG4gXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuIFx0XHR9XHJcbiBcdFxyXG4gXHRcdGhvdFNldFN0YXR1cyhcImlkbGVcIik7XHJcbiBcdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcclxuIFx0XHRcdHJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTtcclxuIFx0XHR9KTtcclxuIFx0fVxyXG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9LFxuIFx0XHRcdGhvdDogaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSxcbiBcdFx0XHRwYXJlbnRzOiAoaG90Q3VycmVudFBhcmVudHNUZW1wID0gaG90Q3VycmVudFBhcmVudHMsIGhvdEN1cnJlbnRQYXJlbnRzID0gW10sIGhvdEN1cnJlbnRQYXJlbnRzVGVtcCksXG4gXHRcdFx0Y2hpbGRyZW46IFtdXG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIGhvdENyZWF0ZVJlcXVpcmUobW9kdWxlSWQpKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gX193ZWJwYWNrX2hhc2hfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5oID0gZnVuY3Rpb24oKSB7IHJldHVybiBob3RDdXJyZW50SGFzaDsgfTtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gaG90Q3JlYXRlUmVxdWlyZSgxMTgpKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDExOCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgYWUxMDIxMjgyYzM3MjcyZWFmYzciLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicGF0aFwiXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJ1ZmZlclwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImJ1ZmZlclwiXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwic3RyZWFtXCJcbi8vIG1vZHVsZSBpZCA9IDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNS42JyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qc1xuLy8gbW9kdWxlIGlkID0gNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGRlcGRcbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTcgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgY2FsbFNpdGVUb1N0cmluZyA9IHJlcXVpcmUoJy4vbGliL2NvbXBhdCcpLmNhbGxTaXRlVG9TdHJpbmdcbnZhciBldmVudExpc3RlbmVyQ291bnQgPSByZXF1aXJlKCcuL2xpYi9jb21wYXQnKS5ldmVudExpc3RlbmVyQ291bnRcbnZhciByZWxhdGl2ZSA9IHJlcXVpcmUoJ3BhdGgnKS5yZWxhdGl2ZVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZGVwZFxuXG4vKipcbiAqIEdldCB0aGUgcGF0aCB0byBiYXNlIGZpbGVzIG9uLlxuICovXG5cbnZhciBiYXNlUGF0aCA9IHByb2Nlc3MuY3dkKClcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgbmFtZXNwYWNlIGlzIGNvbnRhaW5lZCBpbiB0aGUgc3RyaW5nLlxuICovXG5cbmZ1bmN0aW9uIGNvbnRhaW5zTmFtZXNwYWNlIChzdHIsIG5hbWVzcGFjZSkge1xuICB2YXIgdmFscyA9IHN0ci5zcGxpdCgvWyAsXSsvKVxuICB2YXIgbnMgPSBTdHJpbmcobmFtZXNwYWNlKS50b0xvd2VyQ2FzZSgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHZhbCA9IHZhbHNbaV1cblxuICAgIC8vIG5hbWVzcGFjZSBjb250YWluZWRcbiAgICBpZiAodmFsICYmICh2YWwgPT09ICcqJyB8fCB2YWwudG9Mb3dlckNhc2UoKSA9PT0gbnMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIGRlc2NyaXB0b3IgdG8gYWNjZXNzb3IgZGVzY3JpcHRvci5cbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0RGF0YURlc2NyaXB0b3JUb0FjY2Vzc29yIChvYmosIHByb3AsIG1lc3NhZ2UpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcClcbiAgdmFyIHZhbHVlID0gZGVzY3JpcHRvci52YWx1ZVxuXG4gIGRlc2NyaXB0b3IuZ2V0ID0gZnVuY3Rpb24gZ2V0dGVyICgpIHsgcmV0dXJuIHZhbHVlIH1cblxuICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSkge1xuICAgIGRlc2NyaXB0b3Iuc2V0ID0gZnVuY3Rpb24gc2V0dGVyICh2YWwpIHsgcmV0dXJuICh2YWx1ZSA9IHZhbCkgfVxuICB9XG5cbiAgZGVsZXRlIGRlc2NyaXB0b3IudmFsdWVcbiAgZGVsZXRlIGRlc2NyaXB0b3Iud3JpdGFibGVcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCBkZXNjcmlwdG9yKVxuXG4gIHJldHVybiBkZXNjcmlwdG9yXG59XG5cbi8qKlxuICogQ3JlYXRlIGFyZ3VtZW50cyBzdHJpbmcgdG8ga2VlcCBhcml0eS5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVBcmd1bWVudHNTdHJpbmcgKGFyaXR5KSB7XG4gIHZhciBzdHIgPSAnJ1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJpdHk7IGkrKykge1xuICAgIHN0ciArPSAnLCBhcmcnICsgaVxuICB9XG5cbiAgcmV0dXJuIHN0ci5zdWJzdHIoMilcbn1cblxuLyoqXG4gKiBDcmVhdGUgc3RhY2sgc3RyaW5nIGZyb20gc3RhY2suXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlU3RhY2tTdHJpbmcgKHN0YWNrKSB7XG4gIHZhciBzdHIgPSB0aGlzLm5hbWUgKyAnOiAnICsgdGhpcy5uYW1lc3BhY2VcblxuICBpZiAodGhpcy5tZXNzYWdlKSB7XG4gICAgc3RyICs9ICcgZGVwcmVjYXRlZCAnICsgdGhpcy5tZXNzYWdlXG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgc3RyICs9ICdcXG4gICAgYXQgJyArIGNhbGxTaXRlVG9TdHJpbmcoc3RhY2tbaV0pXG4gIH1cblxuICByZXR1cm4gc3RyXG59XG5cbi8qKlxuICogQ3JlYXRlIGRlcHJlY2F0ZSBmb3IgbmFtZXNwYWNlIGluIGNhbGxlci5cbiAqL1xuXG5mdW5jdGlvbiBkZXBkIChuYW1lc3BhY2UpIHtcbiAgaWYgKCFuYW1lc3BhY2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBuYW1lc3BhY2UgaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgdmFyIHN0YWNrID0gZ2V0U3RhY2soKVxuICB2YXIgc2l0ZSA9IGNhbGxTaXRlTG9jYXRpb24oc3RhY2tbMV0pXG4gIHZhciBmaWxlID0gc2l0ZVswXVxuXG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZSAobWVzc2FnZSkge1xuICAgIC8vIGNhbGwgdG8gc2VsZiBhcyBsb2dcbiAgICBsb2cuY2FsbChkZXByZWNhdGUsIG1lc3NhZ2UpXG4gIH1cblxuICBkZXByZWNhdGUuX2ZpbGUgPSBmaWxlXG4gIGRlcHJlY2F0ZS5faWdub3JlZCA9IGlzaWdub3JlZChuYW1lc3BhY2UpXG4gIGRlcHJlY2F0ZS5fbmFtZXNwYWNlID0gbmFtZXNwYWNlXG4gIGRlcHJlY2F0ZS5fdHJhY2VkID0gaXN0cmFjZWQobmFtZXNwYWNlKVxuICBkZXByZWNhdGUuX3dhcm5lZCA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICBkZXByZWNhdGUuZnVuY3Rpb24gPSB3cmFwZnVuY3Rpb25cbiAgZGVwcmVjYXRlLnByb3BlcnR5ID0gd3JhcHByb3BlcnR5XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBuYW1lc3BhY2UgaXMgaWdub3JlZC5cbiAqL1xuXG5mdW5jdGlvbiBpc2lnbm9yZWQgKG5hbWVzcGFjZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogdGVzdGVkIGluIGEgY2hpbGQgcHJvY2Vzc3MgKi9cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbikge1xuICAgIC8vIC0tbm8tZGVwcmVjYXRpb24gc3VwcG9ydFxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB2YXIgc3RyID0gcHJvY2Vzcy5lbnYuTk9fREVQUkVDQVRJT04gfHwgJydcblxuICAvLyBuYW1lc3BhY2UgaWdub3JlZFxuICByZXR1cm4gY29udGFpbnNOYW1lc3BhY2Uoc3RyLCBuYW1lc3BhY2UpXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIG5hbWVzcGFjZSBpcyB0cmFjZWQuXG4gKi9cblxuZnVuY3Rpb24gaXN0cmFjZWQgKG5hbWVzcGFjZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogdGVzdGVkIGluIGEgY2hpbGQgcHJvY2Vzc3MgKi9cbiAgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgIC8vIC0tdHJhY2UtZGVwcmVjYXRpb24gc3VwcG9ydFxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB2YXIgc3RyID0gcHJvY2Vzcy5lbnYuVFJBQ0VfREVQUkVDQVRJT04gfHwgJydcblxuICAvLyBuYW1lc3BhY2UgdHJhY2VkXG4gIHJldHVybiBjb250YWluc05hbWVzcGFjZShzdHIsIG5hbWVzcGFjZSlcbn1cblxuLyoqXG4gKiBEaXNwbGF5IGRlcHJlY2F0aW9uIG1lc3NhZ2UuXG4gKi9cblxuZnVuY3Rpb24gbG9nIChtZXNzYWdlLCBzaXRlKSB7XG4gIHZhciBoYXNsaXN0ZW5lcnMgPSBldmVudExpc3RlbmVyQ291bnQocHJvY2VzcywgJ2RlcHJlY2F0aW9uJykgIT09IDBcblxuICAvLyBhYm9ydCBlYXJseSBpZiBubyBkZXN0aW5hdGlvblxuICBpZiAoIWhhc2xpc3RlbmVycyAmJiB0aGlzLl9pZ25vcmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY2FsbGVyXG4gIHZhciBjYWxsRmlsZVxuICB2YXIgY2FsbFNpdGVcbiAgdmFyIGRlcFNpdGVcbiAgdmFyIGkgPSAwXG4gIHZhciBzZWVuID0gZmFsc2VcbiAgdmFyIHN0YWNrID0gZ2V0U3RhY2soKVxuICB2YXIgZmlsZSA9IHRoaXMuX2ZpbGVcblxuICBpZiAoc2l0ZSkge1xuICAgIC8vIHByb3ZpZGVkIHNpdGVcbiAgICBkZXBTaXRlID0gc2l0ZVxuICAgIGNhbGxTaXRlID0gY2FsbFNpdGVMb2NhdGlvbihzdGFja1sxXSlcbiAgICBjYWxsU2l0ZS5uYW1lID0gZGVwU2l0ZS5uYW1lXG4gICAgZmlsZSA9IGNhbGxTaXRlWzBdXG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGNhbGwgc2l0ZVxuICAgIGkgPSAyXG4gICAgZGVwU2l0ZSA9IGNhbGxTaXRlTG9jYXRpb24oc3RhY2tbaV0pXG4gICAgY2FsbFNpdGUgPSBkZXBTaXRlXG4gIH1cblxuICAvLyBnZXQgY2FsbGVyIG9mIGRlcHJlY2F0ZWQgdGhpbmcgaW4gcmVsYXRpb24gdG8gZmlsZVxuICBmb3IgKDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgY2FsbGVyID0gY2FsbFNpdGVMb2NhdGlvbihzdGFja1tpXSlcbiAgICBjYWxsRmlsZSA9IGNhbGxlclswXVxuXG4gICAgaWYgKGNhbGxGaWxlID09PSBmaWxlKSB7XG4gICAgICBzZWVuID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoY2FsbEZpbGUgPT09IHRoaXMuX2ZpbGUpIHtcbiAgICAgIGZpbGUgPSB0aGlzLl9maWxlXG4gICAgfSBlbHNlIGlmIChzZWVuKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHZhciBrZXkgPSBjYWxsZXJcbiAgICA/IGRlcFNpdGUuam9pbignOicpICsgJ19fJyArIGNhbGxlci5qb2luKCc6JylcbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXkgaW4gdGhpcy5fd2FybmVkKSB7XG4gICAgLy8gYWxyZWFkeSB3YXJuZWRcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRoaXMuX3dhcm5lZFtrZXldID0gdHJ1ZVxuXG4gIC8vIGdlbmVyYXRlIGF1dG9tYXRpYyBtZXNzYWdlIGZyb20gY2FsbCBzaXRlXG4gIHZhciBtc2cgPSBtZXNzYWdlXG4gIGlmICghbXNnKSB7XG4gICAgbXNnID0gY2FsbFNpdGUgPT09IGRlcFNpdGUgfHwgIWNhbGxTaXRlLm5hbWVcbiAgICAgID8gZGVmYXVsdE1lc3NhZ2UoZGVwU2l0ZSlcbiAgICAgIDogZGVmYXVsdE1lc3NhZ2UoY2FsbFNpdGUpXG4gIH1cblxuICAvLyBlbWl0IGRlcHJlY2F0aW9uIGlmIGxpc3RlbmVycyBleGlzdFxuICBpZiAoaGFzbGlzdGVuZXJzKSB7XG4gICAgdmFyIGVyciA9IERlcHJlY2F0aW9uRXJyb3IodGhpcy5fbmFtZXNwYWNlLCBtc2csIHN0YWNrLnNsaWNlKGkpKVxuICAgIHByb2Nlc3MuZW1pdCgnZGVwcmVjYXRpb24nLCBlcnIpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBmb3JtYXQgYW5kIHdyaXRlIG1lc3NhZ2VcbiAgdmFyIGZvcm1hdCA9IHByb2Nlc3Muc3RkZXJyLmlzVFRZXG4gICAgPyBmb3JtYXRDb2xvclxuICAgIDogZm9ybWF0UGxhaW5cbiAgdmFyIG91dHB1dCA9IGZvcm1hdC5jYWxsKHRoaXMsIG1zZywgY2FsbGVyLCBzdGFjay5zbGljZShpKSlcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUob3V0cHV0ICsgJ1xcbicsICd1dGY4Jylcbn1cblxuLyoqXG4gKiBHZXQgY2FsbCBzaXRlIGxvY2F0aW9uIGFzIGFycmF5LlxuICovXG5cbmZ1bmN0aW9uIGNhbGxTaXRlTG9jYXRpb24gKGNhbGxTaXRlKSB7XG4gIHZhciBmaWxlID0gY2FsbFNpdGUuZ2V0RmlsZU5hbWUoKSB8fCAnPGFub255bW91cz4nXG4gIHZhciBsaW5lID0gY2FsbFNpdGUuZ2V0TGluZU51bWJlcigpXG4gIHZhciBjb2xtID0gY2FsbFNpdGUuZ2V0Q29sdW1uTnVtYmVyKClcblxuICBpZiAoY2FsbFNpdGUuaXNFdmFsKCkpIHtcbiAgICBmaWxlID0gY2FsbFNpdGUuZ2V0RXZhbE9yaWdpbigpICsgJywgJyArIGZpbGVcbiAgfVxuXG4gIHZhciBzaXRlID0gW2ZpbGUsIGxpbmUsIGNvbG1dXG5cbiAgc2l0ZS5jYWxsU2l0ZSA9IGNhbGxTaXRlXG4gIHNpdGUubmFtZSA9IGNhbGxTaXRlLmdldEZ1bmN0aW9uTmFtZSgpXG5cbiAgcmV0dXJuIHNpdGVcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGRlZmF1bHQgbWVzc2FnZSBmcm9tIHRoZSBzaXRlLlxuICovXG5cbmZ1bmN0aW9uIGRlZmF1bHRNZXNzYWdlIChzaXRlKSB7XG4gIHZhciBjYWxsU2l0ZSA9IHNpdGUuY2FsbFNpdGVcbiAgdmFyIGZ1bmNOYW1lID0gc2l0ZS5uYW1lXG5cbiAgLy8gbWFrZSB1c2VmdWwgYW5vbnltb3VzIG5hbWVcbiAgaWYgKCFmdW5jTmFtZSkge1xuICAgIGZ1bmNOYW1lID0gJzxhbm9ueW1vdXNAJyArIGZvcm1hdExvY2F0aW9uKHNpdGUpICsgJz4nXG4gIH1cblxuICB2YXIgY29udGV4dCA9IGNhbGxTaXRlLmdldFRoaXMoKVxuICB2YXIgdHlwZU5hbWUgPSBjb250ZXh0ICYmIGNhbGxTaXRlLmdldFR5cGVOYW1lKClcblxuICAvLyBpZ25vcmUgdXNlbGVzcyB0eXBlIG5hbWVcbiAgaWYgKHR5cGVOYW1lID09PSAnT2JqZWN0Jykge1xuICAgIHR5cGVOYW1lID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBtYWtlIHVzZWZ1bCB0eXBlIG5hbWVcbiAgaWYgKHR5cGVOYW1lID09PSAnRnVuY3Rpb24nKSB7XG4gICAgdHlwZU5hbWUgPSBjb250ZXh0Lm5hbWUgfHwgdHlwZU5hbWVcbiAgfVxuXG4gIHJldHVybiB0eXBlTmFtZSAmJiBjYWxsU2l0ZS5nZXRNZXRob2ROYW1lKClcbiAgICA/IHR5cGVOYW1lICsgJy4nICsgZnVuY05hbWVcbiAgICA6IGZ1bmNOYW1lXG59XG5cbi8qKlxuICogRm9ybWF0IGRlcHJlY2F0aW9uIG1lc3NhZ2Ugd2l0aG91dCBjb2xvci5cbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRQbGFpbiAobXNnLCBjYWxsZXIsIHN0YWNrKSB7XG4gIHZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcblxuICB2YXIgZm9ybWF0dGVkID0gdGltZXN0YW1wICtcbiAgICAnICcgKyB0aGlzLl9uYW1lc3BhY2UgK1xuICAgICcgZGVwcmVjYXRlZCAnICsgbXNnXG5cbiAgLy8gYWRkIHN0YWNrIHRyYWNlXG4gIGlmICh0aGlzLl90cmFjZWQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3JtYXR0ZWQgKz0gJ1xcbiAgICBhdCAnICsgY2FsbFNpdGVUb1N0cmluZyhzdGFja1tpXSlcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVkXG4gIH1cblxuICBpZiAoY2FsbGVyKSB7XG4gICAgZm9ybWF0dGVkICs9ICcgYXQgJyArIGZvcm1hdExvY2F0aW9uKGNhbGxlcilcbiAgfVxuXG4gIHJldHVybiBmb3JtYXR0ZWRcbn1cblxuLyoqXG4gKiBGb3JtYXQgZGVwcmVjYXRpb24gbWVzc2FnZSB3aXRoIGNvbG9yLlxuICovXG5cbmZ1bmN0aW9uIGZvcm1hdENvbG9yIChtc2csIGNhbGxlciwgc3RhY2spIHtcbiAgdmFyIGZvcm1hdHRlZCA9ICdcXHgxYlszNjsxbScgKyB0aGlzLl9uYW1lc3BhY2UgKyAnXFx4MWJbMjI7MzltJyArIC8vIGJvbGQgY3lhblxuICAgICcgXFx4MWJbMzM7MW1kZXByZWNhdGVkXFx4MWJbMjI7MzltJyArIC8vIGJvbGQgeWVsbG93XG4gICAgJyBcXHgxYlswbScgKyBtc2cgKyAnXFx4MWJbMzltJyAvLyByZXNldFxuXG4gIC8vIGFkZCBzdGFjayB0cmFjZVxuICBpZiAodGhpcy5fdHJhY2VkKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgZm9ybWF0dGVkICs9ICdcXG4gICAgXFx4MWJbMzZtYXQgJyArIGNhbGxTaXRlVG9TdHJpbmcoc3RhY2tbaV0pICsgJ1xceDFiWzM5bScgLy8gY3lhblxuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXR0ZWRcbiAgfVxuXG4gIGlmIChjYWxsZXIpIHtcbiAgICBmb3JtYXR0ZWQgKz0gJyBcXHgxYlszNm0nICsgZm9ybWF0TG9jYXRpb24oY2FsbGVyKSArICdcXHgxYlszOW0nIC8vIGN5YW5cbiAgfVxuXG4gIHJldHVybiBmb3JtYXR0ZWRcbn1cblxuLyoqXG4gKiBGb3JtYXQgY2FsbCBzaXRlIGxvY2F0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGZvcm1hdExvY2F0aW9uIChjYWxsU2l0ZSkge1xuICByZXR1cm4gcmVsYXRpdmUoYmFzZVBhdGgsIGNhbGxTaXRlWzBdKSArXG4gICAgJzonICsgY2FsbFNpdGVbMV0gK1xuICAgICc6JyArIGNhbGxTaXRlWzJdXG59XG5cbi8qKlxuICogR2V0IHRoZSBzdGFjayBhcyBhcnJheSBvZiBjYWxsIHNpdGVzLlxuICovXG5cbmZ1bmN0aW9uIGdldFN0YWNrICgpIHtcbiAgdmFyIGxpbWl0ID0gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0XG4gIHZhciBvYmogPSB7fVxuICB2YXIgcHJlcCA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmVwYXJlT2JqZWN0U3RhY2tUcmFjZVxuICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBNYXRoLm1heCgxMCwgbGltaXQpXG5cbiAgLy8gY2FwdHVyZSB0aGUgc3RhY2tcbiAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uob2JqKVxuXG4gIC8vIHNsaWNlIHRoaXMgZnVuY3Rpb24gb2ZmIHRoZSB0b3BcbiAgdmFyIHN0YWNrID0gb2JqLnN0YWNrLnNsaWNlKDEpXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmVwXG4gIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IGxpbWl0XG5cbiAgcmV0dXJuIHN0YWNrXG59XG5cbi8qKlxuICogQ2FwdHVyZSBjYWxsIHNpdGUgc3RhY2sgZnJvbSB2OC5cbiAqL1xuXG5mdW5jdGlvbiBwcmVwYXJlT2JqZWN0U3RhY2tUcmFjZSAob2JqLCBzdGFjaykge1xuICByZXR1cm4gc3RhY2tcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSB3cmFwcGVkIGZ1bmN0aW9uIGluIGEgZGVwcmVjYXRpb24gbWVzc2FnZS5cbiAqL1xuXG5mdW5jdGlvbiB3cmFwZnVuY3Rpb24gKGZuLCBtZXNzYWdlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBmbiBtdXN0IGJlIGEgZnVuY3Rpb24nKVxuICB9XG5cbiAgdmFyIGFyZ3MgPSBjcmVhdGVBcmd1bWVudHNTdHJpbmcoZm4ubGVuZ3RoKVxuICB2YXIgZGVwcmVjYXRlID0gdGhpcyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBzdGFjayA9IGdldFN0YWNrKClcbiAgdmFyIHNpdGUgPSBjYWxsU2l0ZUxvY2F0aW9uKHN0YWNrWzFdKVxuXG4gIHNpdGUubmFtZSA9IGZuLm5hbWVcblxuICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV2YWxcbiAgdmFyIGRlcHJlY2F0ZWRmbiA9IGV2YWwoJyhmdW5jdGlvbiAoJyArIGFyZ3MgKyAnKSB7XFxuJyArXG4gICAgJ1widXNlIHN0cmljdFwiXFxuJyArXG4gICAgJ2xvZy5jYWxsKGRlcHJlY2F0ZSwgbWVzc2FnZSwgc2l0ZSlcXG4nICtcbiAgICAncmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcXG4nICtcbiAgICAnfSknKVxuXG4gIHJldHVybiBkZXByZWNhdGVkZm5cbn1cblxuLyoqXG4gKiBXcmFwIHByb3BlcnR5IGluIGEgZGVwcmVjYXRpb24gbWVzc2FnZS5cbiAqL1xuXG5mdW5jdGlvbiB3cmFwcHJvcGVydHkgKG9iaiwgcHJvcCwgbWVzc2FnZSkge1xuICBpZiAoIW9iaiB8fCAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iaiAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBvYmogbXVzdCBiZSBvYmplY3QnKVxuICB9XG5cbiAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcClcblxuICBpZiAoIWRlc2NyaXB0b3IpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IGNhbGwgcHJvcGVydHkgb24gb3duZXIgb2JqZWN0JylcbiAgfVxuXG4gIGlmICghZGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwcm9wZXJ0eSBtdXN0IGJlIGNvbmZpZ3VyYWJsZScpXG4gIH1cblxuICB2YXIgZGVwcmVjYXRlID0gdGhpc1xuICB2YXIgc3RhY2sgPSBnZXRTdGFjaygpXG4gIHZhciBzaXRlID0gY2FsbFNpdGVMb2NhdGlvbihzdGFja1sxXSlcblxuICAvLyBzZXQgc2l0ZSBuYW1lXG4gIHNpdGUubmFtZSA9IHByb3BcblxuICAvLyBjb252ZXJ0IGRhdGEgZGVzY3JpcHRvclxuICBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgZGVzY3JpcHRvciA9IGNvbnZlcnREYXRhRGVzY3JpcHRvclRvQWNjZXNzb3Iob2JqLCBwcm9wLCBtZXNzYWdlKVxuICB9XG5cbiAgdmFyIGdldCA9IGRlc2NyaXB0b3IuZ2V0XG4gIHZhciBzZXQgPSBkZXNjcmlwdG9yLnNldFxuXG4gIC8vIHdyYXAgZ2V0dGVyXG4gIGlmICh0eXBlb2YgZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGVzY3JpcHRvci5nZXQgPSBmdW5jdGlvbiBnZXR0ZXIgKCkge1xuICAgICAgbG9nLmNhbGwoZGVwcmVjYXRlLCBtZXNzYWdlLCBzaXRlKVxuICAgICAgcmV0dXJuIGdldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfVxuICB9XG5cbiAgLy8gd3JhcCBzZXR0ZXJcbiAgaWYgKHR5cGVvZiBzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBkZXNjcmlwdG9yLnNldCA9IGZ1bmN0aW9uIHNldHRlciAoKSB7XG4gICAgICBsb2cuY2FsbChkZXByZWNhdGUsIG1lc3NhZ2UsIHNpdGUpXG4gICAgICByZXR1cm4gc2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9XG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCBkZXNjcmlwdG9yKVxufVxuXG4vKipcbiAqIENyZWF0ZSBEZXByZWNhdGlvbkVycm9yIGZvciBkZXByZWNhdGlvblxuICovXG5cbmZ1bmN0aW9uIERlcHJlY2F0aW9uRXJyb3IgKG5hbWVzcGFjZSwgbWVzc2FnZSwgc3RhY2spIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKClcbiAgdmFyIHN0YWNrU3RyaW5nXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnY29uc3RydWN0b3InLCB7XG4gICAgdmFsdWU6IERlcHJlY2F0aW9uRXJyb3JcbiAgfSlcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdtZXNzYWdlJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogbWVzc2FnZSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ25hbWUnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiAnRGVwcmVjYXRpb25FcnJvcicsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSlcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICduYW1lc3BhY2UnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBuYW1lc3BhY2UsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSlcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc3RhY2tTdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tTdHJpbmdcbiAgICAgIH1cblxuICAgICAgLy8gcHJlcGFyZSBzdGFjayB0cmFjZVxuICAgICAgcmV0dXJuIChzdGFja1N0cmluZyA9IGNyZWF0ZVN0YWNrU3RyaW5nLmNhbGwodGhpcywgc3RhY2spKVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXR0ZXIgKHZhbCkge1xuICAgICAgc3RhY2tTdHJpbmcgPSB2YWxcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZGVwZC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImZzXCJcbi8vIG1vZHVsZSBpZCA9IDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgSVNfV1JBUCA9IHR5cGUgJiAkZXhwb3J0Llc7XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXTtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBrZXksIG93biwgb3V0O1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChvd24gJiYgaGFzKGV4cG9ydHMsIGtleSkpIGNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24gKEMpIHtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDKSB7XG4gICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQygpO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZiAoSVNfUFJPVE8pIHtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZiAodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSkgaGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzXG4vLyBtb2R1bGUgaWQgPSAxMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gMTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBleHByZXNzXG4gKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEzIFRKIEhvbG93YXljaHVrXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxudmFyIGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlcXVpcmUoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcbnZhciBjb250ZW50VHlwZSA9IHJlcXVpcmUoJ2NvbnRlbnQtdHlwZScpO1xudmFyIGRlcHJlY2F0ZSA9IHJlcXVpcmUoJ2RlcGQnKSgnZXhwcmVzcycpO1xudmFyIGZsYXR0ZW4gPSByZXF1aXJlKCdhcnJheS1mbGF0dGVuJyk7XG52YXIgbWltZSA9IHJlcXVpcmUoJ3NlbmQnKS5taW1lO1xudmFyIGV0YWcgPSByZXF1aXJlKCdldGFnJyk7XG52YXIgcHJveHlhZGRyID0gcmVxdWlyZSgncHJveHktYWRkcicpO1xudmFyIHFzID0gcmVxdWlyZSgncXMnKTtcbnZhciBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbi8qKlxuICogUmV0dXJuIHN0cm9uZyBFVGFnIGZvciBgYm9keWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QnVmZmVyfSBib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW2VuY29kaW5nXVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5ldGFnID0gY3JlYXRlRVRhZ0dlbmVyYXRvcih7IHdlYWs6IGZhbHNlIH0pXG5cbi8qKlxuICogUmV0dXJuIHdlYWsgRVRhZyBmb3IgYGJvZHlgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEJ1ZmZlcn0gYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFtlbmNvZGluZ11cbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMud2V0YWcgPSBjcmVhdGVFVGFnR2VuZXJhdG9yKHsgd2VhazogdHJ1ZSB9KVxuXG4vKipcbiAqIENoZWNrIGlmIGBwYXRoYCBsb29rcyBhYnNvbHV0ZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpe1xuICBpZiAoJy8nID09PSBwYXRoWzBdKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKCc6JyA9PT0gcGF0aFsxXSAmJiAoJ1xcXFwnID09PSBwYXRoWzJdIHx8ICcvJyA9PT0gcGF0aFsyXSkpIHJldHVybiB0cnVlOyAvLyBXaW5kb3dzIGRldmljZSBwYXRoXG4gIGlmICgnXFxcXFxcXFwnID09PSBwYXRoLnN1YnN0cmluZygwLCAyKSkgcmV0dXJuIHRydWU7IC8vIE1pY3Jvc29mdCBBenVyZSBhYnNvbHV0ZSBwYXRoXG59O1xuXG4vKipcbiAqIEZsYXR0ZW4gdGhlIGdpdmVuIGBhcnJgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmZsYXR0ZW4gPSBkZXByZWNhdGUuZnVuY3Rpb24oZmxhdHRlbixcbiAgJ3V0aWxzLmZsYXR0ZW46IHVzZSBhcnJheS1mbGF0dGVuIG5wbSBtb2R1bGUgaW5zdGVhZCcpO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gYHR5cGVgLCBmb3IgZXhhbXBsZSBcImh0bWxcIiBiZWNvbWVzIFwidGV4dC9odG1sXCIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMubm9ybWFsaXplVHlwZSA9IGZ1bmN0aW9uKHR5cGUpe1xuICByZXR1cm4gfnR5cGUuaW5kZXhPZignLycpXG4gICAgPyBhY2NlcHRQYXJhbXModHlwZSlcbiAgICA6IHsgdmFsdWU6IG1pbWUubG9va3VwKHR5cGUpLCBwYXJhbXM6IHt9IH07XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBgdHlwZXNgLCBmb3IgZXhhbXBsZSBcImh0bWxcIiBiZWNvbWVzIFwidGV4dC9odG1sXCIuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gdHlwZXNcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5ub3JtYWxpemVUeXBlcyA9IGZ1bmN0aW9uKHR5cGVzKXtcbiAgdmFyIHJldCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kpIHtcbiAgICByZXQucHVzaChleHBvcnRzLm5vcm1hbGl6ZVR5cGUodHlwZXNbaV0pKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVyIGFwcHJvcHJpYXRlIGZvciB0aGUgZmlsZW5hbWUuXG4gKiBub24tYXNjaWkgZmlsZW5hbWVzIGFyZSB1cmxlbmNvZGVkIGFuZCBhIGZpbGVuYW1lKiBwYXJhbWV0ZXIgaXMgYWRkZWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsZW5hbWVcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY29udGVudERpc3Bvc2l0aW9uID0gZGVwcmVjYXRlLmZ1bmN0aW9uKGNvbnRlbnREaXNwb3NpdGlvbixcbiAgJ3V0aWxzLmNvbnRlbnREaXNwb3NpdGlvbjogdXNlIGNvbnRlbnQtZGlzcG9zaXRpb24gbnBtIG1vZHVsZSBpbnN0ZWFkJyk7XG5cbi8qKlxuICogUGFyc2UgYWNjZXB0IHBhcmFtcyBgc3RyYCByZXR1cm5pbmcgYW5cbiAqIG9iamVjdCB3aXRoIGAudmFsdWVgLCBgLnF1YWxpdHlgIGFuZCBgLnBhcmFtc2AuXG4gKiBhbHNvIGluY2x1ZGVzIGAub3JpZ2luYWxJbmRleGAgZm9yIHN0YWJsZSBzb3J0aW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gYWNjZXB0UGFyYW1zKHN0ciwgaW5kZXgpIHtcbiAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KC8gKjsgKi8pO1xuICB2YXIgcmV0ID0geyB2YWx1ZTogcGFydHNbMF0sIHF1YWxpdHk6IDEsIHBhcmFtczoge30sIG9yaWdpbmFsSW5kZXg6IGluZGV4IH07XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBwbXMgPSBwYXJ0c1tpXS5zcGxpdCgvICo9ICovKTtcbiAgICBpZiAoJ3EnID09PSBwbXNbMF0pIHtcbiAgICAgIHJldC5xdWFsaXR5ID0gcGFyc2VGbG9hdChwbXNbMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXQucGFyYW1zW3Btc1swXV0gPSBwbXNbMV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBDb21waWxlIFwiZXRhZ1wiIHZhbHVlIHRvIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0Jvb2xlYW58U3RyaW5nfEZ1bmN0aW9ufSB2YWxcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jb21waWxlRVRhZyA9IGZ1bmN0aW9uKHZhbCkge1xuICB2YXIgZm47XG5cbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgc3dpdGNoICh2YWwpIHtcbiAgICBjYXNlIHRydWU6XG4gICAgICBmbiA9IGV4cG9ydHMud2V0YWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGZhbHNlOlxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc3Ryb25nJzpcbiAgICAgIGZuID0gZXhwb3J0cy5ldGFnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnd2Vhayc6XG4gICAgICBmbiA9IGV4cG9ydHMud2V0YWc7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW5rbm93biB2YWx1ZSBmb3IgZXRhZyBmdW5jdGlvbjogJyArIHZhbCk7XG4gIH1cblxuICByZXR1cm4gZm47XG59XG5cbi8qKlxuICogQ29tcGlsZSBcInF1ZXJ5IHBhcnNlclwiIHZhbHVlIHRvIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ3xGdW5jdGlvbn0gdmFsXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY29tcGlsZVF1ZXJ5UGFyc2VyID0gZnVuY3Rpb24gY29tcGlsZVF1ZXJ5UGFyc2VyKHZhbCkge1xuICB2YXIgZm47XG5cbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgc3dpdGNoICh2YWwpIHtcbiAgICBjYXNlIHRydWU6XG4gICAgICBmbiA9IHF1ZXJ5c3RyaW5nLnBhcnNlO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBmYWxzZTpcbiAgICAgIGZuID0gbmV3T2JqZWN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZXh0ZW5kZWQnOlxuICAgICAgZm4gPSBwYXJzZUV4dGVuZGVkUXVlcnlTdHJpbmc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzaW1wbGUnOlxuICAgICAgZm4gPSBxdWVyeXN0cmluZy5wYXJzZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmtub3duIHZhbHVlIGZvciBxdWVyeSBwYXJzZXIgZnVuY3Rpb246ICcgKyB2YWwpO1xuICB9XG5cbiAgcmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIENvbXBpbGUgXCJwcm94eSB0cnVzdFwiIHZhbHVlIHRvIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0Jvb2xlYW58U3RyaW5nfE51bWJlcnxBcnJheXxGdW5jdGlvbn0gdmFsXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY29tcGlsZVRydXN0ID0gZnVuY3Rpb24odmFsKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsO1xuXG4gIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAvLyBTdXBwb3J0IHBsYWluIHRydWUvZmFsc2VcbiAgICByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIHRydWUgfTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIC8vIFN1cHBvcnQgdHJ1c3RpbmcgaG9wIGNvdW50XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIGkpeyByZXR1cm4gaSA8IHZhbCB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gU3VwcG9ydCBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzXG4gICAgdmFsID0gdmFsLnNwbGl0KC8gKiwgKi8pO1xuICB9XG5cbiAgcmV0dXJuIHByb3h5YWRkci5jb21waWxlKHZhbCB8fCBbXSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjaGFyc2V0IGluIGEgZ2l2ZW4gQ29udGVudC1UeXBlIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtTdHJpbmd9IGNoYXJzZXRcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuc2V0Q2hhcnNldCA9IGZ1bmN0aW9uIHNldENoYXJzZXQodHlwZSwgY2hhcnNldCkge1xuICBpZiAoIXR5cGUgfHwgIWNoYXJzZXQpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIC8vIHBhcnNlIHR5cGVcbiAgdmFyIHBhcnNlZCA9IGNvbnRlbnRUeXBlLnBhcnNlKHR5cGUpO1xuXG4gIC8vIHNldCBjaGFyc2V0XG4gIHBhcnNlZC5wYXJhbWV0ZXJzLmNoYXJzZXQgPSBjaGFyc2V0O1xuXG4gIC8vIGZvcm1hdCB0eXBlXG4gIHJldHVybiBjb250ZW50VHlwZS5mb3JtYXQocGFyc2VkKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVUYWcgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBnZW5lcmF0aW5nIEVUYWdzIHdpdGhcbiAqIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRVRhZ0dlbmVyYXRvciAob3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gZ2VuZXJhdGVFVGFnIChib2R5LCBlbmNvZGluZykge1xuICAgIHZhciBidWYgPSAhQnVmZmVyLmlzQnVmZmVyKGJvZHkpXG4gICAgICA/IEJ1ZmZlci5mcm9tKGJvZHksIGVuY29kaW5nKVxuICAgICAgOiBib2R5XG5cbiAgICByZXR1cm4gZXRhZyhidWYsIG9wdGlvbnMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBleHRlbmRlZCBxdWVyeSBzdHJpbmcgd2l0aCBxcy5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlRXh0ZW5kZWRRdWVyeVN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHFzLnBhcnNlKHN0ciwge1xuICAgIGFsbG93UHJvdG90eXBlczogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gbmV3IGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBuZXdPYmplY3QoKSB7XG4gIHJldHVybiB7fTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9leHByZXNzL2xpYi91dGlscy5qc1xuLy8gbW9kdWxlIGlkID0gMTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanNcbi8vIG1vZHVsZSBpZCA9IDEzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qc1xuLy8gbW9kdWxlIGlkID0gMTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzXG4vLyBtb2R1bGUgaWQgPSAxNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanNcbi8vIG1vZHVsZSBpZCA9IDE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmNvbnN0IERBVEFfUEFUSCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9kYXRhJyk7XG5jb25zdCBBTkFMWVRJQ1NfUEFUSCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9zcmMnKTtcbmNvbnN0IEFOT01BTElFU19QQVRIID0gcGF0aC5qb2luKEFOQUxZVElDU19QQVRILCAnYW5vbWFsaWVzJyk7XG5jb25zdCBTRUdNRU5UU19QQVRIID0gcGF0aC5qb2luKEFOQUxZVElDU19QQVRILCAnc2VnbWVudHMnKTtcbmNvbnN0IE1FVFJJQ1NfUEFUSCA9IHBhdGguam9pbihBTkFMWVRJQ1NfUEFUSCwgJ21ldHJpY3MnKTtcblxuZXhwb3J0IHsgREFUQV9QQVRILCBBTkFMWVRJQ1NfUEFUSCwgQU5PTUFMSUVTX1BBVEgsIFNFR01FTlRTX1BBVEgsIE1FVFJJQ1NfUEFUSCB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcudHMiLCIvKiFcbiAqIGJ5dGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IFRKIEhvbG93YXljaHVrXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBKZWQgV2F0c29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBieXRlcztcbm1vZHVsZS5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGZvcm1hdFRob3VzYW5kc1JlZ0V4cCA9IC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nO1xuXG52YXIgZm9ybWF0RGVjaW1hbHNSZWdFeHAgPSAvKD86XFwuMCp8KFxcLlteMF0rKTArKSQvO1xuXG52YXIgbWFwID0ge1xuICBiOiAgMSxcbiAga2I6IDEgPDwgMTAsXG4gIG1iOiAxIDw8IDIwLFxuICBnYjogMSA8PCAzMCxcbiAgdGI6ICgoMSA8PCAzMCkgKiAxMDI0KVxufTtcblxudmFyIHBhcnNlUmVnRXhwID0gL14oKC18XFwrKT8oXFxkKyg/OlxcLlxcZCspPykpICooa2J8bWJ8Z2J8dGIpJC9pO1xuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIHZhbHVlIGluIGJ5dGVzIGludG8gYSBzdHJpbmcgb3IgcGFyc2UgdG8gc3RyaW5nIHRvIGFuIGludGVnZXIgaW4gYnl0ZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHt7XG4gKiAgY2FzZTogW3N0cmluZ10sXG4gKiAgZGVjaW1hbFBsYWNlczogW251bWJlcl1cbiAqICBmaXhlZERlY2ltYWxzOiBbYm9vbGVhbl1cbiAqICB0aG91c2FuZHNTZXBhcmF0b3I6IFtzdHJpbmddXG4gKiAgdW5pdFNlcGFyYXRvcjogW3N0cmluZ11cbiAqICB9fSBbb3B0aW9uc10gYnl0ZXMgb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bWJlcnxudWxsfVxuICovXG5cbmZ1bmN0aW9uIGJ5dGVzKHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbHVlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBGb3JtYXQgdGhlIGdpdmVuIHZhbHVlIGluIGJ5dGVzIGludG8gYSBzdHJpbmcuXG4gKlxuICogSWYgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLCBpdCBpcyBrZXB0IGFzIHN1Y2guIElmIGl0IGlzIGEgZmxvYXQsXG4gKiBpdCBpcyByb3VuZGVkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmRlY2ltYWxQbGFjZXM9Ml1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5maXhlZERlY2ltYWxzPWZhbHNlXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnRob3VzYW5kc1NlcGFyYXRvcj1dXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudW5pdD1dXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudW5pdFNlcGFyYXRvcj1dXG4gKlxuICogQHJldHVybnMge3N0cmluZ3xudWxsfVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYWcgPSBNYXRoLmFicyh2YWx1ZSk7XG4gIHZhciB0aG91c2FuZHNTZXBhcmF0b3IgPSAob3B0aW9ucyAmJiBvcHRpb25zLnRob3VzYW5kc1NlcGFyYXRvcikgfHwgJyc7XG4gIHZhciB1bml0U2VwYXJhdG9yID0gKG9wdGlvbnMgJiYgb3B0aW9ucy51bml0U2VwYXJhdG9yKSB8fCAnJztcbiAgdmFyIGRlY2ltYWxQbGFjZXMgPSAob3B0aW9ucyAmJiBvcHRpb25zLmRlY2ltYWxQbGFjZXMgIT09IHVuZGVmaW5lZCkgPyBvcHRpb25zLmRlY2ltYWxQbGFjZXMgOiAyO1xuICB2YXIgZml4ZWREZWNpbWFscyA9IEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLmZpeGVkRGVjaW1hbHMpO1xuICB2YXIgdW5pdCA9IChvcHRpb25zICYmIG9wdGlvbnMudW5pdCkgfHwgJyc7XG5cbiAgaWYgKCF1bml0IHx8ICFtYXBbdW5pdC50b0xvd2VyQ2FzZSgpXSkge1xuICAgIGlmIChtYWcgPj0gbWFwLnRiKSB7XG4gICAgICB1bml0ID0gJ1RCJztcbiAgICB9IGVsc2UgaWYgKG1hZyA+PSBtYXAuZ2IpIHtcbiAgICAgIHVuaXQgPSAnR0InO1xuICAgIH0gZWxzZSBpZiAobWFnID49IG1hcC5tYikge1xuICAgICAgdW5pdCA9ICdNQic7XG4gICAgfSBlbHNlIGlmIChtYWcgPj0gbWFwLmtiKSB7XG4gICAgICB1bml0ID0gJ0tCJztcbiAgICB9IGVsc2Uge1xuICAgICAgdW5pdCA9ICdCJztcbiAgICB9XG4gIH1cblxuICB2YXIgdmFsID0gdmFsdWUgLyBtYXBbdW5pdC50b0xvd2VyQ2FzZSgpXTtcbiAgdmFyIHN0ciA9IHZhbC50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpO1xuXG4gIGlmICghZml4ZWREZWNpbWFscykge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKGZvcm1hdERlY2ltYWxzUmVnRXhwLCAnJDEnKTtcbiAgfVxuXG4gIGlmICh0aG91c2FuZHNTZXBhcmF0b3IpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZShmb3JtYXRUaG91c2FuZHNSZWdFeHAsIHRob3VzYW5kc1NlcGFyYXRvcik7XG4gIH1cblxuICByZXR1cm4gc3RyICsgdW5pdFNlcGFyYXRvciArIHVuaXQ7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIHN0cmluZyB2YWx1ZSBpbnRvIGFuIGludGVnZXIgaW4gYnl0ZXMuXG4gKlxuICogSWYgbm8gdW5pdCBpcyBnaXZlbiwgaXQgaXMgYXNzdW1lZCB0aGUgdmFsdWUgaXMgaW4gYnl0ZXMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWxcbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcGFyc2UodmFsKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKSkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFRlc3QgaWYgdGhlIHN0cmluZyBwYXNzZWQgaXMgdmFsaWRcbiAgdmFyIHJlc3VsdHMgPSBwYXJzZVJlZ0V4cC5leGVjKHZhbCk7XG4gIHZhciBmbG9hdFZhbHVlO1xuICB2YXIgdW5pdCA9ICdiJztcblxuICBpZiAoIXJlc3VsdHMpIHtcbiAgICAvLyBOb3RoaW5nIGNvdWxkIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBnaXZlbiBzdHJpbmdcbiAgICBmbG9hdFZhbHVlID0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgdW5pdCA9ICdiJ1xuICB9IGVsc2Uge1xuICAgIC8vIFJldHJpZXZlIHRoZSB2YWx1ZSBhbmQgdGhlIHVuaXRcbiAgICBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdChyZXN1bHRzWzFdKTtcbiAgICB1bml0ID0gcmVzdWx0c1s0XS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguZmxvb3IobWFwW3VuaXRdICogZmxvYXRWYWx1ZSk7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvYnl0ZXMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogc3RhdHVzZXNcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTYgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBjb2RlcyA9IHJlcXVpcmUoJy4vY29kZXMuanNvbicpXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBzdGF0dXNcblxuLy8gc3RhdHVzIGNvZGUgdG8gbWVzc2FnZSBtYXBcbnN0YXR1cy5TVEFUVVNfQ09ERVMgPSBjb2Rlc1xuXG4vLyBhcnJheSBvZiBzdGF0dXMgY29kZXNcbnN0YXR1cy5jb2RlcyA9IHBvcHVsYXRlU3RhdHVzZXNNYXAoc3RhdHVzLCBjb2RlcylcblxuLy8gc3RhdHVzIGNvZGVzIGZvciByZWRpcmVjdHNcbnN0YXR1cy5yZWRpcmVjdCA9IHtcbiAgMzAwOiB0cnVlLFxuICAzMDE6IHRydWUsXG4gIDMwMjogdHJ1ZSxcbiAgMzAzOiB0cnVlLFxuICAzMDU6IHRydWUsXG4gIDMwNzogdHJ1ZSxcbiAgMzA4OiB0cnVlXG59XG5cbi8vIHN0YXR1cyBjb2RlcyBmb3IgZW1wdHkgYm9kaWVzXG5zdGF0dXMuZW1wdHkgPSB7XG4gIDIwNDogdHJ1ZSxcbiAgMjA1OiB0cnVlLFxuICAzMDQ6IHRydWVcbn1cblxuLy8gc3RhdHVzIGNvZGVzIGZvciB3aGVuIHlvdSBzaG91bGQgcmV0cnkgdGhlIHJlcXVlc3RcbnN0YXR1cy5yZXRyeSA9IHtcbiAgNTAyOiB0cnVlLFxuICA1MDM6IHRydWUsXG4gIDUwNDogdHJ1ZVxufVxuXG4vKipcbiAqIFBvcHVsYXRlIHRoZSBzdGF0dXNlcyBtYXAgZm9yIGdpdmVuIGNvZGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwb3B1bGF0ZVN0YXR1c2VzTWFwIChzdGF0dXNlcywgY29kZXMpIHtcbiAgdmFyIGFyciA9IFtdXG5cbiAgT2JqZWN0LmtleXMoY29kZXMpLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaENvZGUgKGNvZGUpIHtcbiAgICB2YXIgbWVzc2FnZSA9IGNvZGVzW2NvZGVdXG4gICAgdmFyIHN0YXR1cyA9IE51bWJlcihjb2RlKVxuXG4gICAgLy8gUG9wdWxhdGUgcHJvcGVydGllc1xuICAgIHN0YXR1c2VzW3N0YXR1c10gPSBtZXNzYWdlXG4gICAgc3RhdHVzZXNbbWVzc2FnZV0gPSBzdGF0dXNcbiAgICBzdGF0dXNlc1ttZXNzYWdlLnRvTG93ZXJDYXNlKCldID0gc3RhdHVzXG5cbiAgICAvLyBBZGQgdG8gYXJyYXlcbiAgICBhcnIucHVzaChzdGF0dXMpXG4gIH0pXG5cbiAgcmV0dXJuIGFyclxufVxuXG4vKipcbiAqIEdldCB0aGUgc3RhdHVzIGNvZGUuXG4gKlxuICogR2l2ZW4gYSBudW1iZXIsIHRoaXMgd2lsbCB0aHJvdyBpZiBpdCBpcyBub3QgYSBrbm93biBzdGF0dXNcbiAqIGNvZGUsIG90aGVyd2lzZSB0aGUgY29kZSB3aWxsIGJlIHJldHVybmVkLiBHaXZlbiBhIHN0cmluZyxcbiAqIHRoZSBzdHJpbmcgd2lsbCBiZSBwYXJzZWQgZm9yIGEgbnVtYmVyIGFuZCByZXR1cm4gdGhlIGNvZGVcbiAqIGlmIHZhbGlkLCBvdGhlcndpc2Ugd2lsbCBsb29rdXAgdGhlIGNvZGUgYXNzdW1pbmcgdGhpcyBpc1xuICogdGhlIHN0YXR1cyBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gY29kZVxuICogQHJldHVybnMge251bWJlcn1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBzdGF0dXMgKGNvZGUpIHtcbiAgaWYgKHR5cGVvZiBjb2RlID09PSAnbnVtYmVyJykge1xuICAgIGlmICghc3RhdHVzW2NvZGVdKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3RhdHVzIGNvZGU6ICcgKyBjb2RlKVxuICAgIHJldHVybiBjb2RlXG4gIH1cblxuICBpZiAodHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29kZSBtdXN0IGJlIGEgbnVtYmVyIG9yIHN0cmluZycpXG4gIH1cblxuICAvLyAnNDAzJ1xuICB2YXIgbiA9IHBhcnNlSW50KGNvZGUsIDEwKVxuICBpZiAoIWlzTmFOKG4pKSB7XG4gICAgaWYgKCFzdGF0dXNbbl0pIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzdGF0dXMgY29kZTogJyArIG4pXG4gICAgcmV0dXJuIG5cbiAgfVxuXG4gIG4gPSBzdGF0dXNbY29kZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIW4pIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzdGF0dXMgbWVzc2FnZTogXCInICsgY29kZSArICdcIicpXG4gIHJldHVybiBuXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvc3RhdHVzZXMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogdHlwZS1pc1xuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgdHlwZXIgPSByZXF1aXJlKCdtZWRpYS10eXBlcicpXG52YXIgbWltZSA9IHJlcXVpcmUoJ21pbWUtdHlwZXMnKVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuaXMgPSB0eXBlaXNcbm1vZHVsZS5leHBvcnRzLmhhc0JvZHkgPSBoYXNib2R5XG5tb2R1bGUuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemVcbm1vZHVsZS5leHBvcnRzLm1hdGNoID0gbWltZU1hdGNoXG5cbi8qKlxuICogQ29tcGFyZSBhIGB2YWx1ZWAgY29udGVudC10eXBlIHdpdGggYHR5cGVzYC5cbiAqIEVhY2ggYHR5cGVgIGNhbiBiZSBhbiBleHRlbnNpb24gbGlrZSBgaHRtbGAsXG4gKiBhIHNwZWNpYWwgc2hvcnRjdXQgbGlrZSBgbXVsdGlwYXJ0YCBvciBgdXJsZW5jb2RlZGAsXG4gKiBvciBhIG1pbWUgdHlwZS5cbiAqXG4gKiBJZiBubyB0eXBlcyBtYXRjaCwgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqIE90aGVyd2lzZSwgdGhlIGZpcnN0IGB0eXBlYCB0aGF0IG1hdGNoZXMgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0FycmF5fSB0eXBlc1xuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHR5cGVpcyAodmFsdWUsIHR5cGVzXykge1xuICB2YXIgaVxuICB2YXIgdHlwZXMgPSB0eXBlc19cblxuICAvLyByZW1vdmUgcGFyYW1ldGVycyBhbmQgbm9ybWFsaXplXG4gIHZhciB2YWwgPSB0cnlOb3JtYWxpemVUeXBlKHZhbHVlKVxuXG4gIC8vIG5vIHR5cGUgb3IgaW52YWxpZFxuICBpZiAoIXZhbCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gc3VwcG9ydCBmbGF0dGVuZWQgYXJndW1lbnRzXG4gIGlmICh0eXBlcyAmJiAhQXJyYXkuaXNBcnJheSh0eXBlcykpIHtcbiAgICB0eXBlcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSlcbiAgICBmb3IgKGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHR5cGVzW2ldID0gYXJndW1lbnRzW2kgKyAxXVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vIHR5cGVzLCByZXR1cm4gdGhlIGNvbnRlbnQgdHlwZVxuICBpZiAoIXR5cGVzIHx8ICF0eXBlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdmFsXG4gIH1cblxuICB2YXIgdHlwZVxuICBmb3IgKGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWltZU1hdGNoKG5vcm1hbGl6ZSh0eXBlID0gdHlwZXNbaV0pLCB2YWwpKSB7XG4gICAgICByZXR1cm4gdHlwZVswXSA9PT0gJysnIHx8IHR5cGUuaW5kZXhPZignKicpICE9PSAtMVxuICAgICAgICA/IHZhbFxuICAgICAgICA6IHR5cGVcbiAgICB9XG4gIH1cblxuICAvLyBubyBtYXRjaGVzXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgcmVxdWVzdCBoYXMgYSByZXF1ZXN0IGJvZHkuXG4gKiBBIHJlcXVlc3Qgd2l0aCBhIGJvZHkgX19tdXN0X18gZWl0aGVyIGhhdmUgYHRyYW5zZmVyLWVuY29kaW5nYFxuICogb3IgYGNvbnRlbnQtbGVuZ3RoYCBoZWFkZXJzIHNldC5cbiAqIGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjNC5odG1sI3NlYzQuM1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGhhc2JvZHkgKHJlcSkge1xuICByZXR1cm4gcmVxLmhlYWRlcnNbJ3RyYW5zZmVyLWVuY29kaW5nJ10gIT09IHVuZGVmaW5lZCB8fFxuICAgICFpc05hTihyZXEuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSlcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgaW5jb21pbmcgcmVxdWVzdCBjb250YWlucyB0aGUgXCJDb250ZW50LVR5cGVcIlxuICogaGVhZGVyIGZpZWxkLCBhbmQgaXQgY29udGFpbnMgYW55IG9mIHRoZSBnaXZlIG1pbWUgYHR5cGVgcy5cbiAqIElmIHRoZXJlIGlzIG5vIHJlcXVlc3QgYm9keSwgYG51bGxgIGlzIHJldHVybmVkLlxuICogSWYgdGhlcmUgaXMgbm8gY29udGVudCB0eXBlLCBgZmFsc2VgIGlzIHJldHVybmVkLlxuICogT3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBmaXJzdCBgdHlwZWAgdGhhdCBtYXRjaGVzLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAvLyBXaXRoIENvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XG4gKiAgICAgdGhpcy5pcygnaHRtbCcpOyAvLyA9PiAnaHRtbCdcbiAqICAgICB0aGlzLmlzKCd0ZXh0L2h0bWwnKTsgLy8gPT4gJ3RleHQvaHRtbCdcbiAqICAgICB0aGlzLmlzKCd0ZXh0LyonLCAnYXBwbGljYXRpb24vanNvbicpOyAvLyA9PiAndGV4dC9odG1sJ1xuICpcbiAqICAgICAvLyBXaGVuIENvbnRlbnQtVHlwZSBpcyBhcHBsaWNhdGlvbi9qc29uXG4gKiAgICAgdGhpcy5pcygnanNvbicsICd1cmxlbmNvZGVkJyk7IC8vID0+ICdqc29uJ1xuICogICAgIHRoaXMuaXMoJ2FwcGxpY2F0aW9uL2pzb24nKTsgLy8gPT4gJ2FwcGxpY2F0aW9uL2pzb24nXG4gKiAgICAgdGhpcy5pcygnaHRtbCcsICdhcHBsaWNhdGlvbi8qJyk7IC8vID0+ICdhcHBsaWNhdGlvbi9qc29uJ1xuICpcbiAqICAgICB0aGlzLmlzKCdodG1sJyk7IC8vID0+IGZhbHNlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHR5cGVzLi4uXG4gKiBAcmV0dXJuIHtTdHJpbmd8ZmFsc2V8bnVsbH1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiB0eXBlb2ZyZXF1ZXN0IChyZXEsIHR5cGVzXykge1xuICB2YXIgdHlwZXMgPSB0eXBlc19cblxuICAvLyBubyBib2R5XG4gIGlmICghaGFzYm9keShyZXEpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIHN1cHBvcnQgZmxhdHRlbmVkIGFyZ3VtZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICB0eXBlcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0eXBlc1tpXSA9IGFyZ3VtZW50c1tpICsgMV1cbiAgICB9XG4gIH1cblxuICAvLyByZXF1ZXN0IGNvbnRlbnQgdHlwZVxuICB2YXIgdmFsdWUgPSByZXEuaGVhZGVyc1snY29udGVudC10eXBlJ11cblxuICByZXR1cm4gdHlwZWlzKHZhbHVlLCB0eXBlcylcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSBtaW1lIHR5cGUuXG4gKiBJZiBpdCdzIGEgc2hvcnRoYW5kLCBleHBhbmQgaXQgdG8gYSB2YWxpZCBtaW1lIHR5cGUuXG4gKlxuICogSW4gZ2VuZXJhbCwgeW91IHByb2JhYmx5IHdhbnQ6XG4gKlxuICogICB2YXIgdHlwZSA9IGlzKHJlcSwgWyd1cmxlbmNvZGVkJywgJ2pzb24nLCAnbXVsdGlwYXJ0J10pO1xuICpcbiAqIFRoZW4gdXNlIHRoZSBhcHByb3ByaWF0ZSBib2R5IHBhcnNlcnMuXG4gKiBUaGVzZSB0aHJlZSBhcmUgdGhlIG1vc3QgY29tbW9uIHJlcXVlc3QgYm9keSB0eXBlc1xuICogYW5kIGFyZSB0aHVzIGVuc3VyZWQgdG8gd29yay5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemUgKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGludmFsaWQgdHlwZVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAndXJsZW5jb2RlZCc6XG4gICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICBjYXNlICdtdWx0aXBhcnQnOlxuICAgICAgcmV0dXJuICdtdWx0aXBhcnQvKidcbiAgfVxuXG4gIGlmICh0eXBlWzBdID09PSAnKycpIHtcbiAgICAvLyBcIitqc29uXCIgLT4gXCIqLyoranNvblwiIGV4cGFuZG9cbiAgICByZXR1cm4gJyovKicgKyB0eXBlXG4gIH1cblxuICByZXR1cm4gdHlwZS5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBtaW1lLmxvb2t1cCh0eXBlKVxuICAgIDogdHlwZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGBleHBlY3RlZGAgbWltZSB0eXBlXG4gKiBtYXRjaGVzIGBhY3R1YWxgIG1pbWUgdHlwZSB3aXRoXG4gKiB3aWxkY2FyZCBhbmQgK3N1ZmZpeCBzdXBwb3J0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBleHBlY3RlZFxuICogQHBhcmFtIHtTdHJpbmd9IGFjdHVhbFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbWltZU1hdGNoIChleHBlY3RlZCwgYWN0dWFsKSB7XG4gIC8vIGludmFsaWQgdHlwZVxuICBpZiAoZXhwZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBzcGxpdCB0eXBlc1xuICB2YXIgYWN0dWFsUGFydHMgPSBhY3R1YWwuc3BsaXQoJy8nKVxuICB2YXIgZXhwZWN0ZWRQYXJ0cyA9IGV4cGVjdGVkLnNwbGl0KCcvJylcblxuICAvLyBpbnZhbGlkIGZvcm1hdFxuICBpZiAoYWN0dWFsUGFydHMubGVuZ3RoICE9PSAyIHx8IGV4cGVjdGVkUGFydHMubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyB2YWxpZGF0ZSB0eXBlXG4gIGlmIChleHBlY3RlZFBhcnRzWzBdICE9PSAnKicgJiYgZXhwZWN0ZWRQYXJ0c1swXSAhPT0gYWN0dWFsUGFydHNbMF0pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIHZhbGlkYXRlIHN1ZmZpeCB3aWxkY2FyZFxuICBpZiAoZXhwZWN0ZWRQYXJ0c1sxXS5zdWJzdHIoMCwgMikgPT09ICcqKycpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWRQYXJ0c1sxXS5sZW5ndGggPD0gYWN0dWFsUGFydHNbMV0ubGVuZ3RoICsgMSAmJlxuICAgICAgZXhwZWN0ZWRQYXJ0c1sxXS5zdWJzdHIoMSkgPT09IGFjdHVhbFBhcnRzWzFdLnN1YnN0cigxIC0gZXhwZWN0ZWRQYXJ0c1sxXS5sZW5ndGgpXG4gIH1cblxuICAvLyB2YWxpZGF0ZSBzdWJ0eXBlXG4gIGlmIChleHBlY3RlZFBhcnRzWzFdICE9PSAnKicgJiYgZXhwZWN0ZWRQYXJ0c1sxXSAhPT0gYWN0dWFsUGFydHNbMV0pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgdHlwZSBhbmQgcmVtb3ZlIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVR5cGUgKHZhbHVlKSB7XG4gIC8vIHBhcnNlIHRoZSB0eXBlXG4gIHZhciB0eXBlID0gdHlwZXIucGFyc2UodmFsdWUpXG5cbiAgLy8gcmVtb3ZlIHRoZSBwYXJhbWV0ZXJzXG4gIHR5cGUucGFyYW1ldGVycyA9IHVuZGVmaW5lZFxuXG4gIC8vIHJlZm9ybWF0IGl0XG4gIHJldHVybiB0eXBlci5mb3JtYXQodHlwZSlcbn1cblxuLyoqXG4gKiBUcnkgdG8gbm9ybWFsaXplIGEgdHlwZSBhbmQgcmVtb3ZlIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHRyeU5vcm1hbGl6ZVR5cGUgKHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVR5cGUodmFsdWUpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy90eXBlLWlzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIHBhcnNldXJsXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTcgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKVxudmFyIHBhcnNlID0gdXJsLnBhcnNlXG52YXIgVXJsID0gdXJsLlVybFxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2V1cmxcbm1vZHVsZS5leHBvcnRzLm9yaWdpbmFsID0gb3JpZ2luYWx1cmxcblxuLyoqXG4gKiBQYXJzZSB0aGUgYHJlcWAgdXJsIHdpdGggbWVtb2l6YXRpb24uXG4gKlxuICogQHBhcmFtIHtTZXJ2ZXJSZXF1ZXN0fSByZXFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZXVybCAocmVxKSB7XG4gIHZhciB1cmwgPSByZXEudXJsXG5cbiAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gVVJMIGlzIHVuZGVmaW5lZFxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIHZhciBwYXJzZWQgPSByZXEuX3BhcnNlZFVybFxuXG4gIGlmIChmcmVzaCh1cmwsIHBhcnNlZCkpIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIFVSTCBwYXJzZVxuICAgIHJldHVybiBwYXJzZWRcbiAgfVxuXG4gIC8vIFBhcnNlIHRoZSBVUkxcbiAgcGFyc2VkID0gZmFzdHBhcnNlKHVybClcbiAgcGFyc2VkLl9yYXcgPSB1cmxcblxuICByZXR1cm4gKHJlcS5fcGFyc2VkVXJsID0gcGFyc2VkKVxufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgYHJlcWAgb3JpZ2luYWwgdXJsIHdpdGggZmFsbGJhY2sgYW5kIG1lbW9pemF0aW9uLlxuICpcbiAqIEBwYXJhbSB7U2VydmVyUmVxdWVzdH0gcmVxXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gb3JpZ2luYWx1cmwgKHJlcSkge1xuICB2YXIgdXJsID0gcmVxLm9yaWdpbmFsVXJsXG5cbiAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gRmFsbGJhY2tcbiAgICByZXR1cm4gcGFyc2V1cmwocmVxKVxuICB9XG5cbiAgdmFyIHBhcnNlZCA9IHJlcS5fcGFyc2VkT3JpZ2luYWxVcmxcblxuICBpZiAoZnJlc2godXJsLCBwYXJzZWQpKSB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBVUkwgcGFyc2VcbiAgICByZXR1cm4gcGFyc2VkXG4gIH1cblxuICAvLyBQYXJzZSB0aGUgVVJMXG4gIHBhcnNlZCA9IGZhc3RwYXJzZSh1cmwpXG4gIHBhcnNlZC5fcmF3ID0gdXJsXG5cbiAgcmV0dXJuIChyZXEuX3BhcnNlZE9yaWdpbmFsVXJsID0gcGFyc2VkKVxufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgYHN0cmAgdXJsIHdpdGggZmFzdC1wYXRoIHNob3J0LWN1dC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZhc3RwYXJzZSAoc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBzdHIuY2hhckNvZGVBdCgwKSAhPT0gMHgyZiAvKiAvICovKSB7XG4gICAgcmV0dXJuIHBhcnNlKHN0cilcbiAgfVxuXG4gIHZhciBwYXRobmFtZSA9IHN0clxuICB2YXIgcXVlcnkgPSBudWxsXG4gIHZhciBzZWFyY2ggPSBudWxsXG5cbiAgLy8gVGhpcyB0YWtlcyB0aGUgcmVnZXhwIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL3B1bGwvNzg3OFxuICAvLyBXaGljaCBpcyAvXihcXC9bXj8jXFxzXSopKFxcP1teI1xcc10qKT8kL1xuICAvLyBBbmQgdW5yb2xscyBpdCBpbnRvIGEgZm9yIGxvb3BcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBzd2l0Y2ggKHN0ci5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4M2Y6IC8qID8gICovXG4gICAgICAgIGlmIChzZWFyY2ggPT09IG51bGwpIHtcbiAgICAgICAgICBwYXRobmFtZSA9IHN0ci5zdWJzdHJpbmcoMCwgaSlcbiAgICAgICAgICBxdWVyeSA9IHN0ci5zdWJzdHJpbmcoaSArIDEpXG4gICAgICAgICAgc2VhcmNoID0gc3RyLnN1YnN0cmluZyhpKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDB4MDk6IC8qIFxcdCAqL1xuICAgICAgY2FzZSAweDBhOiAvKiBcXG4gKi9cbiAgICAgIGNhc2UgMHgwYzogLyogXFxmICovXG4gICAgICBjYXNlIDB4MGQ6IC8qIFxcciAqL1xuICAgICAgY2FzZSAweDIwOiAvKiAgICAqL1xuICAgICAgY2FzZSAweDIzOiAvKiAjICAqL1xuICAgICAgY2FzZSAweGEwOlxuICAgICAgY2FzZSAweGZlZmY6XG4gICAgICAgIHJldHVybiBwYXJzZShzdHIpXG4gICAgfVxuICB9XG5cbiAgdmFyIHVybCA9IFVybCAhPT0gdW5kZWZpbmVkXG4gICAgPyBuZXcgVXJsKClcbiAgICA6IHt9XG4gIHVybC5wYXRoID0gc3RyXG4gIHVybC5ocmVmID0gc3RyXG4gIHVybC5wYXRobmFtZSA9IHBhdGhuYW1lXG4gIHVybC5xdWVyeSA9IHF1ZXJ5XG4gIHVybC5zZWFyY2ggPSBzZWFyY2hcblxuICByZXR1cm4gdXJsXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHBhcnNlZCBpcyBzdGlsbCBmcmVzaCBmb3IgdXJsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJzZWRVcmxcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZyZXNoICh1cmwsIHBhcnNlZFVybCkge1xuICByZXR1cm4gdHlwZW9mIHBhcnNlZFVybCA9PT0gJ29iamVjdCcgJiZcbiAgICBwYXJzZWRVcmwgIT09IG51bGwgJiZcbiAgICAoVXJsID09PSB1bmRlZmluZWQgfHwgcGFyc2VkVXJsIGluc3RhbmNlb2YgVXJsKSAmJlxuICAgIHBhcnNlZFVybC5fcmF3ID09PSB1cmxcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9wYXJzZXVybC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2pzb24vc3RyaW5naWZ5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeS5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZVwiKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vcHJvbWlzZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qc1xuLy8gbW9kdWxlIGlkID0gMjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanNcbi8vIG1vZHVsZSBpZCA9IDI2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0ge307XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qc1xuLy8gbW9kdWxlIGlkID0gMjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanNcbi8vIG1vZHVsZSBpZCA9IDI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Zvci1vZi5qc1xuLy8gbW9kdWxlIGlkID0gMjlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgZ2V0SnNvbkRhdGFTeW5jLCB3cml0ZUpzb25EYXRhU3luYyB9IGZyb20gJy4vanNvbidcbmltcG9ydCB7IEFOT01BTElFU19QQVRIIH0gZnJvbSAnLi4vY29uZmlnJ1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuZXhwb3J0IHR5cGUgRGF0YXNvdXJjZSA9IHtcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIGRhdGE6IE9iamVjdCxcbiAgcGFyYW1zOiBPYmplY3QsXG4gIHR5cGU6IHN0cmluZyxcbiAgdXJsOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWV0cmljID0ge1xuICBkYXRhc291cmNlOiBzdHJpbmcsXG4gIHRhcmdldHM6IHN0cmluZ1tdXG59XG5cbmV4cG9ydCB0eXBlIEFub21hbHkgPSB7XG4gIG5hbWU6IHN0cmluZyxcblxuICBwYW5lbFVybDogc3RyaW5nLFxuXG4gIG1ldHJpYzogTWV0cmljLFxuICBkYXRhc291cmNlOiBEYXRhc291cmNlXG4gIHN0YXR1czogc3RyaW5nLFxuICBlcnJvcj86IHN0cmluZyxcblxuICBsYXN0X3ByZWRpY3Rpb25fdGltZTogbnVtYmVyLFxuICBuZXh0X2lkOiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgQW5vbWFseUlkID0gc3RyaW5nO1xuXG5sZXQgYW5vbWFsaWVzTmFtZVRvSWRNYXAgPSB7fTtcblxuZnVuY3Rpb24gbG9hZEFub21hbGllc01hcCgpIHtcbiAgbGV0IGZpbGVuYW1lID0gcGF0aC5qb2luKEFOT01BTElFU19QQVRILCBgYWxsX2Fub21hbGllcy5qc29uYCk7XG4gIGFub21hbGllc05hbWVUb0lkTWFwID0gZ2V0SnNvbkRhdGFTeW5jKGZpbGVuYW1lKTtcbn1cblxuZnVuY3Rpb24gc2F2ZUFub21hbGllc01hcCgpIHtcbiAgbGV0IGZpbGVuYW1lID0gcGF0aC5qb2luKEFOT01BTElFU19QQVRILCBgYWxsX2Fub21hbGllcy5qc29uYCk7XG4gIHdyaXRlSnNvbkRhdGFTeW5jKGZpbGVuYW1lLCBhbm9tYWxpZXNOYW1lVG9JZE1hcCk7XG59XG5cbmZ1bmN0aW9uIGdldEFub21hbHlJZEJ5TmFtZShhbm9tYWx5TmFtZTpzdHJpbmcpIDogQW5vbWFseUlkIHtcbiAgbG9hZEFub21hbGllc01hcCgpO1xuICBhbm9tYWx5TmFtZSA9IGFub21hbHlOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGlmKGFub21hbHlOYW1lIGluIGFub21hbGllc05hbWVUb0lkTWFwKSB7XG4gICAgcmV0dXJuIGFub21hbGllc05hbWVUb0lkTWFwW2Fub21hbHlOYW1lXTtcbiAgfVxuICByZXR1cm4gYW5vbWFseU5hbWU7XG59XG5cbmZ1bmN0aW9uIGluc2VydEFub21hbHkoYW5vbWFseTogQW5vbWFseSkgOiBBbm9tYWx5SWQge1xuICBjb25zdCBoYXNoU3RyaW5nID0gYW5vbWFseS5uYW1lICsgKG5ldyBEYXRlKCkpLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGFub21hbHlJZDpBbm9tYWx5SWQgPSBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGhhc2hTdHJpbmcpLmRpZ2VzdCgnaGV4Jyk7XG4gIGFub21hbGllc05hbWVUb0lkTWFwW2Fub21hbHkubmFtZV0gPSBhbm9tYWx5SWQ7XG4gIHNhdmVBbm9tYWxpZXNNYXAoKTtcbiAgLy8gcmV0dXJuIGFub21hbHlJZFxuICAvLyBjb25zdCBhbm9tYWx5SWQ6QW5vbWFseUlkID0gYW5vbWFseS5uYW1lO1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGAke2Fub21hbHlJZH0uanNvbmApO1xuICBpZihmcy5leGlzdHNTeW5jKGZpbGVuYW1lKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHNhdmVBbm9tYWx5KGFub21hbHlJZCwgYW5vbWFseSk7XG4gIHJldHVybiBhbm9tYWx5SWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFub21hbHkoYW5vbWFseUlkOkFub21hbHlJZCkge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGAke2Fub21hbHlJZH0uanNvbmApO1xuICBmcy51bmxpbmtTeW5jKGZpbGVuYW1lKTtcbn1cblxuZnVuY3Rpb24gc2F2ZUFub21hbHkoYW5vbWFseUlkOiBBbm9tYWx5SWQsIGFub21hbHk6IEFub21hbHkpIHtcbiAgbGV0IGZpbGVuYW1lID0gcGF0aC5qb2luKEFOT01BTElFU19QQVRILCBgJHthbm9tYWx5SWR9Lmpzb25gKTtcbiAgcmV0dXJuIHdyaXRlSnNvbkRhdGFTeW5jKGZpbGVuYW1lLCBhbm9tYWx5KTtcbn1cblxuZnVuY3Rpb24gbG9hZEFub21hbHlCeUlkKGFub21hbHlJZDogQW5vbWFseUlkKSA6IEFub21hbHkge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGAke2Fub21hbHlJZH0uanNvbmApO1xuICBpZighZnMuZXhpc3RzU3luYyhmaWxlbmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZ2V0SnNvbkRhdGFTeW5jKGZpbGVuYW1lKTtcbn1cblxuZnVuY3Rpb24gbG9hZEFub21hbHlCeU5hbWUoYW5vbWFseU5hbWU6IHN0cmluZykgOiBBbm9tYWx5IHtcbiAgbGV0IGFub21hbHlJZCA9IGdldEFub21hbHlJZEJ5TmFtZShhbm9tYWx5TmFtZSk7XG4gIHJldHVybiBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkKTtcbn1cblxuZnVuY3Rpb24gc2F2ZUFub21hbHlUeXBlSW5mbyhpbmZvKSB7XG4gIGNvbnNvbGUubG9nKCdTYXZpbmcnKTtcbiAgbGV0IGZpbGVuYW1lID0gcGF0aC5qb2luKEFOT01BTElFU19QQVRILCBgJHtpbmZvLm5hbWV9Lmpzb25gKTtcbiAgaWYoaW5mby5uZXh0X2lkID09PSB1bmRlZmluZWQpIHtcbiAgICBpbmZvLm5leHRfaWQgPSAwO1xuICB9XG4gIGlmKGluZm8ubGFzdF9wcmVkaWN0aW9uX3RpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5mby5sYXN0X3ByZWRpY3Rpb25fdGltZSA9IDA7XG4gIH1cblxuICByZXR1cm4gd3JpdGVKc29uRGF0YVN5bmMoZmlsZW5hbWUsIGluZm8pO1xufVxuXG5mdW5jdGlvbiBnZXRBbm9tYWx5VHlwZUluZm8obmFtZSkge1xuICByZXR1cm4gZ2V0SnNvbkRhdGFTeW5jKHBhdGguam9pbihBTk9NQUxJRVNfUEFUSCwgYCR7bmFtZX0uanNvbmApKTtcbn1cblxuZnVuY3Rpb24gc2V0QW5vbWFseVN0YXR1cyhhbm9tYWx5SWQ6QW5vbWFseUlkLCBzdGF0dXM6c3RyaW5nLCBlcnJvcj86c3RyaW5nKSB7XG4gIGxldCBpbmZvID0gbG9hZEFub21hbHlCeUlkKGFub21hbHlJZCk7XG4gIGluZm8uc3RhdHVzID0gc3RhdHVzO1xuICBpZihlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaW5mby5lcnJvciA9IGVycm9yO1xuICB9IGVsc2Uge1xuICAgIGluZm8uZXJyb3IgPSAnJztcbiAgfVxuICBzYXZlQW5vbWFseShhbm9tYWx5SWQsIGluZm8pO1xufVxuXG5mdW5jdGlvbiBzZXRBbm9tYWx5UHJlZGljdGlvblRpbWUoYW5vbWFseUlkOkFub21hbHlJZCwgbGFzdFByZWRpY3Rpb25UaW1lOm51bWJlcikge1xuICBsZXQgaW5mbyA9IGxvYWRBbm9tYWx5QnlJZChhbm9tYWx5SWQpO1xuICBpbmZvLmxhc3RfcHJlZGljdGlvbl90aW1lID0gbGFzdFByZWRpY3Rpb25UaW1lO1xuICBzYXZlQW5vbWFseShhbm9tYWx5SWQsIGluZm8pO1xufVxuXG5leHBvcnQge1xuICBzYXZlQW5vbWFseSwgbG9hZEFub21hbHlCeUlkLCBsb2FkQW5vbWFseUJ5TmFtZSwgaW5zZXJ0QW5vbWFseSwgcmVtb3ZlQW5vbWFseSwgc2F2ZUFub21hbHlUeXBlSW5mbyxcbiAgZ2V0QW5vbWFseVR5cGVJbmZvLCBnZXRBbm9tYWx5SWRCeU5hbWUsIHNldEFub21hbHlTdGF0dXMsIHNldEFub21hbHlQcmVkaWN0aW9uVGltZVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmljZXMvYW5vbWFseVR5cGUudHMiLCJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEpzb25EYXRhKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE9iamVjdD4ge1xuICB2YXIgZGF0YSA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLnJlYWRGaWxlKGZpbGVuYW1lLCAndXRmOCcsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgIGlmKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHJlamVjdCgnQ2FuYHQgcmVhZCBmaWxlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgZmlsZSBmb3JtYXQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZUpzb25EYXRhKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGE6IE9iamVjdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLndyaXRlRmlsZShmaWxlbmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSksICd1dGY4JywgKGVycikgPT4ge1xuICAgICAgaWYoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgcmVqZWN0KCdDYXRgdCB3cml0ZSBmaWxlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldEpzb25EYXRhU3luYyhmaWxlbmFtZTogc3RyaW5nKSB7XG4gIGxldCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCAndXRmOCcpO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgZmlsZSBmb3JtYXQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZUpzb25EYXRhU3luYyhmaWxlbmFtZTogc3RyaW5nLCBkYXRhOiBPYmplY3QpIHtcbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlbmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQge1xuICBnZXRKc29uRGF0YSxcbiAgd3JpdGVKc29uRGF0YSxcbiAgZ2V0SnNvbkRhdGFTeW5jLFxuICB3cml0ZUpzb25EYXRhU3luY1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmljZXMvanNvbi50cyIsIi8qIVxuICogZXhwcmVzc1xuICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMyBUSiBIb2xvd2F5Y2h1a1xuICogQ29weXJpZ2h0KGMpIDIwMTMgUm9tYW4gU2h0eWxtYW5cbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9leHByZXNzJyk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZXhwcmVzcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBjb250ZW50LXR5cGVcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggKiggXCI7XCIgcGFyYW1ldGVyICkgaW4gUkZDIDcyMzEgc2VjIDMuMS4xLjFcbiAqXG4gKiBwYXJhbWV0ZXIgICAgID0gdG9rZW4gXCI9XCIgKCB0b2tlbiAvIHF1b3RlZC1zdHJpbmcgKVxuICogdG9rZW4gICAgICAgICA9IDEqdGNoYXJcbiAqIHRjaGFyICAgICAgICAgPSBcIiFcIiAvIFwiI1wiIC8gXCIkXCIgLyBcIiVcIiAvIFwiJlwiIC8gXCInXCIgLyBcIipcIlxuICogICAgICAgICAgICAgICAvIFwiK1wiIC8gXCItXCIgLyBcIi5cIiAvIFwiXlwiIC8gXCJfXCIgLyBcImBcIiAvIFwifFwiIC8gXCJ+XCJcbiAqICAgICAgICAgICAgICAgLyBESUdJVCAvIEFMUEhBXG4gKiAgICAgICAgICAgICAgIDsgYW55IFZDSEFSLCBleGNlcHQgZGVsaW1pdGVyc1xuICogcXVvdGVkLXN0cmluZyA9IERRVU9URSAqKCBxZHRleHQgLyBxdW90ZWQtcGFpciApIERRVU9URVxuICogcWR0ZXh0ICAgICAgICA9IEhUQUIgLyBTUCAvICV4MjEgLyAleDIzLTVCIC8gJXg1RC03RSAvIG9icy10ZXh0XG4gKiBvYnMtdGV4dCAgICAgID0gJXg4MC1GRlxuICogcXVvdGVkLXBhaXIgICA9IFwiXFxcIiAoIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICovXG52YXIgUEFSQU1fUkVHRVhQID0gLzsgKihbISMkJSYnKisuXl9gfH4wLTlBLVphLXotXSspICo9ICooXCIoPzpbXFx1MDAwYlxcdTAwMjBcXHUwMDIxXFx1MDAyMy1cXHUwMDViXFx1MDA1ZC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXXxcXFxcW1xcdTAwMGJcXHUwMDIwLVxcdTAwZmZdKSpcInxbISMkJSYnKisuXl9gfH4wLTlBLVphLXotXSspICovZ1xudmFyIFRFWFRfUkVHRVhQID0gL15bXFx1MDAwYlxcdTAwMjAtXFx1MDA3ZVxcdTAwODAtXFx1MDBmZl0rJC9cbnZhciBUT0tFTl9SRUdFWFAgPSAvXlshIyQlJicqKy5eX2B8fjAtOUEtWmEtei1dKyQvXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHF1b3RlZC1wYWlyIGluIFJGQyA3MjMwIHNlYyAzLjIuNlxuICpcbiAqIHF1b3RlZC1wYWlyID0gXCJcXFwiICggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gKiBvYnMtdGV4dCAgICA9ICV4ODAtRkZcbiAqL1xudmFyIFFFU0NfUkVHRVhQID0gL1xcXFwoW1xcdTAwMGJcXHUwMDIwLVxcdTAwZmZdKS9nXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIGNoYXJzIHRoYXQgbXVzdCBiZSBxdW90ZWQtcGFpciBpbiBSRkMgNzIzMCBzZWMgMy4yLjZcbiAqL1xudmFyIFFVT1RFX1JFR0VYUCA9IC8oW1xcXFxcIl0pL2dcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggdHlwZSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIG1lZGlhLXR5cGUgPSB0eXBlIFwiL1wiIHN1YnR5cGVcbiAqIHR5cGUgICAgICAgPSB0b2tlblxuICogc3VidHlwZSAgICA9IHRva2VuXG4gKi9cbnZhciBUWVBFX1JFR0VYUCA9IC9eWyEjJCUmJyorLl5fYHx+MC05QS1aYS16LV0rXFwvWyEjJCUmJyorLl5fYHx+MC05QS1aYS16LV0rJC9cblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdFxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5cbi8qKlxuICogRm9ybWF0IG9iamVjdCB0byBtZWRpYSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXQgKG9iaikge1xuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG9iaiBpcyByZXF1aXJlZCcpXG4gIH1cblxuICB2YXIgcGFyYW1ldGVycyA9IG9iai5wYXJhbWV0ZXJzXG4gIHZhciB0eXBlID0gb2JqLnR5cGVcblxuICBpZiAoIXR5cGUgfHwgIVRZUEVfUkVHRVhQLnRlc3QodHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHR5cGUnKVxuICB9XG5cbiAgdmFyIHN0cmluZyA9IHR5cGVcblxuICAvLyBhcHBlbmQgcGFyYW1ldGVyc1xuICBpZiAocGFyYW1ldGVycyAmJiB0eXBlb2YgcGFyYW1ldGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcGFyYW1cbiAgICB2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMocGFyYW1ldGVycykuc29ydCgpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFyYW0gPSBwYXJhbXNbaV1cblxuICAgICAgaWYgKCFUT0tFTl9SRUdFWFAudGVzdChwYXJhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXJhbWV0ZXIgbmFtZScpXG4gICAgICB9XG5cbiAgICAgIHN0cmluZyArPSAnOyAnICsgcGFyYW0gKyAnPScgKyBxc3RyaW5nKHBhcmFtZXRlcnNbcGFyYW1dKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJpbmdcbn1cblxuLyoqXG4gKiBQYXJzZSBtZWRpYSB0eXBlIHRvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHN0cmluZ1xuICogQHJldHVybiB7T2JqZWN0fVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHBhcnNlIChzdHJpbmcpIHtcbiAgaWYgKCFzdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBzdHJpbmcgaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gc3VwcG9ydCByZXEvcmVzLWxpa2Ugb2JqZWN0cyBhcyBhcmd1bWVudFxuICB2YXIgaGVhZGVyID0gdHlwZW9mIHN0cmluZyA9PT0gJ29iamVjdCdcbiAgICA/IGdldGNvbnRlbnR0eXBlKHN0cmluZylcbiAgICA6IHN0cmluZ1xuXG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHN0cmluZyBpcyByZXF1aXJlZCB0byBiZSBhIHN0cmluZycpXG4gIH1cblxuICB2YXIgaW5kZXggPSBoZWFkZXIuaW5kZXhPZignOycpXG4gIHZhciB0eXBlID0gaW5kZXggIT09IC0xXG4gICAgPyBoZWFkZXIuc3Vic3RyKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAoIVRZUEVfUkVHRVhQLnRlc3QodHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIG1lZGlhIHR5cGUnKVxuICB9XG5cbiAgdmFyIG9iaiA9IG5ldyBDb250ZW50VHlwZSh0eXBlLnRvTG93ZXJDYXNlKCkpXG5cbiAgLy8gcGFyc2UgcGFyYW1ldGVyc1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdmFyIGtleVxuICAgIHZhciBtYXRjaFxuICAgIHZhciB2YWx1ZVxuXG4gICAgUEFSQU1fUkVHRVhQLmxhc3RJbmRleCA9IGluZGV4XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gUEFSQU1fUkVHRVhQLmV4ZWMoaGVhZGVyKSkpIHtcbiAgICAgIGlmIChtYXRjaC5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXJhbWV0ZXIgZm9ybWF0JylcbiAgICAgIH1cblxuICAgICAgaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICBrZXkgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpXG4gICAgICB2YWx1ZSA9IG1hdGNoWzJdXG5cbiAgICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgICAvLyByZW1vdmUgcXVvdGVzIGFuZCBlc2NhcGVzXG4gICAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgICAuc3Vic3RyKDEsIHZhbHVlLmxlbmd0aCAtIDIpXG4gICAgICAgICAgLnJlcGxhY2UoUUVTQ19SRUdFWFAsICckMScpXG4gICAgICB9XG5cbiAgICAgIG9iai5wYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChpbmRleCAhPT0gaGVhZGVyLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXJhbWV0ZXIgZm9ybWF0JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICogR2V0IGNvbnRlbnQtdHlwZSBmcm9tIHJlcS9yZXMgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0Y29udGVudHR5cGUgKG9iaikge1xuICB2YXIgaGVhZGVyXG5cbiAgaWYgKHR5cGVvZiBvYmouZ2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gcmVzLWxpa2VcbiAgICBoZWFkZXIgPSBvYmouZ2V0SGVhZGVyKCdjb250ZW50LXR5cGUnKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmouaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyByZXEtbGlrZVxuICAgIGhlYWRlciA9IG9iai5oZWFkZXJzICYmIG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29udGVudC10eXBlIGhlYWRlciBpcyBtaXNzaW5nIGZyb20gb2JqZWN0JylcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJcbn1cblxuLyoqXG4gKiBRdW90ZSBhIHN0cmluZyBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBxc3RyaW5nICh2YWwpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyh2YWwpXG5cbiAgLy8gbm8gbmVlZCB0byBxdW90ZSB0b2tlbnNcbiAgaWYgKFRPS0VOX1JFR0VYUC50ZXN0KHN0cikpIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cblxuICBpZiAoc3RyLmxlbmd0aCA+IDAgJiYgIVRFWFRfUkVHRVhQLnRlc3Qoc3RyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIHZhbHVlJylcbiAgfVxuXG4gIHJldHVybiAnXCInICsgc3RyLnJlcGxhY2UoUVVPVEVfUkVHRVhQLCAnXFxcXCQxJykgKyAnXCInXG59XG5cbi8qKlxuICogQ2xhc3MgdG8gcmVwcmVzZW50IGEgY29udGVudCB0eXBlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gQ29udGVudFR5cGUgKHR5cGUpIHtcbiAgdGhpcy5wYXJhbWV0ZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICB0aGlzLnR5cGUgPSB0eXBlXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29udGVudC10eXBlL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAzM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGh0dHAtZXJyb3JzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE2IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGVwcmVjYXRlID0gcmVxdWlyZSgnZGVwZCcpKCdodHRwLWVycm9ycycpXG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdzZXRwcm90b3R5cGVvZicpXG52YXIgc3RhdHVzZXMgPSByZXF1aXJlKCdzdGF0dXNlcycpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVFcnJvclxubW9kdWxlLmV4cG9ydHMuSHR0cEVycm9yID0gY3JlYXRlSHR0cEVycm9yQ29uc3RydWN0b3IoKVxuXG4vLyBQb3B1bGF0ZSBleHBvcnRzIGZvciBhbGwgY29uc3RydWN0b3JzXG5wb3B1bGF0ZUNvbnN0cnVjdG9yRXhwb3J0cyhtb2R1bGUuZXhwb3J0cywgc3RhdHVzZXMuY29kZXMsIG1vZHVsZS5leHBvcnRzLkh0dHBFcnJvcilcblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgY2xhc3Mgb2YgYSBzdGF0dXMgY29kZS5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29kZUNsYXNzIChzdGF0dXMpIHtcbiAgcmV0dXJuIE51bWJlcihTdHJpbmcoc3RhdHVzKS5jaGFyQXQoMCkgKyAnMDAnKVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBIVFRQIEVycm9yLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFcnJvciAoKSB7XG4gIC8vIHNvIG11Y2ggYXJpdHkgZ29pbmcgb24gfl9+XG4gIHZhciBlcnJcbiAgdmFyIG1zZ1xuICB2YXIgc3RhdHVzID0gNTAwXG4gIHZhciBwcm9wcyA9IHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXVxuICAgIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgZXJyID0gYXJnXG4gICAgICBzdGF0dXMgPSBlcnIuc3RhdHVzIHx8IGVyci5zdGF0dXNDb2RlIHx8IHN0YXR1c1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICBtc2cgPSBhcmdcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHN0YXR1cyA9IGFyZ1xuICAgICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICAgIGRlcHJlY2F0ZSgnbm9uLWZpcnN0LWFyZ3VtZW50IHN0YXR1cyBjb2RlOyByZXBsYWNlIHdpdGggY3JlYXRlRXJyb3IoJyArIGFyZyArICcsIC4uLiknKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBwcm9wcyA9IGFyZ1xuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RhdHVzID09PSAnbnVtYmVyJyAmJiAoc3RhdHVzIDwgNDAwIHx8IHN0YXR1cyA+PSA2MDApKSB7XG4gICAgZGVwcmVjYXRlKCdub24tZXJyb3Igc3RhdHVzIGNvZGU7IHVzZSBvbmx5IDR4eCBvciA1eHggc3RhdHVzIGNvZGVzJylcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RhdHVzICE9PSAnbnVtYmVyJyB8fFxuICAgICghc3RhdHVzZXNbc3RhdHVzXSAmJiAoc3RhdHVzIDwgNDAwIHx8IHN0YXR1cyA+PSA2MDApKSkge1xuICAgIHN0YXR1cyA9IDUwMFxuICB9XG5cbiAgLy8gY29uc3RydWN0b3JcbiAgdmFyIEh0dHBFcnJvciA9IGNyZWF0ZUVycm9yW3N0YXR1c10gfHwgY3JlYXRlRXJyb3JbY29kZUNsYXNzKHN0YXR1cyldXG5cbiAgaWYgKCFlcnIpIHtcbiAgICAvLyBjcmVhdGUgZXJyb3JcbiAgICBlcnIgPSBIdHRwRXJyb3JcbiAgICAgID8gbmV3IEh0dHBFcnJvcihtc2cpXG4gICAgICA6IG5ldyBFcnJvcihtc2cgfHwgc3RhdHVzZXNbc3RhdHVzXSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIGNyZWF0ZUVycm9yKVxuICB9XG5cbiAgaWYgKCFIdHRwRXJyb3IgfHwgIShlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3IpIHx8IGVyci5zdGF0dXMgIT09IHN0YXR1cykge1xuICAgIC8vIGFkZCBwcm9wZXJ0aWVzIHRvIGdlbmVyaWMgZXJyb3JcbiAgICBlcnIuZXhwb3NlID0gc3RhdHVzIDwgNTAwXG4gICAgZXJyLnN0YXR1cyA9IGVyci5zdGF0dXNDb2RlID0gc3RhdHVzXG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoa2V5ICE9PSAnc3RhdHVzJyAmJiBrZXkgIT09ICdzdGF0dXNDb2RlJykge1xuICAgICAgZXJyW2tleV0gPSBwcm9wc1trZXldXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVyclxufVxuXG4vKipcbiAqIENyZWF0ZSBIVFRQIGVycm9yIGFic3RyYWN0IGJhc2UgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUh0dHBFcnJvckNvbnN0cnVjdG9yICgpIHtcbiAgZnVuY3Rpb24gSHR0cEVycm9yICgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3QgY29uc3RydWN0IGFic3RyYWN0IGNsYXNzJylcbiAgfVxuXG4gIGluaGVyaXRzKEh0dHBFcnJvciwgRXJyb3IpXG5cbiAgcmV0dXJuIEh0dHBFcnJvclxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhIGNsaWVudCBlcnJvci5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlQ2xpZW50RXJyb3JDb25zdHJ1Y3RvciAoSHR0cEVycm9yLCBuYW1lLCBjb2RlKSB7XG4gIHZhciBjbGFzc05hbWUgPSBuYW1lLm1hdGNoKC9FcnJvciQvKSA/IG5hbWUgOiBuYW1lICsgJ0Vycm9yJ1xuXG4gIGZ1bmN0aW9uIENsaWVudEVycm9yIChtZXNzYWdlKSB7XG4gICAgLy8gY3JlYXRlIHRoZSBlcnJvciBvYmplY3RcbiAgICB2YXIgbXNnID0gbWVzc2FnZSAhPSBudWxsID8gbWVzc2FnZSA6IHN0YXR1c2VzW2NvZGVdXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihtc2cpXG5cbiAgICAvLyBjYXB0dXJlIGEgc3RhY2sgdHJhY2UgdG8gdGhlIGNvbnN0cnVjdGlvbiBwb2ludFxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgQ2xpZW50RXJyb3IpXG5cbiAgICAvLyBhZGp1c3QgdGhlIFtbUHJvdG90eXBlXV1cbiAgICBzZXRQcm90b3R5cGVPZihlcnIsIENsaWVudEVycm9yLnByb3RvdHlwZSlcblxuICAgIC8vIHJlZGVmaW5lIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ21lc3NhZ2UnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG1zZyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSlcblxuICAgIC8vIHJlZGVmaW5lIHRoZSBlcnJvciBuYW1lXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ25hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBjbGFzc05hbWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pXG5cbiAgICByZXR1cm4gZXJyXG4gIH1cblxuICBpbmhlcml0cyhDbGllbnRFcnJvciwgSHR0cEVycm9yKVxuXG4gIENsaWVudEVycm9yLnByb3RvdHlwZS5zdGF0dXMgPSBjb2RlXG4gIENsaWVudEVycm9yLnByb3RvdHlwZS5zdGF0dXNDb2RlID0gY29kZVxuICBDbGllbnRFcnJvci5wcm90b3R5cGUuZXhwb3NlID0gdHJ1ZVxuXG4gIHJldHVybiBDbGllbnRFcnJvclxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhIHNlcnZlciBlcnJvci5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlU2VydmVyRXJyb3JDb25zdHJ1Y3RvciAoSHR0cEVycm9yLCBuYW1lLCBjb2RlKSB7XG4gIHZhciBjbGFzc05hbWUgPSBuYW1lLm1hdGNoKC9FcnJvciQvKSA/IG5hbWUgOiBuYW1lICsgJ0Vycm9yJ1xuXG4gIGZ1bmN0aW9uIFNlcnZlckVycm9yIChtZXNzYWdlKSB7XG4gICAgLy8gY3JlYXRlIHRoZSBlcnJvciBvYmplY3RcbiAgICB2YXIgbXNnID0gbWVzc2FnZSAhPSBudWxsID8gbWVzc2FnZSA6IHN0YXR1c2VzW2NvZGVdXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihtc2cpXG5cbiAgICAvLyBjYXB0dXJlIGEgc3RhY2sgdHJhY2UgdG8gdGhlIGNvbnN0cnVjdGlvbiBwb2ludFxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgU2VydmVyRXJyb3IpXG5cbiAgICAvLyBhZGp1c3QgdGhlIFtbUHJvdG90eXBlXV1cbiAgICBzZXRQcm90b3R5cGVPZihlcnIsIFNlcnZlckVycm9yLnByb3RvdHlwZSlcblxuICAgIC8vIHJlZGVmaW5lIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ21lc3NhZ2UnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG1zZyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSlcblxuICAgIC8vIHJlZGVmaW5lIHRoZSBlcnJvciBuYW1lXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ25hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBjbGFzc05hbWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pXG5cbiAgICByZXR1cm4gZXJyXG4gIH1cblxuICBpbmhlcml0cyhTZXJ2ZXJFcnJvciwgSHR0cEVycm9yKVxuXG4gIFNlcnZlckVycm9yLnByb3RvdHlwZS5zdGF0dXMgPSBjb2RlXG4gIFNlcnZlckVycm9yLnByb3RvdHlwZS5zdGF0dXNDb2RlID0gY29kZVxuICBTZXJ2ZXJFcnJvci5wcm90b3R5cGUuZXhwb3NlID0gZmFsc2VcblxuICByZXR1cm4gU2VydmVyRXJyb3Jcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXhwb3J0cyBvYmplY3Qgd2l0aCBjb25zdHJ1Y3RvcnMgZm9yIGV2ZXJ5IGVycm9yIGNsYXNzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwb3B1bGF0ZUNvbnN0cnVjdG9yRXhwb3J0cyAoZXhwb3J0cywgY29kZXMsIEh0dHBFcnJvcikge1xuICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hDb2RlIChjb2RlKSB7XG4gICAgdmFyIENvZGVFcnJvclxuICAgIHZhciBuYW1lID0gdG9JZGVudGlmaWVyKHN0YXR1c2VzW2NvZGVdKVxuXG4gICAgc3dpdGNoIChjb2RlQ2xhc3MoY29kZSkpIHtcbiAgICAgIGNhc2UgNDAwOlxuICAgICAgICBDb2RlRXJyb3IgPSBjcmVhdGVDbGllbnRFcnJvckNvbnN0cnVjdG9yKEh0dHBFcnJvciwgbmFtZSwgY29kZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgNTAwOlxuICAgICAgICBDb2RlRXJyb3IgPSBjcmVhdGVTZXJ2ZXJFcnJvckNvbnN0cnVjdG9yKEh0dHBFcnJvciwgbmFtZSwgY29kZSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBpZiAoQ29kZUVycm9yKSB7XG4gICAgICAvLyBleHBvcnQgdGhlIGNvbnN0cnVjdG9yXG4gICAgICBleHBvcnRzW2NvZGVdID0gQ29kZUVycm9yXG4gICAgICBleHBvcnRzW25hbWVdID0gQ29kZUVycm9yXG4gICAgfVxuICB9KVxuXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5XG4gIGV4cG9ydHNbXCJJJ21hdGVhcG90XCJdID0gZGVwcmVjYXRlLmZ1bmN0aW9uKGV4cG9ydHMuSW1BVGVhcG90LFxuICAgICdcIklcXCdtYXRlYXBvdFwiOyB1c2UgXCJJbUFUZWFwb3RcIiBpbnN0ZWFkJylcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIG9mIHdvcmRzIHRvIGEgSmF2YVNjcmlwdCBpZGVudGlmaWVyLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB0b0lkZW50aWZpZXIgKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KCcgJykubWFwKGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHJldHVybiB0b2tlbi5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgdG9rZW4uc2xpY2UoMSlcbiAgfSkuam9pbignJykucmVwbGFjZSgvW14gXzAtOWEtel0vZ2ksICcnKVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2h0dHAtZXJyb3JzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAzNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoe19fcHJvdG9fXzpbXX0gaW5zdGFuY2VvZiBBcnJheSA/IHNldFByb3RvT2YgOiBtaXhpblByb3BlcnRpZXMpO1xuXG5mdW5jdGlvbiBzZXRQcm90b09mKG9iaiwgcHJvdG8pIHtcblx0b2JqLl9fcHJvdG9fXyA9IHByb3RvO1xuXHRyZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBtaXhpblByb3BlcnRpZXMob2JqLCBwcm90bykge1xuXHRmb3IgKHZhciBwcm9wIGluIHByb3RvKSB7XG5cdFx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcblx0XHRcdG9ialtwcm9wXSA9IHByb3RvW3Byb3BdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb2JqO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3NldHByb3RvdHlwZW9mL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGJvZHktcGFyc2VyXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCdodHRwLWVycm9ycycpXG52YXIgZ2V0Qm9keSA9IHJlcXVpcmUoJ3Jhdy1ib2R5JylcbnZhciBpY29udiA9IHJlcXVpcmUoJ2ljb252LWxpdGUnKVxudmFyIG9uRmluaXNoZWQgPSByZXF1aXJlKCdvbi1maW5pc2hlZCcpXG52YXIgemxpYiA9IHJlcXVpcmUoJ3psaWInKVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVhZFxuXG4vKipcbiAqIFJlYWQgYSByZXF1ZXN0IGludG8gYSBidWZmZXIgYW5kIHBhcnNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSByZXFcbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG5leHRcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcnNlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBkZWJ1Z1xuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcmVhZCAocmVxLCByZXMsIG5leHQsIHBhcnNlLCBkZWJ1Zywgb3B0aW9ucykge1xuICB2YXIgbGVuZ3RoXG4gIHZhciBvcHRzID0gb3B0aW9uc1xuICB2YXIgc3RyZWFtXG5cbiAgLy8gZmxhZyBhcyBwYXJzZWRcbiAgcmVxLl9ib2R5ID0gdHJ1ZVxuXG4gIC8vIHJlYWQgb3B0aW9uc1xuICB2YXIgZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nICE9PSBudWxsXG4gICAgPyBvcHRzLmVuY29kaW5nXG4gICAgOiBudWxsXG4gIHZhciB2ZXJpZnkgPSBvcHRzLnZlcmlmeVxuXG4gIHRyeSB7XG4gICAgLy8gZ2V0IHRoZSBjb250ZW50IHN0cmVhbVxuICAgIHN0cmVhbSA9IGNvbnRlbnRzdHJlYW0ocmVxLCBkZWJ1Zywgb3B0cy5pbmZsYXRlKVxuICAgIGxlbmd0aCA9IHN0cmVhbS5sZW5ndGhcbiAgICBzdHJlYW0ubGVuZ3RoID0gdW5kZWZpbmVkXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBuZXh0KGVycilcbiAgfVxuXG4gIC8vIHNldCByYXctYm9keSBvcHRpb25zXG4gIG9wdHMubGVuZ3RoID0gbGVuZ3RoXG4gIG9wdHMuZW5jb2RpbmcgPSB2ZXJpZnlcbiAgICA/IG51bGxcbiAgICA6IGVuY29kaW5nXG5cbiAgLy8gYXNzZXJ0IGNoYXJzZXQgaXMgc3VwcG9ydGVkXG4gIGlmIChvcHRzLmVuY29kaW5nID09PSBudWxsICYmIGVuY29kaW5nICE9PSBudWxsICYmICFpY29udi5lbmNvZGluZ0V4aXN0cyhlbmNvZGluZykpIHtcbiAgICByZXR1cm4gbmV4dChjcmVhdGVFcnJvcig0MTUsICd1bnN1cHBvcnRlZCBjaGFyc2V0IFwiJyArIGVuY29kaW5nLnRvVXBwZXJDYXNlKCkgKyAnXCInLCB7XG4gICAgICBjaGFyc2V0OiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpLFxuICAgICAgdHlwZTogJ2NoYXJzZXQudW5zdXBwb3J0ZWQnXG4gICAgfSkpXG4gIH1cblxuICAvLyByZWFkIGJvZHlcbiAgZGVidWcoJ3JlYWQgYm9keScpXG4gIGdldEJvZHkoc3RyZWFtLCBvcHRzLCBmdW5jdGlvbiAoZXJyb3IsIGJvZHkpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHZhciBfZXJyb3JcblxuICAgICAgaWYgKGVycm9yLnR5cGUgPT09ICdlbmNvZGluZy51bnN1cHBvcnRlZCcpIHtcbiAgICAgICAgLy8gZWNobyBiYWNrIGNoYXJzZXRcbiAgICAgICAgX2Vycm9yID0gY3JlYXRlRXJyb3IoNDE1LCAndW5zdXBwb3J0ZWQgY2hhcnNldCBcIicgKyBlbmNvZGluZy50b1VwcGVyQ2FzZSgpICsgJ1wiJywge1xuICAgICAgICAgIGNoYXJzZXQ6IGVuY29kaW5nLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgdHlwZTogJ2NoYXJzZXQudW5zdXBwb3J0ZWQnXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzZXQgc3RhdHVzIGNvZGUgb24gZXJyb3JcbiAgICAgICAgX2Vycm9yID0gY3JlYXRlRXJyb3IoNDAwLCBlcnJvcilcbiAgICAgIH1cblxuICAgICAgLy8gcmVhZCBvZmYgZW50aXJlIHJlcXVlc3RcbiAgICAgIHN0cmVhbS5yZXN1bWUoKVxuICAgICAgb25GaW5pc2hlZChyZXEsIGZ1bmN0aW9uIG9uZmluaXNoZWQgKCkge1xuICAgICAgICBuZXh0KGNyZWF0ZUVycm9yKDQwMCwgX2Vycm9yKSlcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB2ZXJpZnlcbiAgICBpZiAodmVyaWZ5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBkZWJ1ZygndmVyaWZ5IGJvZHknKVxuICAgICAgICB2ZXJpZnkocmVxLCByZXMsIGJvZHksIGVuY29kaW5nKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIG5leHQoY3JlYXRlRXJyb3IoNDAzLCBlcnIsIHtcbiAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgIHR5cGU6IGVyci50eXBlIHx8ICdlbnRpdHkudmVyaWZ5LmZhaWxlZCdcbiAgICAgICAgfSkpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBhcnNlXG4gICAgdmFyIHN0ciA9IGJvZHlcbiAgICB0cnkge1xuICAgICAgZGVidWcoJ3BhcnNlIGJvZHknKVxuICAgICAgc3RyID0gdHlwZW9mIGJvZHkgIT09ICdzdHJpbmcnICYmIGVuY29kaW5nICE9PSBudWxsXG4gICAgICAgID8gaWNvbnYuZGVjb2RlKGJvZHksIGVuY29kaW5nKVxuICAgICAgICA6IGJvZHlcbiAgICAgIHJlcS5ib2R5ID0gcGFyc2Uoc3RyKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbmV4dChjcmVhdGVFcnJvcig0MDAsIGVyciwge1xuICAgICAgICBib2R5OiBzdHIsXG4gICAgICAgIHR5cGU6IGVyci50eXBlIHx8ICdlbnRpdHkucGFyc2UuZmFpbGVkJ1xuICAgICAgfSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBuZXh0KClcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvbnRlbnQgc3RyZWFtIG9mIHRoZSByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSByZXFcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGRlYnVnXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmZsYXRlPXRydWVdXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50c3RyZWFtIChyZXEsIGRlYnVnLCBpbmZsYXRlKSB7XG4gIHZhciBlbmNvZGluZyA9IChyZXEuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddIHx8ICdpZGVudGl0eScpLnRvTG93ZXJDYXNlKClcbiAgdmFyIGxlbmd0aCA9IHJlcS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG4gIHZhciBzdHJlYW1cblxuICBkZWJ1ZygnY29udGVudC1lbmNvZGluZyBcIiVzXCInLCBlbmNvZGluZylcblxuICBpZiAoaW5mbGF0ZSA9PT0gZmFsc2UgJiYgZW5jb2RpbmcgIT09ICdpZGVudGl0eScpIHtcbiAgICB0aHJvdyBjcmVhdGVFcnJvcig0MTUsICdjb250ZW50IGVuY29kaW5nIHVuc3VwcG9ydGVkJywge1xuICAgICAgZW5jb2Rpbmc6IGVuY29kaW5nLFxuICAgICAgdHlwZTogJ2VuY29kaW5nLnVuc3VwcG9ydGVkJ1xuICAgIH0pXG4gIH1cblxuICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgY2FzZSAnZGVmbGF0ZSc6XG4gICAgICBzdHJlYW0gPSB6bGliLmNyZWF0ZUluZmxhdGUoKVxuICAgICAgZGVidWcoJ2luZmxhdGUgYm9keScpXG4gICAgICByZXEucGlwZShzdHJlYW0pXG4gICAgICBicmVha1xuICAgIGNhc2UgJ2d6aXAnOlxuICAgICAgc3RyZWFtID0gemxpYi5jcmVhdGVHdW56aXAoKVxuICAgICAgZGVidWcoJ2d1bnppcCBib2R5JylcbiAgICAgIHJlcS5waXBlKHN0cmVhbSlcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnaWRlbnRpdHknOlxuICAgICAgc3RyZWFtID0gcmVxXG4gICAgICBzdHJlYW0ubGVuZ3RoID0gbGVuZ3RoXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBjcmVhdGVFcnJvcig0MTUsICd1bnN1cHBvcnRlZCBjb250ZW50IGVuY29kaW5nIFwiJyArIGVuY29kaW5nICsgJ1wiJywge1xuICAgICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICAgIHR5cGU6ICdlbmNvZGluZy51bnN1cHBvcnRlZCdcbiAgICAgIH0pXG4gIH1cblxuICByZXR1cm4gc3RyZWFtXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvYm9keS1wYXJzZXIvbGliL3JlYWQuanNcbi8vIG1vZHVsZSBpZCA9IDM2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogb24tZmluaXNoZWRcbiAqIENvcHlyaWdodChjKSAyMDEzIEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTQgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gb25GaW5pc2hlZFxubW9kdWxlLmV4cG9ydHMuaXNGaW5pc2hlZCA9IGlzRmluaXNoZWRcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZmlyc3QgPSByZXF1aXJlKCdlZS1maXJzdCcpXG5cbi8qKlxuICogVmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudmFyIGRlZmVyID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IHNldEltbWVkaWF0ZVxuICA6IGZ1bmN0aW9uKGZuKXsgcHJvY2Vzcy5uZXh0VGljayhmbi5iaW5kLmFwcGx5KGZuLCBhcmd1bWVudHMpKSB9XG5cbi8qKlxuICogSW52b2tlIGNhbGxiYWNrIHdoZW4gdGhlIHJlc3BvbnNlIGhhcyBmaW5pc2hlZCwgdXNlZnVsIGZvclxuICogY2xlYW5pbmcgdXAgcmVzb3VyY2VzIGFmdGVyd2FyZHMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG1zZ1xuICogQHBhcmFtIHtmdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBvbkZpbmlzaGVkKG1zZywgbGlzdGVuZXIpIHtcbiAgaWYgKGlzRmluaXNoZWQobXNnKSAhPT0gZmFsc2UpIHtcbiAgICBkZWZlcihsaXN0ZW5lciwgbnVsbCwgbXNnKVxuICAgIHJldHVybiBtc2dcbiAgfVxuXG4gIC8vIGF0dGFjaCB0aGUgbGlzdGVuZXIgdG8gdGhlIG1lc3NhZ2VcbiAgYXR0YWNoTGlzdGVuZXIobXNnLCBsaXN0ZW5lcilcblxuICByZXR1cm4gbXNnXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIG1lc3NhZ2UgaXMgYWxyZWFkeSBmaW5pc2hlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbXNnXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGlzRmluaXNoZWQobXNnKSB7XG4gIHZhciBzb2NrZXQgPSBtc2cuc29ja2V0XG5cbiAgaWYgKHR5cGVvZiBtc2cuZmluaXNoZWQgPT09ICdib29sZWFuJykge1xuICAgIC8vIE91dGdvaW5nTWVzc2FnZVxuICAgIHJldHVybiBCb29sZWFuKG1zZy5maW5pc2hlZCB8fCAoc29ja2V0ICYmICFzb2NrZXQud3JpdGFibGUpKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBtc2cuY29tcGxldGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEluY29taW5nTWVzc2FnZVxuICAgIHJldHVybiBCb29sZWFuKG1zZy51cGdyYWRlIHx8ICFzb2NrZXQgfHwgIXNvY2tldC5yZWFkYWJsZSB8fCAobXNnLmNvbXBsZXRlICYmICFtc2cucmVhZGFibGUpKVxuICB9XG5cbiAgLy8gZG9uJ3Qga25vd1xuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQXR0YWNoIGEgZmluaXNoZWQgbGlzdGVuZXIgdG8gdGhlIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG1zZ1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gYXR0YWNoRmluaXNoZWRMaXN0ZW5lcihtc2csIGNhbGxiYWNrKSB7XG4gIHZhciBlZU1zZ1xuICB2YXIgZWVTb2NrZXRcbiAgdmFyIGZpbmlzaGVkID0gZmFsc2VcblxuICBmdW5jdGlvbiBvbkZpbmlzaChlcnJvcikge1xuICAgIGVlTXNnLmNhbmNlbCgpXG4gICAgZWVTb2NrZXQuY2FuY2VsKClcblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNhbGxiYWNrKGVycm9yKVxuICB9XG5cbiAgLy8gZmluaXNoZWQgb24gZmlyc3QgbWVzc2FnZSBldmVudFxuICBlZU1zZyA9IGVlU29ja2V0ID0gZmlyc3QoW1ttc2csICdlbmQnLCAnZmluaXNoJ11dLCBvbkZpbmlzaClcblxuICBmdW5jdGlvbiBvblNvY2tldChzb2NrZXQpIHtcbiAgICAvLyByZW1vdmUgbGlzdGVuZXJcbiAgICBtc2cucmVtb3ZlTGlzdGVuZXIoJ3NvY2tldCcsIG9uU29ja2V0KVxuXG4gICAgaWYgKGZpbmlzaGVkKSByZXR1cm5cbiAgICBpZiAoZWVNc2cgIT09IGVlU29ja2V0KSByZXR1cm5cblxuICAgIC8vIGZpbmlzaGVkIG9uIGZpcnN0IHNvY2tldCBldmVudFxuICAgIGVlU29ja2V0ID0gZmlyc3QoW1tzb2NrZXQsICdlcnJvcicsICdjbG9zZSddXSwgb25GaW5pc2gpXG4gIH1cblxuICBpZiAobXNnLnNvY2tldCkge1xuICAgIC8vIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkXG4gICAgb25Tb2NrZXQobXNnLnNvY2tldClcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIHdhaXQgZm9yIHNvY2tldCB0byBiZSBhc3NpZ25lZFxuICBtc2cub24oJ3NvY2tldCcsIG9uU29ja2V0KVxuXG4gIGlmIChtc2cuc29ja2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBub2RlLmpzIDAuOCBwYXRjaFxuICAgIHBhdGNoQXNzaWduU29ja2V0KG1zZywgb25Tb2NrZXQpXG4gIH1cbn1cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGxpc3RlbmVyIHRvIHRoZSBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBtc2dcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBhdHRhY2hMaXN0ZW5lcihtc2csIGxpc3RlbmVyKSB7XG4gIHZhciBhdHRhY2hlZCA9IG1zZy5fX29uRmluaXNoZWRcblxuICAvLyBjcmVhdGUgYSBwcml2YXRlIHNpbmdsZSBsaXN0ZW5lciB3aXRoIHF1ZXVlXG4gIGlmICghYXR0YWNoZWQgfHwgIWF0dGFjaGVkLnF1ZXVlKSB7XG4gICAgYXR0YWNoZWQgPSBtc2cuX19vbkZpbmlzaGVkID0gY3JlYXRlTGlzdGVuZXIobXNnKVxuICAgIGF0dGFjaEZpbmlzaGVkTGlzdGVuZXIobXNnLCBhdHRhY2hlZClcbiAgfVxuXG4gIGF0dGFjaGVkLnF1ZXVlLnB1c2gobGlzdGVuZXIpXG59XG5cbi8qKlxuICogQ3JlYXRlIGxpc3RlbmVyIG9uIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG1zZ1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyKG1zZykge1xuICBmdW5jdGlvbiBsaXN0ZW5lcihlcnIpIHtcbiAgICBpZiAobXNnLl9fb25GaW5pc2hlZCA9PT0gbGlzdGVuZXIpIG1zZy5fX29uRmluaXNoZWQgPSBudWxsXG4gICAgaWYgKCFsaXN0ZW5lci5xdWV1ZSkgcmV0dXJuXG5cbiAgICB2YXIgcXVldWUgPSBsaXN0ZW5lci5xdWV1ZVxuICAgIGxpc3RlbmVyLnF1ZXVlID0gbnVsbFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgcXVldWVbaV0oZXJyLCBtc2cpXG4gICAgfVxuICB9XG5cbiAgbGlzdGVuZXIucXVldWUgPSBbXVxuXG4gIHJldHVybiBsaXN0ZW5lclxufVxuXG4vKipcbiAqIFBhdGNoIFNlcnZlclJlc3BvbnNlLnByb3RvdHlwZS5hc3NpZ25Tb2NrZXQgZm9yIG5vZGUuanMgMC44LlxuICpcbiAqIEBwYXJhbSB7U2VydmVyUmVzcG9uc2V9IHJlc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGF0Y2hBc3NpZ25Tb2NrZXQocmVzLCBjYWxsYmFjaykge1xuICB2YXIgYXNzaWduU29ja2V0ID0gcmVzLmFzc2lnblNvY2tldFxuXG4gIGlmICh0eXBlb2YgYXNzaWduU29ja2V0ICE9PSAnZnVuY3Rpb24nKSByZXR1cm5cblxuICAvLyByZXMub24oJ3NvY2tldCcsIGNhbGxiYWNrKSBpcyBicm9rZW4gaW4gMC44XG4gIHJlcy5hc3NpZ25Tb2NrZXQgPSBmdW5jdGlvbiBfYXNzaWduU29ja2V0KHNvY2tldCkge1xuICAgIGFzc2lnblNvY2tldC5jYWxsKHRoaXMsIHNvY2tldClcbiAgICBjYWxsYmFjayhzb2NrZXQpXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9vbi1maW5pc2hlZC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMzdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBlbmNvZGV1cmxcbiAqIENvcHlyaWdodChjKSAyMDE2IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVuY29kZVVybFxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCBub24tVVJMIGNvZGUgcG9pbnRzLCAqYWZ0ZXIqIGVuY29kaW5nIChpLmUuIG5vdCBpbmNsdWRpbmcgXCIlXCIpXG4gKiBhbmQgaW5jbHVkaW5nIGludmFsaWQgZXNjYXBlIHNlcXVlbmNlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIEVOQ09ERV9DSEFSU19SRUdFWFAgPSAvKD86W15cXHgyMVxceDI1XFx4MjYtXFx4M0JcXHgzRFxceDNGLVxceDVCXFx4NURcXHg1RlxceDYxLVxceDdBXFx4N0VdfCUoPzpbXjAtOUEtRmEtZl18WzAtOUEtRmEtZl1bXjAtOUEtRmEtZl18JCkpKy9nXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHVubWF0Y2hlZCBzdXJyb2dhdGUgcGFpci5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIFVOTUFUQ0hFRF9TVVJST0dBVEVfUEFJUl9SRUdFWFAgPSAvKF58W15cXHVEODAwLVxcdURCRkZdKVtcXHVEQzAwLVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdKFteXFx1REMwMC1cXHVERkZGXXwkKS9nXG5cbi8qKlxuICogU3RyaW5nIHRvIHJlcGxhY2UgdW5tYXRjaGVkIHN1cnJvZ2F0ZSBwYWlyIHdpdGguXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBVTk1BVENIRURfU1VSUk9HQVRFX1BBSVJfUkVQTEFDRSA9ICckMVxcdUZGRkQkMidcblxuLyoqXG4gKiBFbmNvZGUgYSBVUkwgdG8gYSBwZXJjZW50LWVuY29kZWQgZm9ybSwgZXhjbHVkaW5nIGFscmVhZHktZW5jb2RlZCBzZXF1ZW5jZXMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gYWxyZWFkeS1lbmNvZGVkIFVSTCBhbmQgZW5jb2RlIGFsbCB0aGUgbm9uLVVSTFxuICogY29kZSBwb2ludHMuIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZW5jb2RlIHRoZSBcIiVcIiBjaGFyYWN0ZXIgdW5sZXNzIGl0IGlzXG4gKiBub3QgcGFydCBvZiBhIHZhbGlkIHNlcXVlbmNlIChgJTIwYCB3aWxsIGJlIGxlZnQgYXMtaXMsIGJ1dCBgJWZvb2Agd2lsbFxuICogYmUgZW5jb2RlZCBhcyBgJTI1Zm9vYCkuXG4gKlxuICogVGhpcyBlbmNvZGUgaXMgbWVhbnQgdG8gYmUgXCJzYWZlXCIgYW5kIGRvZXMgbm90IHRocm93IGVycm9ycy4gSXQgd2lsbCB0cnkgYXNcbiAqIGhhcmQgYXMgaXQgY2FuIHRvIHByb3Blcmx5IGVuY29kZSB0aGUgZ2l2ZW4gVVJMLCBpbmNsdWRpbmcgcmVwbGFjaW5nIGFueSByYXcsXG4gKiB1bnBhaXJlZCBzdXJyb2dhdGUgcGFpcnMgd2l0aCB0aGUgVW5pY29kZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgcHJpb3IgdG9cbiAqIGVuY29kaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlbmNvZGVVcmwgKHVybCkge1xuICByZXR1cm4gU3RyaW5nKHVybClcbiAgICAucmVwbGFjZShVTk1BVENIRURfU1VSUk9HQVRFX1BBSVJfUkVHRVhQLCBVTk1BVENIRURfU1VSUk9HQVRFX1BBSVJfUkVQTEFDRSlcbiAgICAucmVwbGFjZShFTkNPREVfQ0hBUlNfUkVHRVhQLCBlbmNvZGVVUkkpXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZW5jb2RldXJsL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAzOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGVzY2FwZS1odG1sXG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDEzIFRKIEhvbG93YXljaHVrXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBBbmRyZWFzIEx1YmJlXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBUaWFuY2hlbmcgXCJUaW1vdGh5XCIgR3VcbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgbWF0Y2hIdG1sUmVnRXhwID0gL1tcIicmPD5dLztcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVzY2FwZUh0bWw7XG5cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIG9mIGh0bWwuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBlc2NhcGUgZm9yIGluc2VydGluZyBpbnRvIEhUTUxcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGVIdG1sKHN0cmluZykge1xuICB2YXIgc3RyID0gJycgKyBzdHJpbmc7XG4gIHZhciBtYXRjaCA9IG1hdGNoSHRtbFJlZ0V4cC5leGVjKHN0cik7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICB2YXIgZXNjYXBlO1xuICB2YXIgaHRtbCA9ICcnO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGFzdEluZGV4ID0gMDtcblxuICBmb3IgKGluZGV4ID0gbWF0Y2guaW5kZXg7IGluZGV4IDwgc3RyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaW5kZXgpKSB7XG4gICAgICBjYXNlIDM0OiAvLyBcIlxuICAgICAgICBlc2NhcGUgPSAnJnF1b3Q7JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OiAvLyAmXG4gICAgICAgIGVzY2FwZSA9ICcmYW1wOyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOTogLy8gJ1xuICAgICAgICBlc2NhcGUgPSAnJiMzOTsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNjA6IC8vIDxcbiAgICAgICAgZXNjYXBlID0gJyZsdDsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNjI6IC8vID5cbiAgICAgICAgZXNjYXBlID0gJyZndDsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChsYXN0SW5kZXggIT09IGluZGV4KSB7XG4gICAgICBodG1sICs9IHN0ci5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCk7XG4gICAgfVxuXG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyAxO1xuICAgIGh0bWwgKz0gZXNjYXBlO1xuICB9XG5cbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gaW5kZXhcbiAgICA/IGh0bWwgKyBzdHIuc3Vic3RyaW5nKGxhc3RJbmRleCwgaW5kZXgpXG4gICAgOiBodG1sO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2VzY2FwZS1odG1sL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBFeHBvc2UgYGFycmF5RmxhdHRlbmAuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlGbGF0dGVuXG5cbi8qKlxuICogUmVjdXJzaXZlIGZsYXR0ZW4gZnVuY3Rpb24gd2l0aCBkZXB0aC5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gIGFycmF5XG4gKiBAcGFyYW0gIHtBcnJheX0gIHJlc3VsdFxuICogQHBhcmFtICB7TnVtYmVyfSBkZXB0aFxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5XaXRoRGVwdGggKGFycmF5LCByZXN1bHQsIGRlcHRoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXVxuXG4gICAgaWYgKGRlcHRoID4gMCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZmxhdHRlbldpdGhEZXB0aCh2YWx1ZSwgcmVzdWx0LCBkZXB0aCAtIDEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmUgZmxhdHRlbiBmdW5jdGlvbi4gT21pdHRpbmcgZGVwdGggaXMgc2xpZ2h0bHkgZmFzdGVyLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fSBhcnJheVxuICogQHBhcmFtICB7QXJyYXl9IHJlc3VsdFxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5Gb3JldmVyIChhcnJheSwgcmVzdWx0KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmbGF0dGVuRm9yZXZlcih2YWx1ZSwgcmVzdWx0KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogRmxhdHRlbiBhbiBhcnJheSwgd2l0aCB0aGUgYWJpbGl0eSB0byBkZWZpbmUgYSBkZXB0aC5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gIGFycmF5XG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGRlcHRoXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gYXJyYXlGbGF0dGVuIChhcnJheSwgZGVwdGgpIHtcbiAgaWYgKGRlcHRoID09IG51bGwpIHtcbiAgICByZXR1cm4gZmxhdHRlbkZvcmV2ZXIoYXJyYXksIFtdKVxuICB9XG5cbiAgcmV0dXJuIGZsYXR0ZW5XaXRoRGVwdGgoYXJyYXksIFtdLCBkZXB0aClcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9hcnJheS1mbGF0dGVuL2FycmF5LWZsYXR0ZW4uanNcbi8vIG1vZHVsZSBpZCA9IDQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJodHRwXCJcbi8vIG1vZHVsZSBpZCA9IDQxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogTWVyZ2Ugb2JqZWN0IGIgd2l0aCBvYmplY3QgYS5cbiAqXG4gKiAgICAgdmFyIGEgPSB7IGZvbzogJ2JhcicgfVxuICogICAgICAgLCBiID0geyBiYXI6ICdiYXonIH07XG4gKlxuICogICAgIG1lcmdlKGEsIGIpO1xuICogICAgIC8vID0+IHsgZm9vOiAnYmFyJywgYmFyOiAnYmF6JyB9XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBiXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGEsIGIpe1xuICBpZiAoYSAmJiBiKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGIpIHtcbiAgICAgIGFba2V5XSA9IGJba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGE7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3V0aWxzLW1lcmdlL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA0MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJjcnlwdG9cIlxuLy8gbW9kdWxlIGlkID0gNDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qc1xuLy8gbW9kdWxlIGlkID0gNDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzXG4vLyBtb2R1bGUgaWQgPSA0NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9nZXQtaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDQ2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50c1wiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImV2ZW50c1wiXG4vLyBtb2R1bGUgaWQgPSA0N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwidXRpbFwiXG4vLyBtb2R1bGUgaWQgPSA0OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFtbXCIwXCIsXCJcXHUwMDAwXCIsMTI3LFwi4oKsXCJdLFtcIjgxNDBcIixcIuS4guS4hOS4heS4huS4j+S4kuS4l+S4n+S4oOS4oeS4o+S4puS4qeS4ruS4r+S4seS4s+S4teS4t+S4vOS5gOS5geS5guS5hOS5huS5iuS5keS5leS5l+S5muS5m+S5ouS5o+S5pOS5peS5p+S5qOS5qlwiLDUsXCLkubLkubRcIiw5LFwi5Lm/XCIsNixcIuS6h+S6ilwiXSxbXCI4MTgwXCIsXCLkupDkupbkupfkupnkupzkup3kup7kuqPkuqrkuq/kurDkurHkurTkurbkurfkurjkurnkurzkur3kur7ku4jku4zku4/ku5Dku5Lku5rku5vku5zku6Dku6Lku6bku6fku6nku63ku67ku6/ku7Hku7Tku7jku7nku7rku7zku77kvIDkvIJcIiw2LFwi5LyL5LyM5LySXCIsNCxcIuS8nOS8neS8oeS8o+S8qOS8qeS8rOS8reS8ruS8seS8s+S8teS8t+S8ueS8u+S8vlwiLDQsXCLkvYTkvYXkvYdcIiw1LFwi5L2S5L2U5L2W5L2h5L2i5L2m5L2o5L2q5L2r5L2t5L2u5L2x5L2y5L215L235L245L255L265L295L6A5L6B5L6C5L6F5L6G5L6H5L6K5L6M5L6O5L6Q5L6S5L6T5L6V5L6W5L6Y5L6Z5L6a5L6c5L6e5L6f5L6h5L6iXCJdLFtcIjgyNDBcIixcIuS+pOS+q+S+reS+sFwiLDQsXCLkvrZcIiw4LFwi5L+A5L+B5L+C5L+G5L+H5L+I5L+J5L+L5L+M5L+N5L+SXCIsNCxcIuS/meS/m+S/oOS/ouS/pOS/peS/p+S/q+S/rOS/sOS/suS/tOS/teS/tuS/t+S/ueS/u+S/vOS/veS/v1wiLDExXSxbXCI4MjgwXCIsXCLlgIvlgI7lgJDlgJHlgJPlgJXlgJblgJflgJvlgJ3lgJ7lgKDlgKLlgKPlgKTlgKflgKvlgK9cIiwxMCxcIuWAu+WAveWAv+WBgOWBgeWBguWBhOWBheWBhuWBieWBiuWBi+WBjeWBkFwiLDQsXCLlgZblgZflgZjlgZnlgZvlgZ1cIiw3LFwi5YGmXCIsNSxcIuWBrVwiLDgsXCLlgbjlgbnlgbrlgbzlgb3lgoHlgoLlgoPlgoTlgoblgoflgonlgorlgovlgozlgo5cIiwyMCxcIuWCpOWCpuWCquWCq+WCrVwiLDQsXCLlgrNcIiw2LFwi5YK8XCJdLFtcIjgzNDBcIixcIuWCvVwiLDE3LFwi5YOQXCIsNSxcIuWDl+WDmOWDmeWDm1wiLDEwLFwi5YOo5YOp5YOq5YOr5YOv5YOw5YOx5YOy5YO05YO2XCIsNCxcIuWDvFwiLDksXCLlhIhcIl0sW1wiODM4MFwiLFwi5YSJ5YSK5YSMXCIsNSxcIuWEk1wiLDEzLFwi5YSiXCIsMjgsXCLlhYLlhYflhYrlhYzlhY7lhY/lhZDlhZLlhZPlhZflhZjlhZnlhZvlhZ1cIiw0LFwi5YWj5YWk5YWm5YWn5YWp5YWq5YWv5YWy5YW65YW+5YW/5YaD5YaE5YaG5YaH5YaK5YaL5YaO5YaP5YaQ5YaR5YaT5YaU5YaY5Yaa5Yad5Yae5Yaf5Yah5Yaj5YamXCIsNCxcIuWGreWGruWGtOWGuOWGueWGuuWGvuWGv+WHgeWHguWHg+WHheWHiOWHiuWHjeWHjuWHkOWHklwiLDVdLFtcIjg0NDBcIixcIuWHmOWHmeWHmuWHnOWHnuWHn+WHouWHo+WHpVwiLDUsXCLlh6zlh67lh7Hlh7Llh7Tlh7flh77liITliIXliInliIvliIzliI/liJDliJPliJTliJXliJzliJ7liJ/liKHliKLliKPliKXliKbliKfliKrliKzliK/liLHliLLliLTliLXliLzliL7liYRcIiw1LFwi5YmL5YmO5YmP5YmS5YmT5YmV5YmX5YmYXCJdLFtcIjg0ODBcIixcIuWJmeWJmuWJm+WJneWJn+WJoOWJouWJo+WJpOWJpuWJqOWJq+WJrOWJreWJruWJsOWJseWJs1wiLDksXCLlib7lioDlioNcIiw0LFwi5YqJXCIsNixcIuWKkeWKkuWKlFwiLDYsXCLlipzliqTliqXliqbliqfliq7liq/lirDlirRcIiw5LFwi5YuA5YuB5YuC5YuE5YuF5YuG5YuI5YuK5YuM5YuN5YuO5YuP5YuR5YuT5YuU5YuV5YuX5YuZXCIsNSxcIuWLoOWLoeWLouWLo+WLpVwiLDEwLFwi5YuxXCIsNyxcIuWLu+WLvOWLveWMgeWMguWMg+WMhOWMh+WMieWMiuWMi+WMjOWMjlwiXSxbXCI4NTQwXCIsXCLljJHljJLljJPljJTljJjljJvljJzljJ7ljJ/ljKLljKTljKXljKfljKjljKnljKvljKzljK3ljK9cIiw5LFwi5Yy85Yy95Y2A5Y2C5Y2E5Y2G5Y2L5Y2M5Y2N5Y2Q5Y2U5Y2Y5Y2Z5Y2b5Y2d5Y2l5Y2o5Y2q5Y2s5Y2t5Y2y5Y225Y255Y275Y285Y295Y2+5Y6A5Y6B5Y6D5Y6H5Y6I5Y6K5Y6O5Y6PXCJdLFtcIjg1ODBcIixcIuWOkFwiLDQsXCLljpbljpfljpnljpvljpzljp7ljqDljqHljqTljqfljqrljqvljqzljq3ljq9cIiw2LFwi5Y635Y645Y655Y665Y685Y695Y6+5Y+A5Y+DXCIsNCxcIuWPjuWPj+WPkOWPkuWPk+WPleWPmuWPnOWPneWPnuWPoeWPouWPp+WPtOWPuuWPvuWPv+WQgOWQguWQheWQh+WQi+WQlOWQmOWQmeWQmuWQnOWQouWQpOWQpeWQquWQsOWQs+WQtuWQt+WQuuWQveWQv+WRgeWRguWRhOWRheWRh+WRieWRjOWRjeWRjuWRj+WRkeWRmuWRnVwiLDQsXCLlkaPlkaXlkaflkalcIiw3LFwi5ZG05ZG55ZG65ZG+5ZG/5ZKB5ZKD5ZKF5ZKH5ZKI5ZKJ5ZKK5ZKN5ZKR5ZKT5ZKX5ZKY5ZKc5ZKe5ZKf5ZKg5ZKhXCJdLFtcIjg2NDBcIixcIuWSouWSpeWSruWSsOWSsuWSteWStuWSt+WSueWSuuWSvOWSvuWTg+WTheWTiuWTi+WTluWTmOWTm+WToFwiLDQsXCLlk6vlk6zlk6/lk7Dlk7Hlk7RcIiw1LFwi5ZO75ZO+5ZSA5ZSC5ZSD5ZSE5ZSF5ZSI5ZSKXCIsNCxcIuWUkuWUk+WUlVwiLDUsXCLllJzllJ3llJ7llJ/llKHllKXllKZcIl0sW1wiODY4MFwiLFwi5ZSo5ZSp5ZSr5ZSt5ZSy5ZS05ZS15ZS25ZS45ZS55ZS65ZS75ZS95ZWA5ZWC5ZWF5ZWH5ZWI5ZWLXCIsNCxcIuWVkeWVkuWVk+WVlOWVl1wiLDQsXCLllZ3llZ7llZ/llaDllaLllaPllajllanllavlla9cIiw1LFwi5ZW55ZW65ZW95ZW/5ZaF5ZaG5ZaM5ZaN5ZaO5ZaQ5ZaS5ZaT5ZaV5ZaW5ZaX5Zaa5Zab5Zae5ZagXCIsNixcIuWWqFwiLDgsXCLllrLllrTllrbllrjllrrllrzllr9cIiw0LFwi5ZeG5ZeH5ZeI5ZeK5ZeL5ZeO5ZeP5ZeQ5ZeV5ZeXXCIsNCxcIuWXnuWXoOWXouWXp+WXqeWXreWXruWXsOWXseWXtOWXtuWXuFwiLDQsXCLll7/lmILlmIPlmITlmIVcIl0sW1wiODc0MFwiLFwi5ZiG5ZiH5ZiK5ZiL5ZiN5ZiQXCIsNyxcIuWYmeWYmuWYnOWYneWYoOWYoeWYouWYpeWYpuWYqOWYqeWYquWYq+WYruWYr+WYsOWYs+WYteWYt+WYuOWYuuWYvOWYveWYvuWZgFwiLDExLFwi5ZmPXCIsNCxcIuWZleWZluWZmuWZm+WZnVwiLDRdLFtcIjg3ODBcIixcIuWZo+WZpeWZpuWZp+WZreWZruWZr+WZsOWZsuWZs+WZtOWZteWZt+WZuOWZueWZuuWZvVwiLDcsXCLlmodcIiw2LFwi5ZqQ5ZqR5ZqS5ZqUXCIsMTQsXCLlmqRcIiwxMCxcIuWasFwiLDYsXCLlmrjlmrnlmrrlmrvlmr1cIiwxMixcIuWbi1wiLDgsXCLlm5Xlm5blm5jlm5nlm5zlm6Plm6VcIiw1LFwi5Zus5Zuu5Zuv5Zuy5Zuz5Zu25Zu35Zu45Zu75Zu85ZyA5ZyB5ZyC5ZyF5ZyH5ZyLXCIsNl0sW1wiODg0MFwiLFwi5ZySXCIsOSxcIuWcneWcnuWcoOWcoeWcouWcpOWcpeWcpuWcp+Wcq+WcseWcsuWctFwiLDQsXCLlnLzlnL3lnL/lnYHlnYPlnYTlnYXlnYblnYjlnYnlnYvlnZJcIiw0LFwi5Z2Y5Z2Z5Z2i5Z2j5Z2l5Z2n5Z2s5Z2u5Z2w5Z2x5Z2y5Z205Z215Z245Z255Z265Z295Z2+5Z2/5Z6AXCJdLFtcIjg4ODBcIixcIuWegeWeh+WeiOWeieWeiuWejVwiLDQsXCLlnpRcIiw2LFwi5Z6c5Z6d5Z6e5Z6f5Z6l5Z6o5Z6q5Z6s5Z6v5Z6w5Z6x5Z6z5Z615Z625Z635Z65XCIsOCxcIuWfhFwiLDYsXCLln4zln43ln5Dln5Hln5Pln5bln5fln5vln5zln57ln6Hln6Lln6Pln6VcIiw3LFwi5Z+u5Z+w5Z+x5Z+y5Z+z5Z+15Z+25Z+35Z+75Z+85Z++5Z+/5aCB5aCD5aCE5aCF5aCI5aCJ5aCK5aCM5aCO5aCP5aCQ5aCS5aCT5aCU5aCW5aCX5aCY5aCa5aCb5aCc5aCd5aCf5aCi5aCj5aClXCIsNCxcIuWgq1wiLDQsXCLloLHloLLloLPloLTloLZcIiw3XSxbXCI4OTQwXCIsXCLloL5cIiw1LFwi5aGFXCIsNixcIuWhjuWhj+WhkOWhkuWhk+WhleWhluWhl+WhmVwiLDQsXCLloZ9cIiw1LFwi5aGmXCIsNCxcIuWhrVwiLDE2LFwi5aG/5aKC5aKE5aKG5aKH5aKI5aKK5aKL5aKMXCJdLFtcIjg5ODBcIixcIuWijVwiLDQsXCLlopRcIiw0LFwi5aKb5aKc5aKd5aKgXCIsNyxcIuWiqlwiLDE3LFwi5aK95aK+5aK/5aOA5aOC5aOD5aOE5aOGXCIsMTAsXCLlo5Llo5Plo5Tlo5ZcIiwxMyxcIuWjpVwiLDUsXCLlo63lo6/lo7Hlo7Llo7Tlo7Xlo7flo7jlo7pcIiw3LFwi5aSD5aSF5aSG5aSIXCIsNCxcIuWkjuWkkOWkkeWkkuWkk+Wkl+WkmOWkm+WkneWknuWkoOWkoeWkouWko+WkpuWkqOWkrOWksOWksuWks+WkteWktuWku1wiXSxbXCI4YTQwXCIsXCLlpL3lpL7lpL/lpYDlpYPlpYXlpYblpYrlpYzlpY3lpZDlpZLlpZPlpZnlpZtcIiw0LFwi5aWh5aWj5aWk5aWmXCIsMTIsXCLlpbXlpbflpbrlpbvlpbzlpb7lpb/lpoDlpoXlponlpovlpozlpo7lpo/lppDlppHlppTlppXlppjlpprlppvlppzlpp3lpp/lpqDlpqHlpqLlpqZcIl0sW1wiOGE4MFwiLFwi5aan5aas5aat5aaw5aax5aazXCIsNSxcIuWmuuWmvOWmveWmv1wiLDYsXCLlp4flp4jlp4nlp4zlp43lp47lp4/lp5Xlp5blp5nlp5vlp55cIiw0LFwi5aek5aem5aen5aep5aeq5aer5aetXCIsMTEsXCLlp7rlp7zlp73lp77lqIDlqILlqIrlqIvlqI3lqI7lqI/lqJDlqJLlqJTlqJXlqJblqJflqJnlqJrlqJvlqJ3lqJ7lqKHlqKLlqKTlqKblqKflqKjlqKpcIiw2LFwi5aiz5ai15ai3XCIsNCxcIuWoveWovuWov+WpgVwiLDQsXCLlqYflqYjlqYtcIiw5LFwi5amW5amX5amY5amZ5ambXCIsNV0sW1wiOGI0MFwiLFwi5amh5amj5amk5aml5amm5amo5amp5amrXCIsOCxcIuWpuOWpueWpu+WpvOWpveWpvuWqgFwiLDE3LFwi5aqTXCIsNixcIuWqnFwiLDEzLFwi5aqr5aqsXCJdLFtcIjhiODBcIixcIuWqrVwiLDQsXCLlqrTlqrblqrflqrlcIiw0LFwi5aq/5auA5auDXCIsNSxcIuWriuWri+WrjVwiLDQsXCLlq5Plq5Xlq5flq5nlq5rlq5vlq53lq57lq5/lq6Llq6Tlq6Xlq6flq6jlq6rlq6xcIiw0LFwi5auyXCIsMjIsXCLlrIpcIiwxMSxcIuWsmFwiLDI1LFwi5ayz5ay15ay25ay4XCIsNyxcIuWtgVwiLDZdLFtcIjhjNDBcIixcIuWtiFwiLDcsXCLlrZLlrZblrZ7lraDlraHlraflrajlravlra3lra7lra/lrbLlrbTlrbblrbflrbjlrbnlrbvlrbzlrb7lrb/lroLlroblrorlro3lro7lrpDlrpHlrpLlrpTlrpblrp/lrqflrqjlrqnlrqzlrq3lrq7lrq/lrrHlrrLlrrflrrrlrrvlrrzlr4Dlr4Hlr4Plr4jlr4nlr4rlr4vlr43lr47lr49cIl0sW1wiOGM4MFwiLFwi5a+R5a+UXCIsOCxcIuWvoOWvouWvo+WvpuWvp+WvqVwiLDQsXCLlr6/lr7FcIiw2LFwi5a+95a++5bCA5bCC5bCD5bCF5bCH5bCI5bCL5bCM5bCN5bCO5bCQ5bCS5bCT5bCX5bCZ5bCb5bCe5bCf5bCg5bCh5bCj5bCm5bCo5bCp5bCq5bCr5bCt5bCu5bCv5bCw5bCy5bCz5bC15bC25bC35bGD5bGE5bGG5bGH5bGM5bGN5bGS5bGT5bGU5bGW5bGX5bGY5bGa5bGb5bGc5bGd5bGf5bGi5bGk5bGnXCIsNixcIuWxsOWxslwiLDYsXCLlsbvlsbzlsb3lsb7lsoDlsoNcIiw0LFwi5bKJ5bKK5bKL5bKO5bKP5bKS5bKT5bKV5bKdXCIsNCxcIuWypFwiLDRdLFtcIjhkNDBcIixcIuWyquWyruWyr+WysOWysuWytOWytuWyueWyuuWyu+WyvOWyvuWzgOWzguWzg+WzhVwiLDUsXCLls4xcIiw1LFwi5bOTXCIsNSxcIuWzmlwiLDYsXCLls6Lls6Pls6fls6nls6vls6zls67ls6/ls7FcIiw5LFwi5bO8XCIsNF0sW1wiOGQ4MFwiLFwi5bSB5bSE5bSF5bSIXCIsNSxcIuW0j1wiLDQsXCLltJXltJfltJjltJnltJrltJzltJ3ltJ9cIiw0LFwi5bSl5bSo5bSq5bSr5bSs5bSvXCIsNCxcIuW0tVwiLDcsXCLltL9cIiw3LFwi5bWI5bWJ5bWNXCIsMTAsXCLltZnltZrltZzltZ5cIiwxMCxcIuW1quW1reW1ruW1sOW1seW1suW1s+W1tVwiLDEyLFwi5baDXCIsMjEsXCLltprltpvltpzltp7ltp/ltqBcIl0sW1wiOGU0MFwiLFwi5bahXCIsMjEsXCLltrhcIiwxMixcIuW3hlwiLDYsXCLlt45cIiwxMixcIuW3nOW3n+W3oOW3o+W3pOW3quW3rOW3rVwiXSxbXCI4ZTgwXCIsXCLlt7Dlt7Xlt7blt7hcIiw0LFwi5be/5biA5biE5biH5biJ5biK5biL5biN5biO5biS5biT5biX5bieXCIsNyxcIuW4qFwiLDQsXCLluK/luLDluLJcIiw0LFwi5bi55bi65bi+5bi/5bmA5bmB5bmD5bmGXCIsNSxcIuW5jVwiLDYsXCLluZZcIiw0LFwi5bmc5bmd5bmf5bmg5bmjXCIsMTQsXCLlubXlubflubnlub7luoHluoLluoPluoXluojluonluozluo3luo7lupLlupjlupvlup3luqHluqLluqPluqTluqhcIiw0LFwi5bquXCIsNCxcIuW6tOW6uuW6u+W6vOW6veW6v1wiLDZdLFtcIjhmNDBcIixcIuW7huW7h+W7iOW7i1wiLDUsXCLlu5Tlu5Xlu5flu5jlu5nlu5rlu5xcIiwxMSxcIuW7qeW7q1wiLDgsXCLlu7Xlu7jlu7nlu7vlu7zlu73lvIXlvIblvIflvInlvIzlvI3lvI7lvJDlvJLlvJTlvJblvJnlvJrlvJzlvJ3lvJ7lvKHlvKLlvKPlvKRcIl0sW1wiOGY4MFwiLFwi5byo5byr5bys5byu5byw5byyXCIsNixcIuW8u+W8veW8vuW8v+W9gVwiLDE0LFwi5b2R5b2U5b2Z5b2a5b2b5b2c5b2e5b2f5b2g5b2j5b2l5b2n5b2o5b2r5b2u5b2v5b2y5b205b215b225b245b265b295b2+5b2/5b6D5b6G5b6N5b6O5b6P5b6R5b6T5b6U5b6W5b6a5b6b5b6d5b6e5b6f5b6g5b6iXCIsNSxcIuW+qeW+q+W+rOW+r1wiLDUsXCLlvrblvrjlvrnlvrrlvrvlvr5cIiw0LFwi5b+H5b+I5b+K5b+L5b+O5b+T5b+U5b+V5b+a5b+b5b+c5b+e5b+f5b+i5b+j5b+l5b+m5b+o5b+p5b+s5b+v5b+w5b+y5b+z5b+05b+25b+35b+55b+65b+85oCHXCJdLFtcIjkwNDBcIixcIuaAiOaAieaAi+aAjOaAkOaAkeaAk+aAl+aAmOaAmuaAnuaAn+aAouaAo+aApOaArOaAreaAruaAsFwiLDQsXCLmgLZcIiw0LFwi5oC95oC+5oGA5oGEXCIsNixcIuaBjOaBjuaBj+aBkeaBk+aBlOaBluaBl+aBmOaBm+aBnOaBnuaBn+aBoOaBoeaBpeaBpuaBruaBseaBsuaBtOaBteaBt+aBvuaCgFwiXSxbXCI5MDgwXCIsXCLmgoHmgoLmgoXmgobmgofmgojmgormgovmgo7mgo/mgpDmgpHmgpPmgpXmgpfmgpjmgpnmgpzmgp7mgqHmgqLmgqTmgqXmgqfmgqnmgqrmgq7mgrDmgrPmgrXmgrbmgrfmgrnmgrrmgr1cIiw3LFwi5oOH5oOI5oOJ5oOMXCIsNCxcIuaDkuaDk+aDlOaDluaDl+aDmeaDm+aDnuaDoVwiLDQsXCLmg6rmg7Hmg7Lmg7Xmg7fmg7jmg7tcIiw0LFwi5oSC5oSD5oSE5oSF5oSH5oSK5oSL5oSM5oSQXCIsNCxcIuaEluaEl+aEmOaEmeaEm+aEnOaEneaEnuaEoeaEouaEpeaEqOaEqeaEquaErFwiLDE4LFwi5oWAXCIsNl0sW1wiOTE0MFwiLFwi5oWH5oWJ5oWL5oWN5oWP5oWQ5oWS5oWT5oWU5oWWXCIsNixcIuaFnuaFn+aFoOaFoeaFo+aFpOaFpeaFpuaFqVwiLDYsXCLmhbHmhbLmhbPmhbTmhbbmhbhcIiwxOCxcIuaGjOaGjeaGj1wiLDQsXCLmhpVcIl0sW1wiOTE4MFwiLFwi5oaWXCIsNixcIuaGnlwiLDgsXCLmhqrmhqvmhq1cIiw5LFwi5oa4XCIsNSxcIuaGv+aHgOaHgeaHg1wiLDQsXCLmh4nmh4xcIiw0LFwi5oeT5oeVXCIsMTYsXCLmh6dcIiwxMyxcIuaHtlwiLDgsXCLmiIBcIiw1LFwi5oiH5oiJ5oiT5oiU5oiZ5oic5oid5oie5oig5oij5oim5oin5oio5oip5oir5oit5oiv5oiw5oix5oiy5oi15oi25oi4XCIsNCxcIuaJguaJhOaJheaJhuaJilwiXSxbXCI5MjQwXCIsXCLmiY/miZDmiZXmiZbmiZfmiZnmiZrmiZxcIiw2LFwi5omk5oml5omo5omx5omy5om05om15om35om45om65om75om95oqB5oqC5oqD5oqF5oqG5oqH5oqI5oqLXCIsNSxcIuaKlOaKmeaKnOaKneaKnuaKo+aKpuaKp+aKqeaKquaKreaKruaKr+aKsOaKsuaKs+aKtOaKtuaKt+aKuOaKuuaKvuaLgOaLgVwiXSxbXCI5MjgwXCIsXCLmi4Pmi4vmi4/mi5Hmi5Xmi53mi57mi6Dmi6Hmi6Tmi6rmi6vmi7Dmi7Lmi7Xmi7jmi7nmi7rmi7vmjIDmjIPmjITmjIXmjIbmjIrmjIvmjIzmjI3mjI/mjJDmjJLmjJPmjJTmjJXmjJfmjJjmjJnmjJzmjKbmjKfmjKnmjKzmjK3mjK7mjLDmjLHmjLNcIiw1LFwi5oy75oy85oy+5oy/5o2A5o2B5o2E5o2H5o2I5o2K5o2R5o2S5o2T5o2U5o2WXCIsNyxcIuaNoOaNpOaNpeaNpuaNqOaNquaNq+aNrOaNr+aNsOaNsuaNs+aNtOaNteaNuOaNueaNvOaNveaNvuaNv+aOgeaOg+aOhOaOheaOhuaOi+aOjeaOkeaOk+aOlOaOleaOl+aOmVwiLDYsXCLmjqHmjqTmjqbmjqvmjq/mjrHmjrLmjrXmjrbmjrnmjrvmjr3mjr/mj4BcIl0sW1wiOTM0MFwiLFwi5o+B5o+C5o+D5o+F5o+H5o+I5o+K5o+L5o+M5o+R5o+T5o+U5o+V5o+XXCIsNixcIuaPn+aPouaPpFwiLDQsXCLmj6vmj6zmj67mj6/mj7Dmj7Hmj7Pmj7Xmj7fmj7nmj7rmj7vmj7zmj77mkIPmkITmkIZcIiw0LFwi5pCN5pCO5pCR5pCS5pCVXCIsNSxcIuaQneaQn+aQouaQo+aQpFwiXSxbXCI5MzgwXCIsXCLmkKXmkKfmkKjmkKnmkKvmkK5cIiw1LFwi5pC1XCIsNCxcIuaQu+aQvOaQvuaRgOaRguaRg+aRieaRi1wiLDYsXCLmkZPmkZXmkZbmkZfmkZlcIiw0LFwi5pGfXCIsNyxcIuaRqOaRquaRq+aRrOaRrlwiLDksXCLmkbtcIiw2LFwi5pKD5pKG5pKIXCIsOCxcIuaSk+aSlOaSl+aSmOaSmuaSm+aSnOaSneaSn1wiLDQsXCLmkqXmkqbmkqfmkqjmkqrmkqvmkq/mkrHmkrLmkrPmkrTmkrbmkrnmkrvmkr3mkr7mkr/mk4Hmk4Pmk4Tmk4ZcIiw2LFwi5pOP5pOR5pOT5pOU5pOV5pOW5pOZ5pOaXCJdLFtcIjk0NDBcIixcIuaTm+aTnOaTneaTn+aToOaToeaTo+aTpeaTp1wiLDI0LFwi5pSBXCIsNyxcIuaUilwiLDcsXCLmlJNcIiw0LFwi5pSZXCIsOF0sW1wiOTQ4MFwiLFwi5pSi5pSj5pSk5pSmXCIsNCxcIuaUrOaUreaUsOaUseaUsuaUs+aUt+aUuuaUvOaUveaVgFwiLDQsXCLmlYbmlYfmlYrmlYvmlY3mlY7mlZDmlZLmlZPmlZTmlZfmlZjmlZrmlZzmlZ/mlaDmlaHmlaTmlaXmlafmlajmlanmlarmla3mla7mla/mlbHmlbPmlbXmlbbmlbhcIiwxNCxcIuaWiOaWieaWiuaWjeaWjuaWj+aWkuaWlOaWleaWluaWmOaWmuaWneaWnuaWoOaWouaWo+aWpuaWqOaWquaWrOaWruaWsVwiLDcsXCLmlrrmlrvmlr7mlr/ml4Dml4Lml4fml4jml4nml4rml43ml5Dml5Hml5Pml5Tml5Xml5hcIiw3LFwi5peh5pej5pek5peq5perXCJdLFtcIjk1NDBcIixcIuaXsuaXs+aXtOaXteaXuOaXueaXu1wiLDQsXCLmmIHmmITmmIXmmIfmmIjmmInmmIvmmI3mmJDmmJHmmJLmmJbmmJfmmJjmmJrmmJvmmJzmmJ7mmKHmmKLmmKPmmKTmmKbmmKnmmKrmmKvmmKzmmK7mmLDmmLLmmLPmmLdcIiw0LFwi5pi95pi/5pmA5pmC5pmEXCIsNixcIuaZjeaZjuaZkOaZkeaZmFwiXSxbXCI5NTgwXCIsXCLmmZnmmZvmmZzmmZ3mmZ7mmaDmmaLmmaPmmaXmmafmmalcIiw0LFwi5pmx5pmy5pmz5pm15pm45pm55pm75pm85pm95pm/5pqA5pqB5pqD5pqF5pqG5pqI5pqJ5pqK5pqL5pqN5pqO5pqP5pqQ5pqS5pqT5pqU5pqV5pqYXCIsNCxcIuaanlwiLDgsXCLmmqlcIiw0LFwi5pqvXCIsNCxcIuaateaatuaat+aauOaauuaau+aavOaaveaav1wiLDI1LFwi5pua5pueXCIsNyxcIuabp+abqOabqlwiLDUsXCLmm7Hmm7Xmm7bmm7jmm7rmm7vmm73mnIHmnILmnINcIl0sW1wiOTY0MFwiLFwi5pyE5pyF5pyG5pyH5pyM5pyO5pyP5pyR5pyS5pyT5pyW5pyY5pyZ5pya5pyc5pye5pygXCIsNSxcIuacp+acqeacruacsOacsuacs+actuact+acuOacueacu+acvOacvuacv+adgeadhOadheadh+adiuadi+adjeadkuadlOadleadl1wiLDQsXCLmnZ3mnaLmnaPmnaTmnabmnafmnavmnazmna7mnbHmnbTmnbZcIl0sW1wiOTY4MFwiLFwi5p245p255p265p275p295p6A5p6C5p6D5p6F5p6G5p6I5p6K5p6M5p6N5p6O5p6P5p6R5p6S5p6T5p6U5p6W5p6Z5p6b5p6f5p6g5p6h5p6k5p6m5p6p5p6s5p6u5p6x5p6y5p605p65XCIsNyxcIuafguafhVwiLDksXCLmn5Xmn5bmn5fmn5vmn5/mn6Hmn6Pmn6Tmn6bmn6fmn6jmn6rmn6vmn63mn67mn7Lmn7VcIiw3LFwi5p++5qCB5qCC5qCD5qCE5qCG5qCN5qCQ5qCS5qCU5qCV5qCYXCIsNCxcIuagnuagn+agoOagolwiLDYsXCLmoKtcIiw2LFwi5qC05qC15qC25qC65qC75qC/5qGH5qGL5qGN5qGP5qGS5qGWXCIsNV0sW1wiOTc0MFwiLFwi5qGc5qGd5qGe5qGf5qGq5qGsXCIsNyxcIuahteahuFwiLDgsXCLmooLmooTmoodcIiw3LFwi5qKQ5qKR5qKS5qKU5qKV5qKW5qKYXCIsOSxcIuaio+aipOaipeaiqeaiquaiq+airOairuaiseaisuaitOaituait+aiuFwiXSxbXCI5NzgwXCIsXCLmorlcIiw2LFwi5qOB5qODXCIsNSxcIuajiuajjOajjuajj+ajkOajkeajk+ajlOajluajl+ajmeajm1wiLDQsXCLmo6Hmo6Lmo6RcIiw5LFwi5qOv5qOy5qOz5qO05qO25qO35qO45qO75qO95qO+5qO/5qSA5qSC5qSD5qSE5qSGXCIsNCxcIuakjOakj+akkeakk1wiLDExLFwi5qSh5qSi5qSj5qSlXCIsNyxcIuakruakr+akseaksuaks+akteaktuakt+akuOakuuaku+akvOakvualgOalgealg1wiLDE2LFwi5qWV5qWW5qWY5qWZ5qWb5qWc5qWfXCJdLFtcIjk4NDBcIixcIualoealoualpOalpealp+alqOalqealqualrOalrealr+alsOalslwiLDQsXCLmpbrmpbvmpb3mpb7mpb/mpoHmpoPmpoXmpormpovmpozmpo5cIiw1LFwi5qaW5qaX5qaZ5qaa5qadXCIsOSxcIuamqeamquamrOamruamr+amsOamsuams+amteamtuamuOamueamuuamvOamvVwiXSxbXCI5ODgwXCIsXCLmpr7mpr/mp4Dmp4JcIiw3LFwi5qeL5qeN5qeP5qeR5qeS5qeT5qeVXCIsNSxcIuannOanneannuanoVwiLDExLFwi5qeu5qev5qew5qex5qezXCIsOSxcIuanvuaogFwiLDksXCLmqItcIiwxMSxcIuaomVwiLDUsXCLmqKDmqKJcIiw1LFwi5qip5qir5qis5qit5qiu5qiw5qiy5qiz5qi05qi2XCIsNixcIuaov1wiLDQsXCLmqYXmqYbmqYhcIiw3LFwi5qmRXCIsNixcIuapmlwiXSxbXCI5OTQwXCIsXCLmqZxcIiw0LFwi5qmi5qmj5qmk5qmmXCIsMTAsXCLmqbJcIiw2LFwi5qm65qm75qm95qm+5qm/5qqB5qqC5qqD5qqFXCIsOCxcIuaqj+aqklwiLDQsXCLmqphcIiw3LFwi5qqhXCIsNV0sW1wiOTk4MFwiLFwi5qqn5qqo5qqq5qqtXCIsMTE0LFwi5qyl5qym5qyoXCIsNl0sW1wiOWE0MFwiLFwi5qyv5qyw5qyx5qyz5qy05qy15qy25qy45qy75qy85qy95qy/5q2A5q2B5q2C5q2E5q2F5q2I5q2K5q2L5q2NXCIsMTEsXCLmrZpcIiw3LFwi5q2o5q2p5q2rXCIsMTMsXCLmrbrmrb3mrb7mrb/mroDmroXmrohcIl0sW1wiOWE4MFwiLFwi5q6M5q6O5q6P5q6Q5q6R5q6U5q6V5q6X5q6Y5q6Z5q6cXCIsNCxcIuauolwiLDcsXCLmrqtcIiw3LFwi5q625q64XCIsNixcIuavgOavg+avhOavhlwiLDQsXCLmr4zmr47mr5Dmr5Hmr5jmr5rmr5xcIiw0LFwi5q+iXCIsNyxcIuavrOavreavruavsOavseavsuavtOavtuavt+avuOavuuavu+avvOavvlwiLDYsXCLmsIhcIiw0LFwi5rCO5rCS5rCX5rCc5rCd5rCe5rCg5rCj5rCl5rCr5rCs5rCt5rCx5rCz5rC25rC35rC55rC65rC75rC85rC+5rC/5rGD5rGE5rGF5rGI5rGLXCIsNCxcIuaxkeaxkuaxk+axluaxmFwiXSxbXCI5YjQwXCIsXCLmsZnmsZrmsaLmsaPmsaXmsabmsafmsatcIiw0LFwi5rGx5rGz5rG15rG35rG45rG65rG75rG85rG/5rKA5rKE5rKH5rKK5rKL5rKN5rKO5rKR5rKS5rKV5rKW5rKX5rKY5rKa5rKc5rKd5rKe5rKg5rKi5rKo5rKs5rKv5rKw5rK05rK15rK25rK35rK65rOA5rOB5rOC5rOD5rOG5rOH5rOI5rOL5rON5rOO5rOP5rOR5rOS5rOYXCJdLFtcIjliODBcIixcIuazmeazmuaznOazneazn+azpOazpuazp+azqeazrOazreazsuaztOazueazv+a0gOa0gua0g+a0hea0hua0iOa0iea0iua0jea0j+a0kOa0kea0k+a0lOa0lea0lua0mOa0nOa0nea0n1wiLDUsXCLmtKbmtKjmtKnmtKzmtK3mtK/mtLDmtLTmtLbmtLfmtLjmtLrmtL/mtYDmtYLmtYTmtYnmtYzmtZDmtZXmtZbmtZfmtZjmtZvmtZ3mtZ/mtaHmtaLmtaTmtaXmtafmtajmtavmtazmta3mtbDmtbHmtbLmtbPmtbXmtbbmtbnmtbrmtbvmtb1cIiw0LFwi5raD5raE5raG5raH5raK5raL5raN5raP5raQ5raS5raWXCIsNCxcIua2nOa2oua2pea2rOa2rea2sOa2sea2s+a2tOa2tua2t+a2uVwiLDUsXCLmt4Hmt4Lmt4Pmt4jmt4nmt4pcIl0sW1wiOWM0MFwiLFwi5reN5reO5reP5reQ5reS5reT5reU5reV5reX5rea5reb5rec5ref5rei5rej5rel5ren5reo5rep5req5ret5rev5rew5rey5re05re15re25re45re65re9XCIsNyxcIua4hua4h+a4iOa4iea4i+a4j+a4kua4k+a4lea4mOa4mea4m+a4nOa4nua4n+a4oua4pua4p+a4qOa4qua4rOa4rua4sOa4sea4s+a4tVwiXSxbXCI5YzgwXCIsXCLmuLbmuLfmuLnmuLtcIiw3LFwi5rmFXCIsNyxcIua5j+a5kOa5kea5kua5lea5l+a5mea5mua5nOa5nea5nua5oFwiLDEwLFwi5rms5rmt5rmvXCIsMTQsXCLmuoDmuoHmuoLmuoTmuofmuojmuopcIiw0LFwi5rqRXCIsNixcIua6mea6mua6m+a6nea6nua6oOa6oea6o+a6pOa6pua6qOa6qea6q+a6rOa6rea6rua6sOa6s+a6tea6uOa6uea6vOa6vua6v+a7gOa7g+a7hOa7hea7hua7iOa7iea7iua7jOa7jea7jua7kOa7kua7lua7mOa7mea7m+a7nOa7nea7o+a7p+a7qlwiLDVdLFtcIjlkNDBcIixcIua7sOa7sea7sua7s+a7tea7tua7t+a7uOa7ulwiLDcsXCLmvIPmvITmvIXmvIfmvIjmvIpcIiw0LFwi5ryQ5ryR5ryS5ryWXCIsOSxcIua8oea8oua8o+a8pea8pua8p+a8qOa8rOa8rua8sOa8sua8tOa8tea8t1wiLDYsXCLmvL/mvYDmvYHmvYJcIl0sW1wiOWQ4MFwiLFwi5r2D5r2E5r2F5r2I5r2J5r2K5r2M5r2OXCIsOSxcIua9mea9mua9m+a9nea9n+a9oOa9oea9o+a9pOa9pea9p1wiLDUsXCLmva/mvbDmvbHmvbPmvbXmvbbmvbfmvbnmvbvmvb1cIiw2LFwi5r6F5r6G5r6H5r6K5r6L5r6PXCIsMTIsXCLmvp3mvp7mvp/mvqDmvqJcIiw0LFwi5r6oXCIsMTAsXCLmvrTmvrXmvrfmvrjmvrpcIiw1LFwi5r+B5r+DXCIsNSxcIua/ilwiLDYsXCLmv5NcIiwxMCxcIua/n+a/oua/o+a/pOa/pVwiXSxbXCI5ZTQwXCIsXCLmv6ZcIiw3LFwi5r+wXCIsMzIsXCLngJJcIiw3LFwi54CcXCIsNixcIueApFwiLDZdLFtcIjllODBcIixcIueAq1wiLDksXCLngLbngLfngLjngLpcIiwxNyxcIueBjeeBjueBkFwiLDEzLFwi54GfXCIsMTEsXCLnga7ngbHngbLngbPngbTngbfngbnngbrngbvngb3ngoHngoLngoPngoTngobngofngojngovngozngo3ngo/ngpDngpHngpPngpfngpjngprngpvngp5cIiwxMixcIueCsOeCsueCtOeCteeCtueCuueCvueCv+eDhOeDheeDhueDh+eDieeDi1wiLDEyLFwi54OaXCJdLFtcIjlmNDBcIixcIueDnOeDneeDnueDoOeDoeeDoueDo+eDpeeDqueDrueDsFwiLDYsXCLng7jng7rng7vng7zng75cIiwxMCxcIueEi1wiLDQsXCLnhJHnhJLnhJTnhJfnhJtcIiwxMCxcIueEp1wiLDcsXCLnhLLnhLPnhLRcIl0sW1wiOWY4MFwiLFwi54S154S3XCIsMTMsXCLnhYbnhYfnhYjnhYnnhYvnhY3nhY9cIiwxMixcIueFneeFn1wiLDQsXCLnhaXnhalcIiw0LFwi54Wv54Ww54Wx54W054W154W254W354W554W754W854W+XCIsNSxcIueGhVwiLDQsXCLnhovnhoznho3nho7nhpDnhpHnhpLnhpPnhpXnhpbnhpfnhppcIiw0LFwi54ahXCIsNixcIueGqeeGqueGq+eGrVwiLDUsXCLnhrTnhrbnhrfnhrjnhrpcIiw4LFwi54eEXCIsOSxcIueHj1wiLDRdLFtcImEwNDBcIixcIueHllwiLDksXCLnh6Hnh6Lnh6Pnh6Tnh6bnh6hcIiw1LFwi54evXCIsOSxcIueHulwiLDExLFwi54iHXCIsMTldLFtcImEwODBcIixcIueIm+eInOeInlwiLDksXCLniKnniKvniK3niK7niK/niLLniLPniLTniLrniLzniL7niYBcIiw2LFwi54mJ54mK54mL54mO54mP54mQ54mR54mT54mU54mV54mX54mY54ma54mc54me54mg54mj54mk54ml54mo54mq54mr54ms54mt54mw54mx54mz54m054m254m354m454m754m854m954qC54qD54qFXCIsNCxcIueKjOeKjueKkOeKkeeKk1wiLDExLFwi54qgXCIsMTEsXCLniq7nirHnirLnirPnirXnirpcIiw2LFwi54uF54uG54uH54uJ54uK54uL54uM54uP54uR54uT54uU54uV54uW54uY54ua54ubXCJdLFtcImExYTFcIixcIuOAgOOAgeOAgsK3y4nLh8Ko44CD44CF4oCU772e4oCW4oCm4oCY4oCZ4oCc4oCd44CU44CV44CIXCIsNyxcIuOAluOAl+OAkOOAkcKxw5fDt+KItuKIp+KIqOKIkeKIj+KIquKIqeKIiOKIt+KImuKKpeKIpeKIoOKMkuKKmeKIq+KIruKJoeKJjOKJiOKIveKIneKJoOKJruKJr+KJpOKJpeKInuKIteKItOKZguKZgMKw4oCy4oCz4oSD77yEwqTvv6Dvv6HigLDCp+KEluKYhuKYheKXi+KXj+KXjuKXh+KXhuKWoeKWoOKWs+KWsuKAu+KGkuKGkOKGkeKGk+OAk1wiXSxbXCJhMmExXCIsXCLihbBcIiw5XSxbXCJhMmIxXCIsXCLikohcIiwxOSxcIuKRtFwiLDE5LFwi4pGgXCIsOV0sW1wiYTJlNVwiLFwi44igXCIsOV0sW1wiYTJmMVwiLFwi4oWgXCIsMTFdLFtcImEzYTFcIixcIu+8ge+8gu+8g++/pe+8hVwiLDg4LFwi77+jXCJdLFtcImE0YTFcIixcIuOBgVwiLDgyXSxbXCJhNWExXCIsXCLjgqFcIiw4NV0sW1wiYTZhMVwiLFwizpFcIiwxNixcIs6jXCIsNl0sW1wiYTZjMVwiLFwizrFcIiwxNixcIs+DXCIsNl0sW1wiYTZlMFwiLFwi77i177i277i577i677i/77mA77i977i+77mB77mC77mD77mEXCJdLFtcImE2ZWVcIixcIu+4u++4vO+4t++4uO+4sVwiXSxbXCJhNmY0XCIsXCLvuLPvuLRcIl0sW1wiYTdhMVwiLFwi0JBcIiw1LFwi0IHQllwiLDI1XSxbXCJhN2QxXCIsXCLQsFwiLDUsXCLRkdC2XCIsMjVdLFtcImE4NDBcIixcIsuKy4vLmeKAk+KAleKApeKAteKEheKEieKGluKGl+KGmOKGmeKIleKIn+KIo+KJkuKJpuKJp+KKv+KVkFwiLDM1LFwi4paBXCIsNl0sW1wiYTg4MFwiLFwi4paIXCIsNyxcIuKWk+KWlOKWleKWvOKWveKXouKXo+KXpOKXpeKYieKKleOAkuOAneOAnlwiXSxbXCJhOGExXCIsXCLEgcOhx47DoMSTw6nEm8OoxKvDrceQw6zFjcOzx5LDssWrw7rHlMO5x5bHmMeax5zDvMOqyZFcIl0sW1wiYThiZFwiLFwixYTFiFwiXSxbXCJhOGMwXCIsXCLJoVwiXSxbXCJhOGM1XCIsXCLjhIVcIiwzNl0sW1wiYTk0MFwiLFwi44ChXCIsOCxcIuOKo+OOjuOOj+OOnOOOneOOnuOOoeOPhOOPjuOPkeOPkuOPle+4sO+/ou+/pFwiXSxbXCJhOTU5XCIsXCLihKHjiLFcIl0sW1wiYTk1Y1wiLFwi4oCQXCJdLFtcImE5NjBcIixcIuODvOOCm+OCnOODveODvuOAhuOCneOCnu+5iVwiLDksXCLvuZTvuZXvuZbvuZfvuZlcIiw4XSxbXCJhOTgwXCIsXCLvuaJcIiw0LFwi77mo77mp77mq77mrXCJdLFtcImE5OTZcIixcIuOAh1wiXSxbXCJhOWE0XCIsXCLilIBcIiw3NV0sW1wiYWE0MFwiLFwi54uc54ud54uf54uiXCIsNSxcIueLqueLq+eLteeLtueLueeLveeLvueLv+eMgOeMgueMhFwiLDUsXCLnjIvnjIznjI3njI/njJDnjJHnjJLnjJTnjJjnjJnnjJrnjJ/njKDnjKPnjKTnjKbnjKfnjKjnjK3njK/njLDnjLLnjLPnjLXnjLbnjLrnjLvnjLznjL3njYBcIiw4XSxbXCJhYTgwXCIsXCLnjYnnjYrnjYvnjYznjY7njY/njZHnjZPnjZTnjZXnjZbnjZhcIiw3LFwi542hXCIsMTAsXCLnja7njbDnjbFcIl0sW1wiYWI0MFwiLFwi542yXCIsMTEsXCLnjb9cIiw0LFwi546F546G546I546K546M546N546P546Q546S546T546U546V546X546Y546Z546a546c546d546e546g546h546jXCIsNSxcIueOqueOrOeOreeOseeOtOeOteeOtueOuOeOueeOvOeOveeOvueOv+ePgeePg1wiLDRdLFtcImFiODBcIixcIuePi+ePjOePjuePklwiLDYsXCLnj5rnj5vnj5znj53nj5/nj6Hnj6Lnj6Pnj6Tnj6bnj6jnj6rnj6vnj6znj67nj6/nj7Dnj7Hnj7NcIiw0XSxbXCJhYzQwXCIsXCLnj7hcIiwxMCxcIueQhOeQh+eQiOeQi+eQjOeQjeeQjueQkVwiLDgsXCLnkJxcIiw1LFwi55Cj55Ck55Cn55Cp55Cr55Ct55Cv55Cx55Cy55C3XCIsNCxcIueQveeQvueQv+eRgOeRglwiLDExXSxbXCJhYzgwXCIsXCLnkY5cIiw2LFwi55GW55GY55Gd55GgXCIsMTIsXCLnka7nka/nkbFcIiw0LFwi55G455G555G6XCJdLFtcImFkNDBcIixcIueRu+eRvOeRveeRv+eSgueShOeSheeShueSiOeSieeSiueSjOeSjeeSj+eSkVwiLDEwLFwi55Kd55KfXCIsNyxcIueSqlwiLDE1LFwi55K7XCIsMTJdLFtcImFkODBcIixcIueTiFwiLDksXCLnk5NcIiw4LFwi55Od55Of55Oh55Ol55OnXCIsNixcIueTsOeTseeTslwiXSxbXCJhZTQwXCIsXCLnk7Pnk7Xnk7hcIiw2LFwi55SA55SB55SC55SD55SFXCIsNyxcIueUjueUkOeUkueUlOeUleeUlueUl+eUm+eUneeUnueUoFwiLDQsXCLnlKbnlKfnlKrnlK7nlLTnlLbnlLnnlLznlL3nlL/nlYHnlYLnlYPnlYTnlYbnlYfnlYnnlYrnlY3nlZDnlZHnlZLnlZPnlZXnlZbnlZfnlZhcIl0sW1wiYWU4MFwiLFwi55WdXCIsNyxcIueVp+eVqOeVqeeVq1wiLDYsXCLnlbPnlbXnlbbnlbfnlbpcIiw0LFwi55aA55aB55aC55aE55aF55aHXCJdLFtcImFmNDBcIixcIueWiOeWieeWiueWjOeWjeeWjueWkOeWk+eWleeWmOeWm+eWnOeWnueWoueWplwiLDQsXCLnlq3nlrbnlrfnlrrnlrvnlr/nl4Dnl4Hnl4bnl4vnl4znl47nl4/nl5Dnl5Hnl5Pnl5fnl5nnl5rnl5znl53nl5/nl6Dnl6Hnl6Xnl6nnl6znl63nl67nl6/nl7Lnl7Pnl7Xnl7bnl7fnl7jnl7rnl7vnl73nl77nmILnmITnmIbnmIdcIl0sW1wiYWY4MFwiLFwi55iI55iJ55iL55iN55iO55iP55iR55iS55iT55iU55iW55ia55ic55id55ie55ih55ij55in55io55is55iu55iv55ix55iy55i255i355i555i655i755i955mB55mC55mEXCJdLFtcImIwNDBcIixcIueZhVwiLDYsXCLnmY5cIiw1LFwi55mV55mXXCIsNCxcIueZneeZn+eZoOeZoeeZoueZpFwiLDYsXCLnmaznma3nma7nmbBcIiw3LFwi55m555m655m855m/55qA55qB55qD55qF55qJ55qK55qM55qN55qP55qQ55qS55qU55qV55qX55qY55qa55qbXCJdLFtcImIwODBcIixcIueanFwiLDcsXCLnmqVcIiw4LFwi55qv55qw55qz55q1XCIsOSxcIuebgOebgeebg+WViumYv+Wfg+aMqOWTjuWUieWTgOeakeeZjOiUvOefruiJvueijeeIsemamOmejeawqOWuieS/uuaMieaal+WyuOiDuuahiOiCruaYguebjuWHueaVlueGrOe/seiihOWCsuWlpeaHiua+s+iKreaNjOaJkuWPreWQp+eshuWFq+eWpOW3tOaLlOi3i+mdtuaKiuiAmeWdnemcuOe9oueIuOeZveafj+eZvuaRhuS9sOi0peaLnOeol+aWkeePreaQrOaJs+iIrOmigeadv+eJiOaJruaLjOS8tOeTo+WNiuWKnue7iumCpuW4ruaihuamnOiGgOe7keajkuejheiajOmVkeWCjeiwpOiLnuiDnuWMheikkuWJpVwiXSxbXCJiMTQwXCIsXCLnm4Tnm4fnm4nnm4vnm4znm5Pnm5Xnm5nnm5rnm5znm53nm57nm6BcIiw0LFwi55umXCIsNyxcIuebsOebs+ebteebtuebt+ebuuebu+ebveebv+ecgOecguecg+echeechueciuecjOecjlwiLDEwLFwi55yb55yc55yd55ye55yh55yj55yk55yl55yn55yq55yrXCJdLFtcImIxODBcIixcIuecrOecruecsFwiLDQsXCLnnLnnnLvnnL3nnL7nnL/nnYLnnYTnnYXnnYbnnYhcIiw3LFwi552SXCIsNyxcIuednOiWhOmbueS/neWgoemlseWuneaKseaKpeaatOixuemyjeeIhuadr+eikeaCsuWNkeWMl+i+iOiDjOi0nemSoeWAjeeLiOWkh+aDq+eEmeiiq+WllOiLr+acrOesqOW0qee7t+eUreaztei5pui/uOmAvOm8u+avlOmEmeeslOW9vOeip+iTluiUveavleavmeavluW4geW6h+eXuemXreaVneW8iuW/hei+n+WjgeiHgumBv+mZm+merei+uee8lui0rOaJgeS+v+WPmOWNnui+qOi+qei+q+mBjeagh+W9quiGmOihqOmzluaGi+WIq+eYquW9rOaWjOa/kua7qOWuvuaRiOWFteWGsOafhOS4meeniemlvOeCs1wiXSxbXCJiMjQwXCIsXCLnnZ3nnZ7nnZ/nnaDnnaTnnafnnannnarnna1cIiwxMSxcIueduuedu+edvOeegeeegueeg+eehlwiLDUsXCLnno/nnpDnnpNcIiwxMSxcIueeoeeeo+eepOeepueeqOeeq+eereeerueer+eeseeesueetOeetlwiLDRdLFtcImIyODBcIixcIueevOeevuefgFwiLDEyLFwi55+OXCIsOCxcIuefmOefmeefmuefnVwiLDQsXCLnn6Tnl4Xlubbnjrvoj6Dmkq3mi6jpkrXms6LljZrli4PmkI/pk4LnrpTkvK/luJvoiLbohJbohormuKTms4rpqbPmjZXljZzlk7rooaXln6DkuI3luIPmraXnsL/pg6jmgJbmk6bnjJzoo4HmnZDmiY3otKLnnazouKnph4flvanoj5zolKHppJDlj4LompXmrovmg63mg6jngb/oi43oiLHku5Pmsqfol4/mk43ns5nmp73mm7nojYnljpXnrZbkvqflhozmtYvlsYLoua3mj5Llj4nojKzojLbmn6XnorTmkL3lr5/lspTlt67or6fmi4bmn7TosbrmkIDmjrronYnppovosJfnvKDpk7LkuqfpmJDpoqTmmIznjJZcIl0sW1wiYjM0MFwiLFwi55+m55+o55+q55+v55+w55+x55+y55+055+155+355+555+655+755+856CDXCIsNSxcIuegiuegi+egjuegj+egkOegk+egleegmeegm+egnuegoOegoeegouegpOegqOegquegq+egruegr+egseegsuegs+egteegtuegveegv+ehgeehguehg+ehhOehhuehiOehieehiuehi+ehjeehj+ehkeehk+ehlOehmOehmeehmlwiXSxbXCJiMzgwXCIsXCLnoZvnoZznoZ5cIiwxMSxcIuehr1wiLDcsXCLnobjnobnnobrnobvnob1cIiw2LFwi5Zy65bCd5bi46ZW/5YG/6IKg5Y6C5pWe55WF5ZSx5YCh6LaF5oqE6ZKe5pyd5Ziy5r2u5bei5ZC154KS6L2m5omv5pKk5o6j5b275r6I6YO06Iej6L6w5bCY5pmo5b+x5rKJ6ZmI6LaB6KGs5pKR56ew5Z+O5qmZ5oiQ5ZGI5LmY56iL5oOp5r6E6K+a5om/6YCe6aqL56ek5ZCD55e05oyB5YyZ5rGg6L+f5byb6amw6IC76b2/5L6I5bC66LWk57+F5pal54K95YWF5Yay6Jmr5bSH5a6g5oq96YWs55W06LiM56ig5oSB56255LuH57u4556F5LiR6Iet5Yid5Ye65qmx5Y6o6LqH6ZSE6ZuP5ruB6Zmk5qWaXCJdLFtcImI0NDBcIixcIueihOeiheeihueiiOeiiueii+eij+eikOeikueilOeileeilueimeeineeinueioOeioueipOeipueiqFwiLDcsXCLnorXnorbnorfnorjnorrnorvnorznor3nor/no4Dno4Lno4Pno4Tno4bno4fno4jno4zno43no47no4/no5Hno5Lno5Pno5bno5fno5jno5pcIiw5XSxbXCJiNDgwXCIsXCLno6Tno6Xno6bno6fno6nno6rno6vno61cIiw0LFwi56Oz56O156O256O456O556O7XCIsNSxcIuekguekg+ekhOekhlwiLDYsXCLnoYDlgqjnn5fmkJDop6blpITmj6Plt53nqb/mpL3kvKDoiLnllpjkuLLnlq7nqpfluaLluorpl6/liJvlkLnngormjbbplKTlnoLmmKXmpL/phofllIfmt7Pnuq/ooKLmiLPnu7DnlrXojKjno4Hpm4zovp7mhYjnk7for43mraTliLrotZDmrKHogarokbHlm7HljIbku47kuJvlh5HnspfphovnsIfkv4Poub/nr6HnqpzmkafltJTlgqzohIbnmIHnsrnmt6znv6DmnZHlrZjlr7jno4vmkq7mkJPmjqrmjKvplJnmkK3ovr7nrZTnmKnmiZPlpKflkYbmrbnlgqPmiLTluKbmrobku6PotLfooovlvoXpgK5cIl0sW1wiYjU0MFwiLFwi56SNXCIsNSxcIueklFwiLDksXCLnpJ9cIiw0LFwi56SlXCIsMTQsXCLnpLVcIiw0LFwi56S956S/56WC56WD56WE56WF56WH56WKXCIsOCxcIuellOelleelmOelmeeloeelo1wiXSxbXCJiNTgwXCIsXCLnpaTnpabnpannparnpavnpaznpa7npbBcIiw2LFwi56W556W7XCIsNCxcIuemguemg+emhuemh+emiOemieemi+emjOemjeemjuemkOemkeemkuaAoOiAveaLheS4ueWNlemDuOaOuOiDhuaXpuawruS9huaDrua3oeivnuW8ueibi+W9k+aMoeWFmuiNoeaho+WIgOaNo+i5iOWAkuWym+elt+WvvOWIsOeou+aCvOmBk+ebl+W+t+W+l+eahOi5rOeBr+eZu+etieeequWHs+mCk+WgpOS9jua7tOi/quaVjOesm+eLhOa2pOe/n+WroeaKteW6leWcsOiSguesrOW4neW8n+mAkue8lOmioOaOgua7h+eimOeCueWFuOmdm+Weq+eUteS9g+eUuOW6l+aDpuWloOa3gOauv+eiieWPvOmbleWHi+WIgeaOieWQiumSk+iwg+i3jOeIueein+idtui/reiwjeWPoFwiXSxbXCJiNjQwXCIsXCLnppNcIiw2LFwi56abXCIsMTEsXCLnpqhcIiwxMCxcIuemtFwiLDQsXCLnprznpr/np4Lnp4Tnp4Xnp4fnp4jnp4rnp4znp47np4/np5Dnp5Pnp5Tnp5bnp5fnp5lcIiw1LFwi56eg56eh56ei56el56eo56eqXCJdLFtcImI2ODBcIixcIuenrOenruensVwiLDYsXCLnp7nnp7rnp7znp77np7/nqIHnqITnqIXnqIfnqIjnqInnqIrnqIznqI9cIiw0LFwi56iV56iW56iY56iZ56ib56ic5LiB55uv5Y+u6ZKJ6aG26byO6ZSt5a6a6K6i5Lii5Lic5Yas6JGj5oeC5Yqo5qCL5L6X5oGr5Ya75rSe5YWc5oqW5paX6Zmh6LGG6YCX55eY6YO9552j5q+S54qK54us6K+75aC155256LWM5p2c6ZWA6IKa5bqm5rih5aaS56uv55+t6ZS75q615pat57yO5aCG5YWR6Zif5a+55aKp5ZCo6Lmy5pWm6aG/5Zuk6ZKd55u+6YGB5o6H5ZOG5aSa5aS65Z6b6Lqy5py16Le66Ii15YmB5oOw5aCV6Ju+5bOo6bmF5L+E6aKd6K655ail5oG25Y6E5om86YGP6YSC6aW/5oGp6ICM5YS/6ICz5bCU6aW15rSx5LqMXCJdLFtcImI3NDBcIixcIueoneeon+eooeeooueopFwiLDE0LFwi56i056i156i256i456i656i+56mAXCIsNSxcIueph1wiLDksXCLnqZJcIiw0LFwi56mYXCIsMTZdLFtcImI3ODBcIixcIuepqVwiLDYsXCLnqbHnqbLnqbPnqbXnqbvnqbznqb3nqb7nqoLnqoXnqofnqonnqornqovnqoznqo7nqo/nqpDnqpPnqpTnqpnnqprnqpvnqp7nqqHnqqLotLDlj5HnvZrnrY/kvJDkuY/pmIDms5Xnj5Dol6nluIbnlarnv7vmqIrnn77pkpLnuYHlh6Hng6blj43ov5TojIPotKnniq/ppa3ms5vlnYroirPmlrnogqrmiL/pmLLlpqjku7/orr/nurrmlL7oj7LpnZ7llaHpo57ogqXljKror73lkKDogrrlup/msrjotLnoiqzphZrlkKnmsJvliIbnurflnZ/nhJrmsb7nsonlpYvku73lv7/mhKTnsqrkuLDlsIHmnqvonILls7DplIvpo47nlq/ng73pgKLlhq/nvJ3orr3lpYnlh6TkvZvlkKblpKvmlbfogqTlrbXmibbmi4LovpDluYXmsJ/nrKbkvI/kv5jmnI1cIl0sW1wiYjg0MFwiLFwi56qj56qk56qn56qp56qq56qr56quXCIsNCxcIueqtFwiLDEwLFwi56uAXCIsMTAsXCLnq4xcIiw5LFwi56uX56uY56ua56ub56uc56ud56uh56ui56uk56unXCIsNSxcIuerruersOerseersuers1wiXSxbXCJiODgwXCIsXCLnq7RcIiw0LFwi56u756u856u+56yA56yB56yC56yF56yH56yJ56yM56yN56yO56yQ56yS56yT56yW56yX56yY56ya56yc56yd56yf56yh56yi56yj56yn56yp56yt5rWu5raq56aP6KKx5byX55Sr5oqa6L6F5L+v6Yec5pan6ISv6IWR5bqc6IWQ6LW05Ymv6KaG6LWL5aSN5YKF5LuY6Zic54i26IW56LSf5a+M6K6j6ZmE5aaH57ya5ZKQ5Zm25ZiO6K+l5pS55qaC6ZKZ55uW5rqJ5bmy55SY5p2G5p+R56u/6IKd6LW25oSf56eG5pWi6LWj5YaI5Yia6ZKi57y46IKb57qy5bKX5riv5p2g56+Z55qL6auY6IaP576U57OV5pCe6ZWQ56i/5ZGK5ZOl5q2M5pCB5oiI6bi96IOz55aZ5Ymy6Z2p6JGb5qC86Juk6ZiB6ZqU6ZOs5Liq5ZCE57uZ5qC56Lef6ICV5pu05bqa5765XCJdLFtcImI5NDBcIixcIuesr+essOessuestOesteestuest+esueesu+esveesv1wiLDUsXCLnrYbnrYjnrYrnrY3nrY7nrZPnrZXnrZfnrZnnrZznrZ7nrZ/nraHnraNcIiwxMCxcIuetr+etsOets+ettOettuetuOetuuetvOetveetv+eugeeugueug+euhOeuhlwiLDYsXCLnro7nro9cIl0sW1wiYjk4MFwiLFwi566R566S566T566W566Y566Z566a566b566e566f566g566j566k566l566u566v566w566y566z5661566256635665XCIsNyxcIuevguevg+evhOWfguiAv+ail+W3peaUu+WKn+aBrem+muS+m+i6rOWFrOWuq+W8k+W3qeaxnuaLsei0oeWFsemSqeWLvuayn+iLn+eLl+WeouaehOi0reWkn+i+nOiPh+WSleeujeS8sOayveWtpOWnkem8k+WPpOibiumqqOiwt+iCoeaVhemhvuWbuumbh+WIrueTnOWJkOWvoeaMguikguS5luaLkOaAquajuuWFs+WumOWGoOingueuoemmhue9kOaDr+eBjOi0r+WFieW5v+mAm+eRsOinhOWcreehheW9kum+n+mXuui9qOmsvOivoeeZuOahguafnOi3qui0teWIvei+iua7muajjemUhemDreWbveaenOijuei/h+WTiFwiXSxbXCJiYTQwXCIsXCLnr4Xnr4jnr4nnr4rnr4vnr43nr47nr4/nr5Dnr5Lnr5RcIiw0LFwi56+b56+c56+e56+f56+g56+i56+j56+k56+n56+o56+p56+r56+s56+t56+v56+w56+yXCIsNCxcIuevuOevueevuuevu+evveevv1wiLDcsXCLnsIjnsInnsIrnsI3nsI7nsJBcIiw1LFwi57CX57CY57CZXCJdLFtcImJhODBcIixcIuewmlwiLDQsXCLnsKBcIiw1LFwi57Co57Cp57CrXCIsMTIsXCLnsLlcIiw1LFwi57GC6aq45a2p5rW35rCm5Lql5a6z6aqH6YWj5oao6YKv6Z+p5ZCr5ra15a+S5Ye95ZaK572V57+w5pK85o2N5pex5oa+5oKN54SK5rGX5rGJ5aSv5p2t6Iiq5aOV5ZqO6LGq5q+r6YOd5aW96ICX5Y+35rWp5ZG15Zad6I236I+P5qC456a+5ZKM5L2V5ZCI55uS6LKJ6ZiC5rKz5ra46LWr6KSQ6bmk6LS65Zi/6buR55eV5b6I54ug5oGo5ZO85Lqo5qiq6KGh5oGS6L2w5ZOE54OY6Jm56bi/5rSq5a6P5byY57qi5ZaJ5L6v54y05ZC85Y6a5YCZ5ZCO5ZG85LmO5b+955Ga5aO26JGr6IOh6J2054uQ57OK5rmWXCJdLFtcImJiNDBcIixcIuexg1wiLDksXCLnsY5cIiwzNixcIuextVwiLDUsXCLnsb5cIiw5XSxbXCJiYjgwXCIsXCLnsojnsopcIiw2LFwi57KT57KU57KW57KZ57Ka57Kb57Kg57Kh57Kj57Km57Kn57Ko57Kp57Kr57Ks57Kt57Kv57Kw57K0XCIsNCxcIueyuueyu+W8p+iZjuWUrOaKpOS6kuayquaIt+iKseWTl+WNjueMvua7keeUu+WIkuWMluivneankOW+iuaAgOa3ruWdj+asoueOr+ahk+i/mOe8k+aNouaCo+WUpOeXquixoueElea2o+WupuW5u+iNkuaFjOm7hOejuuidl+ewp+eah+WHsOaDtueFjOaZg+W5jOaBjeiwjueBsOaMpei+ieW+veaBouiblOWbnuavgeaClOaFp+WNieaDoOaZpui0v+enveS8mueDqeaxh+ius+ivsue7mOiNpOaYj+Wpmumtgua1kea3t+ixgea0u+S8meeBq+iOt+aIluaDkemcjei0p+eluOWHu+WcvuWfuuacuueVuOeoveenr+eulVwiXSxbXCJiYzQwXCIsXCLnsr/ns4Dns4Lns4Pns4Tns4bns4nns4vns45cIiw2LFwi57OY57Oa57Ob57Od57Oe57OhXCIsNixcIuezqVwiLDUsXCLns7BcIiw3LFwi57O557O657O8XCIsMTMsXCLntItcIiw1XSxbXCJiYzgwXCIsXCLntJFcIiwxNCxcIue0oee0o+e0pOe0pee0pue0qOe0qee0que0rOe0ree0rue0sFwiLDYsXCLogozppaXov7nmv4DorqXpuKHlp6znu6nnvInlkInmnoHmo5jovpHnsY3pm4blj4rmgKXnlr7msbLljbPlq4nnuqfmjKTlh6DohIrlt7Hok5/mioDlhoDlraPkvI7npa3liYLmgrjmtY7lr4Tlr4LorqHorrDml6Llv4zpmYXlppPnu6fnuqrlmInmnrflpLnkvbPlrrbliqDojZrpoorotL7nlLLpkr7lgYfnqLzku7fmnrbpqb7lq4Hmrbznm5HlnZrlsJbnrLrpl7TnhY7lhbzogqnoibDlpbjnvITojKfmo4Dmn6znorHnobfmi6PmjaHnroDkv63liarlh4/ojZDmp5vpibTot7XotLHop4HplK7nrq3ku7ZcIl0sW1wiYmQ0MFwiLFwi57S3XCIsNTQsXCLnta9cIiw3XSxbXCJiZDgwXCIsXCLntbhcIiwzMixcIuWBpeiIsOWJkemlr+a4kOa6hea2p+W7uuWDteWnnOWwhua1huaxn+eWhuiSi+ahqOWlluiusuWMoOmFsemZjeiVieakkuekgeeEpuiDtuS6pOmDiua1h+mqhOWoh+WavOaQhemTsOefq+S+peiEmueLoeinkumluue8tOe7nuWJv+aVmemFtei9v+i+g+WPq+eqluaPreaOpeeahuenuOihl+mYtuaIquWKq+iKguahlOadsOaNt+edq+errea0gee7k+ino+WnkOaIkuiXieiKpeeVjOWAn+S7i+eWpeivq+WxiuW3vueti+aWpOmHkeS7iua0peiln+e0p+mUpuS7heiwqOi/m+mds+aZi+emgei/keeDrOa1uFwiXSxbXCJiZTQwXCIsXCLntplcIiwxMixcIue2p1wiLDYsXCLntq9cIiw0Ml0sW1wiYmU4MFwiLFwi57eaXCIsMzIsXCLlsL3lirLojYblhaLojI7nnZvmmbbpsrjkuqzmg4rnsr7nsrPnu4/kupXorabmma/poojpnZnlooPmlazplZzlvoTnl4npnZbnq5/nq57lh4Dngq/nqpjmj6rnqbbnuqDnjpbpn63kuYXngbjkuZ3phZLljqnmlZHml6foh7zoiIXlko7lsLHnlprpnqDmi5jni5nnlr3lsYXpqbnoj4rlsYDlkoDnn6nkuL7msq7ogZrmi5Lmja7lt6jlhbfot53ouJ7plK/kv7Hlj6Xmg6fngqzliafmjZDpuYPlqJ/lgKbnnLfljbfnu6LmkoXmlKvmionmjpjlgJTniLXop4nlhrPor4Dnu53lnYfoj4zpkqflhpvlkJvls7tcIl0sW1wiYmY0MFwiLFwi57e7XCIsNjJdLFtcImJmODBcIixcIue4uue4vFwiLDQsXCLnuYJcIiw0LFwi57mIXCIsMjEsXCLkv4rnq6PmtZrpg6Hpqo/lloDlkpbljaHlkq/lvIDmj6nmpbflh6/mhajliIrloKrli5jlnY7noI3nnIvlurfmhbfns6DmiZvmipfkuqLngpXogIPmi7fng6TpnaDlnbfoi5vmn6/mo7Xno5Xpopfnp5Hlo7PlkrPlj6/muLTlhYvliLvlrqLor77ogq/llYPlnqbmgbPlnZHlkK3nqbrmgZDlrZTmjqfmiqDlj6PmiaPlr4fmnq/lk63nqp/oi6bphbflupPoo6TlpLjlnq7mjI7ot6jog6/lnZfnrbfkvqnlv6vlrr3mrL7ljKHnrZDni4LmoYbnn7/nnLbml7flhrXkuo/nm5Tlsr/nqqXokbXlpY7prYHlgoBcIl0sW1wiYzA0MFwiLFwi57meXCIsMzUsXCLnuoNcIiwyMyxcIue6nOe6nee6nlwiXSxbXCJjMDgwXCIsXCLnuq7nurTnurvnurznu5bnu6Tnu6znu7nnvIrnvJDnvJ7nvLfnvLnnvLtcIiw2LFwi572D572GXCIsOSxcIue9kue9k+mmiOaEp+a6g+WdpOaYhuaNhuWbsOaLrOaJqeW7k+mYlOWeg+aLieWWh+icoeiFiui+o+WVpuiOseadpei1luiTneWpquagj+aLpuevrumYkeWFsOa+nOiwsOaPveiniOaHkue8hueDgua7peeQheamlOeLvOW7iumDjuacl+a1quaNnuWKs+eJouiAgeS9rOWnpemFqueDmea2neWLkuS5kOmbt+mVreiVvuejiue0r+WEoeWekuaTguiCi+exu+azquajsealnuWGt+WOmOaiqOeKgem7juevseeLuOemu+a8k+eQhuadjumHjOmypOekvOiOieiNlOWQj+agl+S4veWOieWKseegvuWOhuWIqeWCiOS+i+S/kFwiXSxbXCJjMTQwXCIsXCLnvZbnvZnnvZvnvZznvZ3nvZ7nvaDnvaNcIiw0LFwi572r572s572t572v572w572z57215722572357245726572757285729572/576A576CXCIsNyxcIue+i+e+jee+j1wiLDQsXCLnvpVcIiw0LFwi576b576c576g576i576j576l576m576oXCIsNixcIue+sVwiXSxbXCJjMTgwXCIsXCLnvrNcIiw0LFwi57665767576+57+A57+C57+D57+E57+G57+H57+I57+J57+L57+N57+PXCIsNCxcIue/lue/l+e/mVwiLDUsXCLnv6Lnv6Pnl6Lnq4vnspLmsqXpmrblipvnkoPlk6nkv6nogZTojrLov57plbDlu4nmgJzmtp/luJjmlZvohLjpk77mgYvngrznu4Pnsq7lh4nmooHnsrHoia/kuKTovobph4/mmb7kuq7osIXmkqnogYrlg5rnlpfnh47lr6Xovr3mvabkuobmkoLplaPlu5bmlpnliJfoo4Lng4jliqPnjI7nkLPmnpfno7fpnJbkuLTpgrvps57mt4vlh5votYHlkJ3mi47njrLoj7Hpm7bpvoTpk4PkvLbnvprlh4zngbXpmbXlsq3pooblj6bku6TmupznkInmprTnoavppo/nlZnliJjnmKTmtYHmn7Plha3pvpnogYvlkpnnrLznqr9cIl0sW1wiYzI0MFwiLFwi57+k57+n57+o57+q57+r57+s57+t57+v57+y57+0XCIsNixcIue/vee/vue/v+iAguiAh+iAiOiAieiAiuiAjuiAj+iAkeiAk+iAmuiAm+iAneiAnuiAn+iAoeiAo+iApOiAq1wiLDUsXCLogLLogLTogLnogLrogLzogL7ogYDogYHogYTogYXogYfogYjogYnogY7ogY/ogZDogZHogZPogZXogZbogZdcIl0sW1wiYzI4MFwiLFwi6IGZ6IGbXCIsMTMsXCLogatcIiw1LFwi6IGyXCIsMTEsXCLpmoblnoTmi6LpmYfmpbzlqITmkILnr5PmvI/pmYvoiqbljaLpooXlupDngonmjrPljaTomY/psoHpupPnoozpnLLot6/otYLpub/mvZ7npoTlvZXpmYbmiK7pqbTlkJXpk53kvqPml4XlsaXlsaHnvJXomZHmsK/lvovnjofmu6Tnu7/ls6bmjJvlrarmu6bljbXkubHmjqDnlaXmiqHova7kvKbku5HmsqbnurborrrokJ3onrrnvZfpgLvplKPnrqnpqqHoo7jokL3mtJvpqobnu5zlpojpurvnjpvnoIHomoLpqazpqoLlmJvlkJfln4vkubDpuqbljZbov4johInnnpLpppLom67mu6HolJPmm7zmhaLmvKtcIl0sW1wiYzM0MFwiLFwi6IG+6IKB6IKC6IKF6IKI6IKK6IKNXCIsNSxcIuiClOiCleiCl+iCmeiCnuiCo+iCpuiCp+iCqOiCrOiCsOiCs+iCteiCtuiCuOiCueiCu+iDheiDh1wiLDQsXCLog49cIiw2LFwi6IOY6IOf6IOg6IOi6IOj6IOm6IOu6IO16IO36IO56IO76IO+6IO/6ISA6ISB6ISD6ISE6ISF6ISH6ISI6ISLXCJdLFtcImMzODBcIixcIuiEjOiEleiEl+iEmeiEm+iEnOiEneiEn1wiLDEyLFwi6ISt6ISu6ISw6ISz6IS06IS16IS36IS5XCIsNCxcIuiEv+iwqeiKkuiMq+ebsuawk+W/meiOveeMq+iMhemUmuavm+efm+mThuWNr+iMguWGkuW4veiyjOi0uOS5iOeOq+aemuaihemFtumcieeFpOayoeecieWqkumVgeavj+e+juaYp+WvkOWmueWqmumXqOmXt+S7rOiQjOiSmeaqrOebn+mUsOeMm+aipuWtn+ecr+mGmumdoeeznOi/t+iwnOW8peexs+enmOinheazjOicnOWvhuW5guajieecoOe7teWGleWFjeWLieWoqee8hemdouiLl+aPj+eehOiXkOenkua4uuW6meWmmeiUkeeBreawkeaKv+eav+aVj+aCr+mXveaYjuien+m4o+mTreWQjeWRveiwrOaRuFwiXSxbXCJjNDQwXCIsXCLohYBcIiw1LFwi6IWH6IWJ6IWN6IWO6IWP6IWS6IWW6IWX6IWY6IWbXCIsNCxcIuiFoeiFouiFo+iFpOiFpuiFqOiFquiFq+iFrOiFr+iFsuiFs+iFteiFtuiFt+iFuOiGgeiGg1wiLDQsXCLohonohovohozoho3oho7ohpDohpJcIiw1LFwi6IaZ6Iaa6IaeXCIsNCxcIuiGpOiGpVwiXSxbXCJjNDgwXCIsXCLohqfohqnohqtcIiw3LFwi6Ia0XCIsNSxcIuiGvOiGveiGvuiGv+iHhOiHheiHh+iHiOiHieiHi+iHjVwiLDYsXCLmkbnomJHmqKHohpzno6jmkanprZTmirnmnKvojqvloqjpu5jmsqvmvKDlr57pmYzosIvniZ/mn5Dmi4fniaHkuqnlp4bmr43lopPmmq7luZXli5/mhZXmnKjnm67nnabniafnqYbmi7/lk6rlkZDpkqDpgqPlqJznurPmsJbkuYPlpbbogJDlpYjljZfnlLfpmr7lm4rmjKDohJHmgbzpl7nmt5blkaLppoHlhoXlq6nog73lpq7pnJPlgKrms6XlsLzmi5/kvaDljL/ohbvpgIbmurrolKvmi4jlubTnor7mkrXmjbvlv7XlqJjphb/puJ/lsL/mjY/ogYLlrb3lla7plYrplY3mtoXmgqjmn6Dni57lh53lroFcIl0sW1wiYzU0MFwiLFwi6IeUXCIsMTQsXCLoh6Toh6Xoh6boh6joh6noh6voh65cIiw0LFwi6Ie1XCIsNSxcIuiHveiHv+iIg+iIh1wiLDQsXCLoiI7oiI/oiJHoiJPoiJVcIiw1LFwi6Iid6Iig6Iik6Iil6Iim6Iin6Iip6Iiu6Iiy6Ii66Ii86Ii96Ii/XCJdLFtcImM1ODBcIixcIuiJgOiJgeiJguiJg+iJheiJhuiJiOiJiuiJjOiJjeiJjuiJkFwiLDcsXCLoiZnoiZvoiZzoiZ3oiZ7oiaBcIiw3LFwi6Imp5oun5rOe54mb5omt6ZKu57q96IST5rWT5Yac5byE5aW05Yqq5oCS5aWz5pqW6JmQ55af5oyq5oem57Ov6K+65ZOm5qyn6bil5q606JeV5ZGV5YG25rKk5ZWq6La054is5biV5oCV55C25ouN5o6S54mM5b6Y5rmD5rS+5pSA5r2Y55uY56OQ55u855WU5Yik5Y+b5LmT5bqe5peB6ICq6IOW5oqb5ZKG5Yio54Ku6KKN6LeR5rOh5ZG46IOa5Z+56KO06LWU6Zmq6YWN5L2p5rKb5Za355uG56Cw5oqo54O55r6O5b2t6JOs5qOa56G856+36Iao5pyL6bmP5o2n56Kw5Z2v56CS6Zy55om55oqr5YqI55C15q+XXCJdLFtcImM2NDBcIixcIuiJquiJq+iJrOiJreiJseiJteiJtuiJt+iJuOiJu+iJvOiKgOiKgeiKg+iKheiKhuiKh+iKieiKjOiKkOiKk+iKlOiKleiKluiKmuiKm+iKnuiKoOiKouiKo+iKp+iKsuiKteiKtuiKuuiKu+iKvOiKv+iLgOiLguiLg+iLheiLhuiLieiLkOiLluiLmeiLmuiLneiLouiLp+iLqOiLqeiLquiLrOiLreiLruiLsOiLsuiLs+iLteiLtuiLuFwiXSxbXCJjNjgwXCIsXCLoi7roi7xcIiw0LFwi6IyK6IyL6IyN6IyQ6IyS6IyT6IyW6IyY6IyZ6IydXCIsOSxcIuiMqeiMquiMruiMsOiMsuiMt+iMu+iMveWVpOiEvueWsuearuWMueeXnuWDu+WxgeitrOevh+WBj+eJh+mql+mjmOa8gueTouelqOaSh+eepeaLvOmikei0q+WTgeiBmOS5kuWdquiLueiQjeW5s+WHreeTtuivhOWxj+WdoeazvOmih+WphuegtOmthOi/q+eyleWJluaJkemTuuS7huiOhuiRoeiPqeiSsuWflOactOWcg+aZrua1puiwseabneeAkeacn+asuuagluaImuWmu+S4g+WHhOa8huafkuayj+WFtuaji+Wlh+atp+eVpuW0juiEkOm9kOaXl+eliOelgemqkei1t+WyguS5nuS8geWQr+WlkeegjOWZqOawlOi/hOW8g+axveazo+iuq+aOkFwiXSxbXCJjNzQwXCIsXCLojL7ojL/ojYHojYLojYTojYXojYjojYpcIiw0LFwi6I2T6I2VXCIsNCxcIuiNneiNouiNsFwiLDYsXCLojbnojbrojb5cIiw2LFwi6I6H6I6I6I6K6I6L6I6M6I6N6I6P6I6Q6I6R6I6U6I6V6I6W6I6X6I6Z6I6a6I6d6I6f6I6hXCIsNixcIuiOrOiOreiOrlwiXSxbXCJjNzgwXCIsXCLojq/ojrXojrvojr7ojr/oj4Loj4Poj4Toj4boj4joj4noj4voj43oj47oj5Doj5Hoj5Loj5Poj5Xoj5foj5noj5roj5voj57oj6Loj6Poj6Toj6boj6foj6joj6voj6zoj63mgbDmtL3nibXmiabpko7pk4XljYPov4Hnrb7ku5/osKbkub7pu5TpkrHpkrPliY3mvZzpgaPmtYXosLTloJHltYzmrKDmrYnmnqrlkZvohZTnvozlopnolLflvLrmiqLmqYfplLnmlbLmgoTmoaXnnqfkuZTkvqjlt6fpnpjmkqznv5jls63kv4/nqo3liIfojITkuJTmgK/nqoPpkqbkvrXkurLnp6bnkLTli6Toirnmk5Lnpr3lr53msoHpnZLovbvmsKLlgL7ljb/muIXmk47mmbTmsLDmg4Xpobfor7fluobnkLznqbfnp4vkuJjpgrHnkIPmsYLlm5rphYvms4XotovljLrom4bmm7Louq/lsYjpqbHmuKBcIl0sW1wiYzg0MFwiLFwi6I+u6I+v6I+zXCIsNCxcIuiPuuiPu+iPvOiPvuiPv+iQgOiQguiQheiQh+iQiOiQieiQiuiQkOiQklwiLDUsXCLokJnokJrokJvokJ5cIiw1LFwi6JCpXCIsNyxcIuiQslwiLDUsXCLokLnokLrokLvokL5cIiw3LFwi6JGH6JGI6JGJXCJdLFtcImM4ODBcIixcIuiRilwiLDYsXCLokZJcIiw0LFwi6JGY6JGd6JGe6JGf6JGg6JGi6JGkXCIsNCxcIuiRquiRruiRr+iRsOiRsuiRtOiRt+iRueiRu+iRvOWPluWotum+i+i2o+WOu+WciOmip+adg+mGm+azieWFqOeXiuaLs+eKrOWIuOWKnee8uueClOeYuOWNtOm5iuamt+ehrumbgOijmee+pOeEtueHg+WGieafk+eTpOWjpOaUmOWat+iuqemltuaJsOe7leaDueeDreWjrOS7geS6uuW/jemfp+S7u+iupOWIg+Wmiue6q+aJlOS7jeaXpeaIjuiMuOiTieiNo+iejeeGlOa6tuWuuee7kuWGl+aPieaflOiCieiMueigleWEkuWtuuWmgui+seS5s+axneWFpeikpei9r+mYruiViueRnumUkOmXsOa2puiLpeW8seaSkua0kuiQqOiFrumzg+Whnui1m+S4ieWPgVwiXSxbXCJjOTQwXCIsXCLokb1cIiw0LFwi6JKD6JKE6JKF6JKG6JKK6JKN6JKPXCIsNyxcIuiSmOiSmuiSm+iSneiSnuiSn+iSoOiSolwiLDEyLFwi6JKw6JKx6JKz6JK16JK26JK36JK76JK86JK+6JOA6JOC6JOD6JOF6JOG6JOH6JOI6JOL6JOM6JOO6JOP6JOS6JOU6JOV6JOXXCJdLFtcImM5ODBcIixcIuiTmFwiLDQsXCLok57ok6Hok6Lok6Tok6dcIiw0LFwi6JOt6JOu6JOv6JOxXCIsMTAsXCLok73ok77olIDolIHolILkvJ7mlaPmoZHll5PkuKfmkJTpqprmiavlq4LnkZ/oibLmtqnmo67lg6fojo7noILmnYDliLnmspnnurHlgrvllaXnhZ7nrZvmmZLnj4roi6vmnYnlsbHliKDnhb3ooavpl6rpmZXmk4XotaHohrPlloTmsZXmiYfnvK7lopLkvKTllYbotY/mmYzkuIrlsJroo7PmoqLmjY7nqI3ng6foio3li7rpn7blsJHlk6jpgrXnu43lpaLotYrom4foiIzoiI3otabmkYTlsITmhZHmtonnpL7orr7noLfnlLPlkbvkvLjouqvmt7HlqKDnu4XnpZ7msojlrqHlqbbnlJrogr7mhY7muJflo7DnlJ/nlKXnibLljYfnu7NcIl0sW1wiY2E0MFwiLFwi6JSDXCIsOCxcIuiUjeiUjuiUj+iUkOiUkuiUlOiUleiUluiUmOiUmeiUm+iUnOiUneiUnuiUoOiUolwiLDgsXCLolK1cIiw5LFwi6JS+XCIsNCxcIuiVhOiVheiVhuiVh+iVi1wiLDEwXSxbXCJjYTgwXCIsXCLolZfolZjolZrolZvolZzolZ3olZ9cIiw0LFwi6JWl6JWm6JWn6JWpXCIsOCxcIuiVs+iVteiVtuiVt+iVuOiVvOiVveiVv+iWgOiWgeecgeebm+WJqeiDnOWco+W4iOWkseeLruaWvea5v+ivl+WwuOiZseWNgeefs+aLvuaXtuS7gOmjn+iagOWunuivhuWPsuefouS9v+WxjumptuWni+W8j+ekuuWjq+S4luafv+S6i+aLreiqk+mAneWKv+aYr+WXnOWZrOmAguS7leS+jemHiumlsOawj+W4guaBg+WupOinhuivleaUtuaJi+mmluWuiOWvv+aOiOWUruWPl+eYpuWFveiUrOaeouais+auiuaKkui+k+WPlOiIkua3keeWj+S5pui1juWtsOeGn+iWr+aakeabmee9suicgOm7jem8oOWxnuacr+i/sOagkeadn+aIjeerluWiheW6tuaVsOa8sVwiXSxbXCJjYjQwXCIsXCLoloLoloPolobolohcIiw2LFwi6JaQXCIsMTAsXCLolp1cIiw2LFwi6Jal6Jam6Jan6Jap6Jar6Jas6Jat6JaxXCIsNSxcIuiWuOiWulwiLDYsXCLol4JcIiw2LFwi6JeKXCIsNCxcIuiXkeiXklwiXSxbXCJjYjgwXCIsXCLol5Tol5ZcIiw1LFwi6JedXCIsNixcIuiXpeiXpuiXp+iXqOiXqlwiLDE0LFwi5oGV5Yi36ICN5pGU6KGw55Sp5biF5qCT5ou06Zyc5Y+M54i96LCB5rC0552h56iO5ZCu556s6aG66Iic6K+056GV5pyU54OB5pav5pKV5Zi25oCd56eB5Y+45Lid5q276IKG5a+65Zej5Zub5Ly65Ly86aWy5bez5p2+6IC45oCC6aKC6YCB5a6L6K686K+15pCc6ImY5pOe5Ze96IuP6YWl5L+X57Sg6YCf57Kf5YOz5aGR5rqv5a6/6K+J6IKD6YW46JKc566X6Jm96ZqL6ZqP57ul6auT56KO5bKB56mX6YGC6Zqn56Wf5a2Z5o2f56yL6JOR5qKt5ZSG57yp55CQ57Si6ZSB5omA5aGM5LuW5a6D5aW55aGUXCJdLFtcImNjNDBcIixcIuiXueiXuuiXvOiXveiXvuiYgFwiLDQsXCLomIZcIiwxMCxcIuiYkuiYk+iYlOiYleiYl1wiLDE1LFwi6Jio6JiqXCIsMTMsXCLomLnomLromLvomL3omL7omL/omYBcIl0sW1wiY2M4MFwiLFwi6JmBXCIsMTEsXCLomZLomZPomZVcIiw0LFwi6Jmb6Jmc6Jmd6Jmf6Jmg6Jmh6JmjXCIsNyxcIueNreaMnui5i+i4j+iDjuiLlOaKrOWPsOazsOmFnuWkquaAgeaxsOWdjeaRiui0queYq+a7qeWdm+aqgOeXsOa9reiwreiwiOWdpuavr+iikueis+aOouWPueeCreaxpOWhmOaQquWgguajoOiGm+WUkOezluWAmOi6uua3jOi2n+eDq+aOj+a2m+a7lOe7puiQhOahg+mAg+a3mOmZtuiuqOWll+eJueiXpOiFvueWvOiqiuair+WJlOi4oumUkeaPkOmimOi5hOWVvOS9k+abv+Waj+aDlea2leWJg+WxieWkqea3u+Whq+eUsOeUnOaBrOiIlOiFhuaMkeadoei/ouecuui3s+i0tOmTgeW4luWOheWQrOeDg1wiXSxbXCJjZDQwXCIsXCLoma3oma/ombDombJcIiw2LFwi6JqDXCIsNixcIuiajlwiLDQsXCLompTompZcIiw1LFwi6JqeXCIsNCxcIuiapeiapuiaq+iareiaruiasuias+iat+iauOiaueiau1wiLDQsXCLom4Hom4Lom4Pom4Xom4jom4zom43om5Lom5Pom5Xom5bom5fom5rom5xcIl0sW1wiY2Q4MFwiLFwi6Jud6Jug6Juh6Jui6Juj6Jul6Jum6Jun6Juo6Juq6Jur6Jus6Juv6Ju16Ju26Ju36Ju66Ju76Ju86Ju96Ju/6JyB6JyE6JyF6JyG6JyL6JyM6JyO6JyP6JyQ6JyR6JyU6JyW5rGA5bu35YGc5Lqt5bqt5oy66ImH6YCa5qGQ6YWu556z5ZCM6ZOc5b2k56ul5qG25o2F562S57uf55eb5YG35oqV5aS06YCP5Ye456eD56qB5Zu+5b6S6YCU5raC5bGg5Zyf5ZCQ5YWU5rmN5Zui5o6o6aKT6IW/6JyV6KSq6YCA5ZCe5bGv6IeA5ouW5omY6ISx6bi16ZmA6amu6am85qSt5aal5ouT5ZS+5oyW5ZOH6JuZ5rS85aiD55Om6KKc5q2q5aSW6LGM5byv5rm+546p6aG95Li454O35a6M56KX5oy95pma55qW5oOL5a6b5amJ5LiH6IWV5rGq546L5Lqh5p6J572R5b6A5pe65pyb5b+Y5aaE5aiBXCJdLFtcImNlNDBcIixcIuicmeicm+icneicn+icoOicpOicpuicp+icqOicquicq+icrOicreicr+icsOicsuics+icteictuicuOicueicuuicvOicveidgFwiLDYsXCLonYronYvonY3onY/onZDonZHonZLonZTonZXonZbonZjonZpcIiw1LFwi6J2h6J2i6J2mXCIsNyxcIuidr+idseidsuids+idtVwiXSxbXCJjZTgwXCIsXCLonbfonbjonbnonbronb/onoDonoHonoTonobonofonononoronozono5cIiw0LFwi6J6U6J6V6J6W6J6YXCIsNixcIuieoFwiLDQsXCLlt43lvq7ljbHpn6bov53moYXlm7TllK/mg5/kuLrmvY3nu7Toi4fokI7lp5TkvJ/kvKrlsL7nuqzmnKrolJrlkbPnlY/og4PlloLprY/kvY3muK3osJPlsInmhbDljavnmJ/muKnomormlofpl7vnurnlkLvnqLPntIrpl67ll6Hnv4Hnk67mjJ3onJfmtqHnqp3miJHmlqHljafmj6HmsoPlt6vlkZzpkqjkuYzmsaHor6zlsYvml6DoipzmoqflkL7lkLTmr4vmrabkupTmjYLljYjoiJ7kvI3kvq7lnZ7miIrpm77mmaTnianli7/liqHmgp/or6/mmJTnhpnmnpDopb/noZLnn73mmbDlmLvlkLjplKHnibpcIl0sW1wiY2Y0MFwiLFwi6J6l6J6m6J6n6J6p6J6q6J6u6J6w6J6x6J6y6J606J626J636J646J656J676J686J6+6J6/6J+BXCIsNCxcIuifh+ifiOifieifjFwiLDQsXCLon5RcIiw2LFwi6J+c6J+d6J+e6J+f6J+h6J+i6J+j6J+k6J+m6J+n6J+o6J+p6J+r6J+s6J+t6J+vXCIsOV0sW1wiY2Y4MFwiLFwi6J+66J+76J+86J+96J+/6KCA6KCB6KCC6KCEXCIsNSxcIuigi1wiLDcsXCLooJTooJfooJjooJnooJrooJxcIiw0LFwi6KCj56iA5oGv5biM5oKJ6Iad5aSV5oOc54aE54Ov5rqq5rGQ54qA5qqE6KKt5bit5Lmg5aqz5Zac6ZOj5rSX57O76ZqZ5oiP57uG556O6Jm+5Yyj6Zye6L6W5pqH5bOh5L6g54ut5LiL5Y6m5aSP5ZCT5o6A6ZSo5YWI5LuZ6bKc57qk5ZK46LSk6KGU6Ii36Zey5raO5bym5auM5pi+6Zmp546w54yu5Y6/6IW66aaF576h5a6q6Zm36ZmQ57q/55u45Y6i6ZW26aaZ566x6KWE5rmY5Lmh57+U56Wl6K+m5oOz5ZON5Lqr6aG55be35qmh5YOP5ZCR6LGh6JCn56Gd6ZyE5YmK5ZOu5Zqj6ZSA5raI5a615reG5pmTXCJdLFtcImQwNDBcIixcIuigpFwiLDEzLFwi6KCzXCIsNSxcIuiguuigu+igveigvuigv+ihgeihguihg+ihhlwiLDUsXCLooY5cIiw1LFwi6KGV6KGW6KGY6KGaXCIsNixcIuihpuihp+ihquihreihr+ihseihs+ihtOihteihtuihuOihueihulwiXSxbXCJkMDgwXCIsXCLoobvoobzoooDoooPooobooofooonooorooozooo7ooo/oopDoopHoopPoopToopXoopdcIiw0LFwi6KKdXCIsNCxcIuiio+iipVwiLDUsXCLlsI/lrZ3moKHogpbllbjnrJHmlYjmpZTkupvmrYfonY7pnovljY/mjJ/mkLrpgqrmlpzog4HosJDlhpnmorDljbjon7nmh4jms4Tms7vosKLlsZHolqroiq/plIzmrKPovpvmlrDlv7vlv4Pkv6HooYXmmJ/ohaXnjKnmg7rlhbTliJHlnovlvaLpgqLooYzphpLlubjmnY/mgKflp5PlhYTlh7bog7jljIjmsbnpm4TnhorkvJHkv67nvp7mnL3ll4XplIjnp4Doopbnu6Plop/miIzpnIDomZrlmJjpobvlvpDorrjok4TphZflj5nml63luo/nlZzmgaTnta7lqb/nu6rnu63ovanllqflrqPmgqzml4vnjoRcIl0sW1wiZDE0MFwiLFwi6KKs6KKu6KKv6KKw6KKyXCIsNCxcIuiiuOiiueiiuuiiu+iiveiivuiiv+ijgOijg+ijhOijh+ijiOijiuiji+ijjOijjeijj+ijkOijkeijk+ijluijl+ijmlwiLDQsXCLoo6Doo6Hoo6boo6foo6lcIiw2LFwi6KOy6KO16KO26KO36KO66KO76KO96KO/6KSA6KSB6KSDXCIsNV0sW1wiZDE4MFwiLFwi6KSJ6KSLXCIsNCxcIuikkeiklFwiLDQsXCLopJxcIiw0LFwi6KSi6KSj6KSk6KSm6KSn6KSo6KSp6KSs6KSt6KSu6KSv6KSx6KSy6KSz6KS16KS36YCJ55mj55yp57ua6Z206Jab5a2m56m06Zuq6KGA5YuL54aP5b6q5pes6K+i5a+76amv5beh5q6J5rGb6K6t6K6v6YCK6L+F5Y6L5oq86bim6bit5ZGA5Lir6Iq954mZ6Jqc5bSW6KGZ5rav6ZuF5ZOR5Lqa6K6254SJ5ZK96ZiJ54Of5re555uQ5Lil56CU6JyS5bKp5bu26KiA6aKc6ZiO54KO5rK/5aWE5o6p55y86KGN5ryU6Imz5aCw54eV5Y6M56Ca6ZuB5ZSB5b2m54Sw5a606LCa6aqM5q6D5aSu6biv56en5p2o5oms5L2v55ah576K5rSL6Ziz5rCn5Luw55eS5YW75qC35ry+6YKA6IWw5aaW55G2XCJdLFtcImQyNDBcIixcIuikuFwiLDgsXCLopYLopYPopYVcIiwyNCxcIuiloFwiLDUsXCLopadcIiwxOSxcIuilvFwiXSxbXCJkMjgwXCIsXCLopb3opb7opoDopoLopoTopoXopodcIiwyNixcIuaRh+Wwp+mBpeeqkeiwo+WnmuWSrOiIgOiNr+imgeiAgOaksOWZjuiAtueIt+mHjuWGtuS5n+mhteaOluS4muWPtuabs+iFi+WknOa2suS4gOWjueWMu+aPlumTseS+neS8iuiho+mikOWkt+mBl+enu+S7quiDsOeWkeayguWunOWnqOW9neakheiageWAmuW3suS5meefo+S7peiJuuaKkeaYk+mCkeWxueS6v+W9ueiHhumAuOiChOeWq+S6puijlOaEj+avheW/huS5ieebiua6ouivo+iuruiwiuivkeW8gue/vOe/jOe7juiMteiNq+WboOaut+mfs+mYtOWnu+WQn+mTtua3q+WvhemlruWwueW8lemakFwiXSxbXCJkMzQwXCIsXCLopqJcIiwzMCxcIuing+injeink+inlOinleinl+inmOinmeinm+inneinn+inoOinoeinouinpOinp+inqOinqeinquinrOinreinruinsOinseinsuintFwiLDZdLFtcImQzODBcIixcIuinu1wiLDQsXCLoqIFcIiw1LFwi6KiIXCIsMjEsXCLljbDoi7HmqLHlqbTpubDlupTnvKjojrnokKTokKXojafonYfov47otaLnm4jlvbHpopbnoazmmKDlk5/mi6XkvaPoh4Pnl4jlurjpm43ouIrom7nlko/ms7PmtozmsLjmgb/li4fnlKjlub3kvJjmgqDlv6flsKTnlLHpgq7pk4DnirnmsrnmuLjphYnmnInlj4vlj7PkvZHph4nor7Hlj4jlubzov4Lmt6Tkuo7nm4LmpobomZ7mhJroiIbkvZnkv57pgL7psbzmhInmuJ3muJTpmoXkuojlqLHpm6jkuI7lsb/nprnlrofor63nvr3njonln5/oiovpg4HlkIHpgYfllrvls6rlvqHmhIjmrLLni7HogrLoqolcIl0sW1wiZDQ0MFwiLFwi6KieXCIsMzEsXCLoqL9cIiw4LFwi6KmJXCIsMjFdLFtcImQ0ODBcIixcIuipn1wiLDI1LFwi6Km6XCIsNixcIua1tOWvk+ijlemihOixq+mprem4s+a4iuWGpOWFg+Weo+iigeWOn+aPtOi+leWbreWRmOWchueMv+a6kOe8mOi/nOiLkeaEv+aAqOmZouabsOe6pui2iui3g+mSpeWys+eypOaciOaCpumYheiAmOS6kemDp+WMgOmZqOWFgei/kOiVtOmFneaZlemfteWtleWMneeguOadguagveWTieeBvuWusOi9veWGjeWcqOWSseaUkuaagui1nui1g+iEj+iRrOmBreezn+WHv+iXu+aeo+aXqea+oeiapOi6geWZqumAoOeagueBtueHpei0o+aLqeWImeazvei0vOaAjuWinuaGjuabvui1oOaJjuWWs+a4o+acrei9p1wiXSxbXCJkNTQwXCIsXCLoqoFcIiw3LFwi6KqLXCIsNyxcIuiqlFwiLDQ2XSxbXCJkNTgwXCIsXCLoq4NcIiwzMixcIumToemXuOecqOagheamqOWSi+S5jeeCuOiviOaRmOaWi+WuheeqhOWAuuWvqOeeu+avoeipueeymOayvuebj+aWqei+l+W0reWxleiYuOagiOWNoOaImOermea5m+e7veaon+eroOW9sOa8s+W8oOaOjOa2qOadluS4iOW4kOi0puS7l+iDgOeYtOmanOaLm+aYreaJvuayvOi1teeFp+e9qeWFhuiCh+WPrOmBruaKmOWTsuibsOi+meiAhemUl+iUl+i/mea1meePjeaWn+ecn+eUhOegp+iHu+i0numSiOS+puaeleeWueiviumch+aMr+mVh+mYteiSuOaMo+edgeW+geeLsOS6ieaAlOaVtOaLr+ato+aUv1wiXSxbXCJkNjQwXCIsXCLoq6RcIiwzNCxcIuisiFwiLDI3XSxbXCJkNjgwXCIsXCLorKTorKXorKdcIiwzMCxcIuW4p+eXh+mDkeivgeiKneaeneaUr+WQseicmOefpeiCouiEguaxgeS5i+e7h+iBjOebtOakjeauluaJp+WAvOS+hOWdgOaMh+atoui2vuWPquaXqOe6uOW/l+aMmuaOt+iHs+iHtOe9ruW4nOWzmeWItuaZuuenqeeomui0qOeCmeeXlOa7nuayu+eqkuS4reebheW/oOmSn+iht+e7iOenjeiCv+mHjeS7suS8l+iIn+WRqOW3nua0suivjOeypei9tOiCmOW4muWSkueaseWumeaYvOmqpOePoOagquibm+acseeMquivuOivm+mAkOerueeDm+eFruaLhOeeqeWYseS4u+iRl+afseWKqeibgOi0rumTuOetkVwiXSxbXCJkNzQwXCIsXCLorYZcIiwzMSxcIuitp1wiLDQsXCLora1cIiwyNV0sW1wiZDc4MFwiLFwi6K6HXCIsMjQsXCLorqzorrHorrvor4for5Dor6rosInosJ7kvY/ms6jnpZ3pqbvmipPniKrmi73kuJPnoJbovazmkrDotZrnr4bmoanluoToo4Xlpobmkp7lo67nirbmpI7plKXov73otZjlnaDnvIDosIblh4bmjYnmi5nljZPmoYznkKLojIHphYzllYTnnYDngbzmtYrlhbnlkqjotYTlp7/mu4vmt4TlrZzntKvku5Tnsb3mu5PlrZDoh6rmuI3lrZfprIPmo5XouKrlrpfnu7zmgLvnurXpgrnotbDlpY/mj43np5/otrPljZLml4/npZbor4XpmLvnu4TpkrvnuoLlmLTphonmnIDnvarlsIrpgbXmmKjlt6bkvZDmn57lgZrkvZzlnZDluqdcIl0sW1wiZDg0MFwiLFwi6LC4XCIsOCxcIuixguixg+ixhOixheixiOixiuixi+ixjVwiLDcsXCLosZbosZfosZjosZnosZtcIiw1LFwi6LGjXCIsNixcIuixrFwiLDYsXCLosbTosbXosbbosbfosbtcIiw2LFwi6LKD6LKE6LKG6LKHXCJdLFtcImQ4ODBcIixcIuiyiOiyi+iyjVwiLDYsXCLospXospbospfosplcIiwyMCxcIuS6jeS4jOWFgOS4kOW7v+WNheS4leS6mOS4numssuWtrOWZqeS4qOemuuS4v+WMleS5h+WkreeIu+WNruawkOWbn+iDpOmml+avk+edvum8l+S4tuS6n+m8kOS5nOS5qeS6k+iKiOWtm+WVrOWYj+S7hOWOjeWOneWOo+WOpeWOrumdpei1neWMmuWPteWMpuWMruWMvui1nOWNpuWNo+WIguWIiOWIjuWIreWIs+WIv+WJgOWJjOWJnuWJoeWJnOiSr+WJveWKguWKgeWKkOWKk+WGgue9lOS6u+S7g+S7ieS7guS7qOS7oeS7q+S7nuS8m+S7s+S8ouS9pOS7teS8peS8p+S8ieS8q+S9nuS9p+aUuOS9muS9nVwiXSxbXCJkOTQwXCIsXCLosq5cIiw2Ml0sW1wiZDk4MFwiLFwi6LOtXCIsMzIsXCLkvZ/kvZfkvLLkvL3kvbbkvbTkvpHkvonkvoPkvo/kvb7kvbvkvqrkvbzkvqzkvpTkv6bkv6jkv6rkv4Xkv5rkv6Pkv5zkv5Hkv5/kv7jlgKnlgYzkv7PlgKzlgI/lgK7lgK3kv77lgJzlgIzlgKXlgKjlgb7lgYPlgZXlgYjlgY7lgazlgbvlgqXlgqflgqnlgrrlg5blhIblg63lg6zlg6blg67lhIflhIvku53msL3kvZjkvaXkv47pvqDmsYbnsbTlha7lt73pu4npppjlhoHlpJTli7nljI3oqIfljJDlh6vlpJnlhZXkuqDlhZbkurPooa7ooqTkurXohJToo5LnpoDlrLTooIPnvrjlhqvlhrHlhr3lhrxcIl0sW1wiZGE0MFwiLFwi6LSOXCIsMTQsXCLotKDotZHotZLotZfotZ/otaXotajotanotarotazota7ota/otbHotbLotbhcIiw4LFwi6LaC6LaD6LaG6LaH6LaI6LaJ6LaMXCIsNCxcIui2kui2k+i2lVwiLDksXCLotqDotqFcIl0sW1wiZGE4MFwiLFwi6Lai6LakXCIsMTIsXCLotrLotrbotrfotrnotrvotr3ot4Dot4Hot4Lot4Xot4fot4jot4not4rot43ot5Dot5Lot5Pot5Tlh4flhpblhqLlhqXorqDorqborqforqrorrTorrXorrfor4Lor4Por4vor4/or47or5Lor5Por5Tor5bor5jor5nor5zor5/or6Dor6Tor6jor6nor67or7Dor7Por7bor7nor7zor7/osIDosILosITosIfosIzosI/osJHosJLosJTosJXosJbosJnosJvosJjosJ3osJ/osKDosKHosKXosKfosKrosKvosK7osK/osLLosLPosLXosLbljanljbrpmJ3pmKLpmKHpmLHpmKrpmL3pmLzpmYLpmYnpmZTpmZ/pmafpmazpmbLpmbTpmojpmo3pmpfpmrDpgpfpgpvpgp3pgpnpgqzpgqHpgrTpgrPpgrbpgrpcIl0sW1wiZGI0MFwiLFwi6LeV6LeY6LeZ6Lec6Leg6Leh6Lei6Lel6Lem6Len6Lep6Let6Leu6Lew6Lex6Ley6Le06Le26Le86Le+XCIsNixcIui4hui4h+i4iOi4i+i4jei4jui4kOi4kei4kui4k+i4lVwiLDcsXCLouKDouKHouKRcIiw0LFwi6Lir6Lit6Liw6Liy6Liz6Li06Li26Li36Li46Li76Li86Li+XCJdLFtcImRiODBcIixcIui4v+i5g+i5hei5hui5jFwiLDQsXCLouZNcIiw1LFwi6LmaXCIsMTEsXCLouafouajouarouavoua7oubHpgrjpgrDpg4/pg4Xpgr7pg5Dpg4Tpg4fpg5Ppg6bpg6Lpg5zpg5fpg5vpg6vpg6/pg77phITphKLphJ7phKPphLHphK/phLnphYPphYbliI3lpYLliqLliqzliq3lir7lk7/li5Dli5bli7Dlj5/nh67nn43lu7Tlh7Xlh7zprK/ljrblvIHnlZrlt6/lnYzlnqnlnqHlob7lorzlo4Xlo5HlnKnlnKzlnKrlnLPlnLnlnK7lnK/lnZzlnLvlnYLlnanlnoXlnavlnoblnbzlnbvlnajlna3lnbblnbPlnq3lnqTlnozlnrLln4/lnqflnrTlnpPlnqDln5Xln5jln5rln5nln5Llnrjln7Tln6/ln7jln6Tln51cIl0sW1wiZGM0MFwiLFwi6Lmz6Lm16Lm3XCIsNCxcIui5vei5vui6gOi6gui6g+i6hOi6hui6iFwiLDYsXCLoupHoupLoupPoupVcIiw2LFwi6Lqd6LqfXCIsMTEsXCLouq3ouq7ourDourHourNcIiw2LFwi6Lq7XCIsN10sW1wiZGM4MFwiLFwi6LuDXCIsMTAsXCLou49cIiwyMSxcIuWgi+WgjeWfveWfreWggOWgnuWgmeWhhOWgoOWhpeWhrOWigeWiieWimuWigOmmqOm8meaHv+iJueiJveiJv+iKj+iKiuiKqOiKhOiKjuiKkeiKl+iKmeiKq+iKuOiKvuiKsOiLiOiLiuiLo+iKmOiKt+iKruiLi+iLjOiLgeiKqeiKtOiKoeiKquiKn+iLhOiLjuiKpOiLoeiMieiLt+iLpOiMj+iMh+iLnOiLtOiLkuiLmOiMjOiLu+iLk+iMkeiMmuiMhuiMlOiMleiLoOiLleiMnOiNkeiNm+iNnOiMiOiOkuiMvOiMtOiMseiOm+iNnuiMr+iNj+iNh+iNg+iNn+iNgOiMl+iNoOiMreiMuuiMs+iNpuiNpVwiXSxbXCJkZDQwXCIsXCLou6VcIiw2Ml0sW1wiZGQ4MFwiLFwi6LykXCIsMzIsXCLojajojJvojanojazojaroja3oja7ojrDojbjojrPojrTojqDojqrojpPojpzojoXojbzojrbojqnojb3ojrjojbvojpjojp7ojqjojrrojrzoj4HokIHoj6Xoj5jloIfokJjokIvoj53oj73oj5bokJzokLjokJHokIboj5Toj5/okI/okIPoj7joj7noj6roj4Xoj4DokKboj7Doj6HokZzokZHokZrokZnokbPokofokojokbrokonokbjokLzokYbokanokbbokozoko7okLHoka3ok4Hok43ok5Dok6bokr3ok5Pok4rokr/okrrok6DokqHokrnokrTokpfok6Xok6PolIznlI3olLjok7DolLnolJ/olLpcIl0sW1wiZGU0MFwiLFwi6L2FXCIsMzIsXCLovarovoDovozovpLovp3ovqDovqHovqLovqTovqXovqbovqfovqrovqzovq3ovq7ovq/ovrLovrPovrTovrXovrfovrjovrrovrvovrzovr/ov4Dov4Pov4ZcIl0sW1wiZGU4MFwiLFwi6L+JXCIsNCxcIui/j+i/kui/lui/l+i/mui/oOi/oei/o+i/p+i/rOi/r+i/sei/sui/tOi/tei/tui/uui/u+i/vOi/vui/v+mAh+mAiOmAjOmAjumAk+mAlemAmOiVluiUu+iTv+iTvOiVmeiViOiVqOiVpOiVnuiVuueeouiVg+iVsuiVu+iWpOiWqOiWh+iWj+iVueiWruiWnOiWheiWueiWt+iWsOiXk+iXgeiXnOiXv+iYp+iYheiYqeiYluiYvOW7vuW8iOWkvOWlgeiAt+WlleWlmuWlmOWMj+WwouWwpeWwrOWwtOaJjOaJquaKn+aKu+aLiuaLmuaLl+aLruaMouaLtuaMueaNi+aNg+aOreaPtuaNseaNuuaOjuaOtOaNreaOrOaOiuaNqeaOruaOvOaPsuaPuOaPoOaPv+aPhOaPnuaPjuaRkuaPhuaOvuaRheaRgeaQi+aQm+aQoOaQjOaQpuaQoeaRnuaShOaRreaSllwiXSxbXCJkZjQwXCIsXCLpgJnpgJzpgKPpgKTpgKXpgKdcIiw1LFwi6YCwXCIsNCxcIumAt+mAuemAuumAvemAv+mBgOmBg+mBhemBhumBiFwiLDQsXCLpgY7pgZTpgZXpgZbpgZnpgZrpgZxcIiw1LFwi6YGk6YGm6YGn6YGp6YGq6YGr6YGs6YGvXCIsNCxcIumBtlwiLDYsXCLpgb7pgoFcIl0sW1wiZGY4MFwiLFwi6YKE6YKF6YKG6YKH6YKJ6YKK6YKMXCIsNCxcIumCkumClOmClumCmOmCmumCnOmCnumCn+mCoOmCpOmCpemCp+mCqOmCqemCq+mCremCsumCt+mCvOmCvemCv+mDgOaRuuaSt+aSuOaSmeaSuuaTgOaTkOaTl+aTpOaTouaUieaUpeaUruW8i+W/kueUmeW8keWNn+WPseWPveWPqeWPqOWPu+WQkuWQluWQhuWRi+WRkuWRk+WRlOWRluWRg+WQoeWRl+WRmeWQo+WQsuWSguWSlOWRt+WRseWRpOWSmuWSm+WShOWRtuWRpuWSneWTkOWSreWTguWStOWTkuWSp+WSpuWTk+WTlOWRsuWSo+WTleWSu+WSv+WTjOWTmeWTmuWTnOWSqeWSquWSpOWTneWTj+WTnuWUm+WTp+WUoOWTveWUlOWTs+WUouWUo+WUj+WUkeWUp+WUquWVp+WWj+WWteWVieWVreWVgeWVleWUv+WVkOWUvFwiXSxbXCJlMDQwXCIsXCLpg4Lpg4Ppg4bpg4jpg4npg4vpg4zpg43pg5Lpg5Tpg5Xpg5bpg5jpg5npg5rpg57pg5/pg6Dpg6Ppg6Tpg6Xpg6npg6rpg6zpg67pg7Dpg7Hpg7Lpg7Ppg7Xpg7bpg7fpg7npg7rpg7vpg7zpg7/phIDphIHphIPphIVcIiwxOSxcIumEmumEm+mEnFwiXSxbXCJlMDgwXCIsXCLphJ3phJ/phKDphKHphKRcIiwxMCxcIumEsOmEslwiLDYsXCLphLpcIiw4LFwi6YWE5ZS35ZWW5ZW15ZW25ZW35ZSz5ZSw5ZWc5ZaL5ZeS5ZaD5Zax5Za55ZaI5ZaB5Zaf5ZW+5ZeW5ZaR5ZW75Zef5Za95Za+5ZaU5ZaZ5Zeq5Ze35ZeJ5Zif5ZeR5Zer5Zes5ZeU5Zem5Zed5ZeE5Zev5Zel5Zey5Zez5ZeM5ZeN5Zeo5Ze15Zek6L6U5Zie5ZiI5ZiM5ZiB5Zik5Zij5Ze+5ZiA5Zin5Zit5ZmY5Zi55ZmX5Zis5ZmN5Zmi5ZmZ5Zmc5ZmM5ZmU5ZqG5Zmk5Zmx5Zmr5Zm75Zm85ZqF5ZqT5Zqv5ZuU5ZuX5Zud5Zuh5Zu15Zur5Zu55Zu/5ZyE5ZyK5ZyJ5Zyc5biP5biZ5biU5biR5bix5bi75bi8XCJdLFtcImUxNDBcIixcIumFhemFh+mFiOmFkemFk+mFlOmFlemFlumFmOmFmemFm+mFnOmFn+mFoOmFpumFp+mFqOmFq+mFremFs+mFuumFu+mFvOmGgFwiLDQsXCLphobphojphorpho7pho/phpNcIiw2LFwi6YacXCIsNSxcIumGpFwiLDUsXCLphqvphqzphrDphrHphrLphrPphrbphrfphrjphrnphrtcIl0sW1wiZTE4MFwiLFwi6Ya8XCIsMTAsXCLph4jph4vph5Dph5JcIiw5LFwi6YedXCIsOCxcIuW4t+W5hOW5lOW5m+W5nuW5oeWyjOWxuuWyjeWykOWyluWyiOWymOWymeWykeWymuWynOWyteWyouWyveWyrOWyq+WyseWyo+WzgeWyt+WzhOWzkuWzpOWzi+WzpeW0guW0g+W0p+W0puW0ruW0pOW0nuW0huW0m+W1mOW0vuW0tOW0veW1rOW1m+W1r+W1neW1q+W1i+W1iuW1qeW1tOW2guW2meW2neixs+W2t+W3heW9s+W9t+W+guW+h+W+ieW+jOW+leW+meW+nOW+qOW+reW+teW+vOihouW9oeeKreeKsOeKtOeKt+eKuOeLg+eLgeeLjueLjeeLkueLqOeLr+eLqeeLsueLtOeLt+eMgeeLs+eMg+eLulwiXSxbXCJlMjQwXCIsXCLph6ZcIiw2Ml0sW1wiZTI4MFwiLFwi6YilXCIsMzIsXCLni7vnjJfnjJPnjKHnjIrnjJ7njJ3njJXnjKLnjLnnjKXnjKznjLjnjLHnjZDnjY3njZfnjaDnjaznja/njb7oiJvlpKXpo6flpKTlpILppaPppadcIiw1LFwi6aW06aW36aW96aaA6aaE6aaH6aaK6aaN6aaQ6aaR6aaT6aaU6aaV5bqA5bqR5bqL5bqW5bql5bqg5bq55bq15bq+5bqz6LWT5buS5buR5bub5buo5buq6Ia65b+E5b+J5b+W5b+P5oCD5b+u5oCE5b+h5b+k5b++5oCF5oCG5b+q5b+t5b+45oCZ5oC15oCm5oCb5oCP5oCN5oCp5oCr5oCK5oC/5oCh5oG45oG55oG75oG65oGCXCJdLFtcImUzNDBcIixcIumJhlwiLDQ1LFwi6Ym1XCIsMTZdLFtcImUzODBcIixcIumKhlwiLDcsXCLpio9cIiwyNCxcIuaBquaBveaCluaCmuaCreaCneaCg+aCkuaCjOaCm+aDrOaCu+aCseaDneaDmOaDhuaDmuaCtOaEoOaEpuaEleaEo+aDtOaEgOaEjuaEq+aFiuaFteaGrOaGlOaGp+aGt+aHlOaHteW/nemas+mXqemXq+mXsemXs+mXtemXtumXvOmXvumYg+mYhOmYhumYiOmYiumYi+mYjOmYjemYj+mYkumYlemYlumYl+mYmemYmuS4rOeIv+aIleawteaxlOaxnOaxiuayo+ayheaykOaylOayjOaxqOaxqeaxtOaxtuayhuayqeazkOazlOayreazt+azuOazseazl+aysuazoOazluazuuazq+azruayseazk+azr+azvlwiXSxbXCJlNDQwXCIsXCLpiqhcIiw1LFwi6YqvXCIsMjQsXCLpi4lcIiwzMV0sW1wiZTQ4MFwiLFwi6YupXCIsMzIsXCLmtLnmtKfmtIzmtYPmtYjmtIfmtITmtJnmtI7mtKvmtY3mtK7mtLXmtJrmtY/mtZLmtZTmtLPmtpHmta/mtp7mtqDmtZ7mtpPmtpTmtZzmtaDmtbzmtaPmuJrmt4fmt4Xmt57muI7mtr/mt6DmuJHmt6bmt53mt5nmuJbmtqvmuIzmtq7muKvmua7muY7muavmurLmuZ/muobmuZPmuZTmuLLmuKXmuYTmu5/murHmupjmu6DmvK3mu6LmuqXmuqfmur3murvmurfmu5fmurTmu4/muo/mu4Lmup/mvaLmvYbmvYfmvKTmvJXmu7nmvK/mvLbmvYvmvbTmvKrmvInmvKnmvonmvo3mvozmvbjmvbLmvbzmvbrmv5FcIl0sW1wiZTU0MFwiLFwi6YyKXCIsNTEsXCLpjL9cIiwxMF0sW1wiZTU4MFwiLFwi6Y2KXCIsMzEsXCLpjavmv4nmvqfmvrnmvrbmv4Lmv6Hmv67mv57mv6Dmv6/ngJrngKPngJvngLnngLXngY/ngZ7lroDlroTlrpXlrpPlrqXlrrjnlK/pqp7mkLTlr6Tlr67opLDlr7DouYforIfovrbov5Pov5Xov6Xov67ov6Tov6nov6bov7Pov6jpgIXpgITpgIvpgKbpgJHpgI3pgJbpgKHpgLXpgLbpgK3pgK/pgYTpgZHpgZLpgZDpgajpgZjpgaLpgZvmmrnpgbTpgb3pgoLpgojpgoPpgovlvZDlvZflvZblvZjlsLvlkqvlsZDlsZnlrbHlsaPlsabnvrzlvKrlvKnlvK3oibTlvLzprLvlsa7lpoHlpoPlpo3lpqnlpqrlpqNcIl0sW1wiZTY0MFwiLFwi6Y2sXCIsMzQsXCLpjpBcIiwyN10sW1wiZTY4MFwiLFwi6Y6sXCIsMjksXCLpj4vpj4zpj43lppflp4rlpqvlpp7lpqTlp5LlprLlpq/lp5flpr7lqIXlqIblp53lqIjlp6Plp5jlp7nlqIzlqInlqLLlqLTlqJHlqKPlqJPlqYDlqaflqYrlqZXlqLzlqaLlqbXog6zlqqrlqpvlqbflqbrlqr7lq6vlqrLlq5Llq5Tlqrjlq6Dlq6Plq7Hlq5blq6blq5jlq5zlrInlrJflrJblrLLlrLflrYDlsJXlsJzlrZrlraXlrbPlrZHlrZPlraLpqbXpqbfpqbjpqbrpqb/pqb3pqoDpqoHpqoXpqojpqorpqpDpqpLpqpPpqpbpqpjpqpvpqpzpqp3pqp/pqqDpqqLpqqPpqqXpqqfnup/nuqHnuqPnuqXnuqjnuqlcIl0sW1wiZTc0MFwiLFwi6Y+OXCIsNyxcIumPl1wiLDU0XSxbXCJlNzgwXCIsXCLpkI5cIiwzMixcIue6ree6sOe6vue7gOe7gee7gue7iee7i+e7jOe7kOe7lOe7l+e7m+e7oOe7oee7qOe7q+e7rue7r+e7see7sue8jee7tue7uue7u+e7vue8gee8gue8g+e8h+e8iOe8i+e8jOe8j+e8kee8kue8l+e8mee8nOe8m+e8n+e8oVwiLDYsXCLnvKrnvKvnvKznvK3nvK9cIiw0LFwi57y15bm655W/5beb55S+6YKV546O546R546u546i546f54+P54+C54+R5463546z54+A54+J54+I54+l54+Z6aG855CK54+p54+n54+e546654+y55CP55Cq55Gb55Cm55Cl55Co55Cw55Cu55CsXCJdLFtcImU4NDBcIixcIumQr1wiLDE0LFwi6ZC/XCIsNDMsXCLpkazpka3pka7pka9cIl0sW1wiZTg4MFwiLFwi6ZGwXCIsMjAsXCLpkpHpkpbpkpjpk4fpk4/pk5Ppk5Tpk5rpk6bpk7vplJzplKDnkJvnkJrnkYHnkZznkZfnkZXnkZnnkbfnka3nkb7nkpznko7nkoDnkoHnkofnkovnkp7nkqjnkqnnkpDnkqfnk5Lnkrrpn6rpn6vpn6zmnYzmnZPmnZ7mnYjmnanmnqXmnofmnarmnbPmnpjmnqfmnbXmnqjmnp7mnq3mnovmnbfmnbzmn7DmoInmn5jmoIrmn6nmnrDmoIzmn5nmnrXmn5rmnrPmn53moIDmn4Pmnrjmn6LmoI7mn4Hmn73moLLmoLPmoaDmoaHmoY7moaLmoYTmoaTmooPmoJ3moZXmoabmoYHmoafmoYDmoL7moYrmoYnmoKnmorXmoo/mobTmobfmopPmoavmo4Lmpa7mo7zmpJ/mpKDmo7lcIl0sW1wiZTk0MFwiLFwi6ZSn6ZSz6ZS96ZWD6ZWI6ZWL6ZWV6ZWa6ZWg6ZWu6ZW06ZW16ZW3XCIsNyxcIumWgFwiLDQyXSxbXCJlOTgwXCIsXCLplqtcIiwzMixcIuakpOajsOaki+akgeall+ajo+akkOalseakuealoOalgualneamhOalq+amgOammOaluOaktOanjOamh+amiOanjuamiealpualo+alueamm+amp+amu+amq+amreanlOamseangeaniuann+amleanoOamjeanv+aor+anreaol+aomOappeansuaphOaovuaqoOapkOapm+aoteaqjuapueaoveaoqOapmOapvOaqkeaqkOaqqeaql+aqq+eMt+eNkuaugeauguauh+auhOaukuauk+aujeaumuaum+auoeauqui9q+i9rei9sei9sui9s+i9tei9tui9uOi9t+i9uei9uui9vOi9vui+gei+gui+hOi+h+i+i1wiXSxbXCJlYTQwXCIsXCLpl4xcIiwyNyxcIumXrOmXv+mYh+mYk+mYmOmYm+mYnumYoOmYo1wiLDYsXCLpmKvpmKzpmK3pmK/pmLDpmLfpmLjpmLnpmLrpmL7pmYHpmYPpmYrpmY7pmY/pmZHpmZLpmZPpmZbpmZdcIl0sW1wiZWE4MFwiLFwi6ZmY6ZmZ6Zma6Zmc6Zmd6Zme6Zmg6Zmj6Zml6Zmm6Zmr6ZmtXCIsNCxcIumZs+mZuFwiLDEyLFwi6ZqH6ZqJ6ZqK6L6N6L6O6L6P6L6Y6L6a6LuO5oiL5oiX5oib5oif5oii5oih5oil5oik5ois6Ien55Ov55O055O/55SP55SR55ST5pS05peu5pev5pew5piK5piZ5p2y5piD5piV5piA54KF5pu35pid5pi05pix5pi25pi16ICG5pmf5pmU5pmB5pmP5pmW5pmh5pmX5pm35pqE5pqM5pqn5pqd5pq+5pub5puc5pum5pup6LSy6LSz6LS26LS76LS96LWA6LWF6LWG6LWI6LWJ6LWH6LWN6LWV6LWZ6KeH6KeK6KeL6KeM6KeO6KeP6KeQ6KeR54mu54qf54md54mm54mv54m+54m/54qE54qL54qN54qP54qS5oyI5oyy5o6wXCJdLFtcImViNDBcIixcIumajOmajumakemakumak+malemalumamumam+manVwiLDksXCLpmqhcIiw3LFwi6Zqx6Zqy6Zq06Zq16Zq36Zq46Zq66Zq76Zq/6ZuC6ZuD6ZuI6ZuK6ZuL6ZuQ6ZuR6ZuT6ZuU6ZuWXCIsOSxcIumboVwiLDYsXCLpm6tcIl0sW1wiZWI4MFwiLFwi6Zus6Zut6Zuu6Zuw6Zux6Zuy6Zu06Zu16Zu46Zu66Zu76Zu86Zu96Zu/6ZyC6ZyD6ZyF6ZyK6ZyL6ZyM6ZyQ6ZyR6ZyS6ZyU6ZyV6ZyXXCIsNCxcIumcnemcn+mcoOaQv+aTmOiAhOavquavs+avveavteavueawheawh+awhuawjeawleawmOawmeawmuawoeawqeawpOawquawsuaUteaVleaVq+eJjeeJkueJlueIsOiZouWIluiCn+iCnOiCk+iCvOaciuiCveiCseiCq+iCreiCtOiCt+iDp+iDqOiDqeiDquiDm+iDguiDhOiDmeiDjeiDl+ackOiDneiDq+iDseiDtOiDreiEjeiEjuiDsuiDvOacleiEkuixmuiEtuiEnuiErOiEmOiEsuiFiOiFjOiFk+iFtOiFmeiFmuiFseiFoOiFqeiFvOiFveiFreiFp+WhjeWqteiGiOiGguiGkea7leiGo+iGquiHjOacpuiHiuiGu1wiXSxbXCJlYzQwXCIsXCLpnKFcIiw4LFwi6Zyr6Zys6Zyu6Zyv6Zyx6ZyzXCIsNCxcIumcuumcu+mcvOmcvemcv1wiLDE4LFwi6Z2U6Z2V6Z2X6Z2Y6Z2a6Z2c6Z2d6Z2f6Z2j6Z2k6Z2m6Z2n6Z2o6Z2qXCIsN10sW1wiZWM4MFwiLFwi6Z2y6Z216Z23XCIsNCxcIumdvVwiLDcsXCLpnoZcIiw0LFwi6Z6M6Z6O6Z6P6Z6Q6Z6T6Z6V6Z6W6Z6X6Z6ZXCIsNCxcIuiHgeiGpuaspOast+asueatg+athuatmemjkemjkumjk+mjlemjmemjmuaus+W9gOavguins+aWkOm9keaWk+aWvOaXhuaXhOaXg+aXjOaXjuaXkuaXlueCgOeCnOeClueCneeCu+eDgOeCt+eCq+eCseeDqOeDiueEkOeEk+eElueEr+eEseeFs+eFnOeFqOeFheeFsueFiueFuOeFuueGmOeGs+eGteeGqOeGoOeHoOeHlOeHp+eHueeIneeIqOeBrOeEmOeFpueGueaIvuaIveaJg+aJiOaJieeku+elgOelhuelieelm+elnOelk+elmuelouell+eloOelr+elp+eluuemheemiuemmuemp+ems+W/keW/kFwiXSxbXCJlZDQwXCIsXCLpnp7pnp/pnqHpnqLpnqRcIiw2LFwi6Z6s6Z6u6Z6w6Z6x6Z6z6Z61XCIsNDZdLFtcImVkODBcIixcIumfpOmfpemfqOmfrlwiLDQsXCLpn7Tpn7dcIiwyMyxcIuaAvOaBneaBmuaBp+aBgeaBmeaBo+aCq+aEhuaEjeaFneaGqeaGneaHi+aHkeaIhuiCgOiBv+ayk+aztua3vOeftuefuOeggOegieegl+egmOegkeaWq+egreegnOegneegueeguuegu+egn+egvOegpeegrOego+egqeehjuehreehluehl+egpuehkOehh+ehjOehqueim+eik+eimueih+einOeioeeio+eisueiueeipeejlOejmeejieejrOejsuekheejtOekk+ekpOeknuektOm+m+m7uem7u+m7vOebseechOecjeebueech+eciOecmuecouecmeecreecpuecteecuOedkOedkeedh+edg+edmuedqFwiXSxbXCJlZTQwXCIsXCLpoI9cIiw2Ml0sW1wiZWU4MFwiLFwi6aGOXCIsMzIsXCLnnaLnnaXnnb/nno3nnb3nnoDnnoznnpHnnp/nnqDnnrDnnrXnnr3nlLrnlYDnlY7nlYvnlYjnlZvnlbLnlbnnloPnvZjnvaHnvZ/oqYjnvajnvbTnvbHnvbnnvoHnvb7nm43nm6XooLLpkoXpkobpkofpkovpkorpkozpko3pko/pkpDpkpTpkpfpkpXpkprpkpvpkpzpkqPpkqTpkqvpkqrpkq3pkqzpkq/pkrDpkrLpkrTpkrZcIiw0LFwi6ZK86ZK96ZK/6ZOE6ZOIXCIsNixcIumTkOmTkemTkumTlemTlumTl+mTmemTmOmTm+mTnumTn+mToOmToumTpOmTpemTp+mTqOmTqlwiXSxbXCJlZjQwXCIsXCLpoa9cIiw1LFwi6aKL6aKO6aKS6aKV6aKZ6aKj6aKoXCIsMzcsXCLpo4/po5Dpo5Tpo5bpo5fpo5vpo5zpo53po6BcIiw0XSxbXCJlZjgwXCIsXCLpo6Xpo6bpo6lcIiwzMCxcIumTqemTq+mTrumTr+mTs+mTtOmTtemTt+mTuemTvOmTvemTv+mUg+mUgumUhumUh+mUiemUiumUjemUjumUj+mUklwiLDQsXCLplJjplJvplJ3plJ7plJ/plKLplKrplKvplKnplKzplLHplLLplLTplLbplLfplLjplLzplL7plL/plYLplLXplYTplYXplYbplYnplYzplY7plY/plZLplZPplZTplZbplZfplZjplZnplZvplZ7plZ/plZ3plaHplaLplaRcIiw4LFwi6ZWv6ZWx6ZWy6ZWz6ZS655+n55+s6ZuJ56eV56et56ej56er56iG5bWH56iD56iC56ie56iUXCJdLFtcImYwNDBcIixcIumkiFwiLDQsXCLppI7ppI/ppJFcIiwyOCxcIumkr1wiLDI2XSxbXCJmMDgwXCIsXCLppYpcIiw5LFwi6aWWXCIsMTIsXCLppaTppabppbPppbjppbnppbvppb7ppoLppoPpponnqLnnqLfnqZHpu4/ppqXnqbDnmojnmo7nmpPnmpnnmqTnk57nk6DnlKzpuKDpuKLpuKhcIiw0LFwi6biy6bix6bi26bi46bi36bi56bi66bi+6bmB6bmC6bmE6bmG6bmH6bmI6bmJ6bmL6bmM6bmO6bmR6bmV6bmX6bma6bmb6bmc6bme6bmj6bmmXCIsNixcIum5sem5rem5s+eWkueWlOeWlueWoOeWneeWrOeWo+eWs+eWtOeWuOeXhOeWseeWsOeXg+eXgueXlueXjeeXo+eXqOeXpueXpOeXq+eXp+eYg+eXseeXvOeXv+eYkOeYgOeYheeYjOeYl+eYiueYpeeYmOeYleeYmVwiXSxbXCJmMTQwXCIsXCLppozppo7ppppcIiwxMCxcIummpummp+mmqVwiLDQ3XSxbXCJmMTgwXCIsXCLpp5lcIiwzMixcIueYm+eYvOeYoueYoOeZgOeYreeYsOeYv+eYteeZg+eYvueYs+eZjeeZnueZlOeZnOeZlueZq+eZr+e/iuerpuepuOepueeqgOeqhueqiOeqleeqpueqoOeqrOeqqOeqreeqs+ihpOihqeihsuihveihv+iiguiiouijhuiit+iivOijieijouijjuijo+ijpeijseikmuijvOijqOijvuijsOikoeikmeikk+ikm+ikiuiktOikq+iktuilgeilpuilu+eWi+iDpeeasueatOefnOiAkuiAlOiAluiAnOiAoOiAouiApeiApuiAp+iAqeiAqOiAseiAi+iAteiBg+iBhuiBjeiBkuiBqeiBseimg+mhuOmigOmig1wiXSxbXCJmMjQwXCIsXCLpp7pcIiw2Ml0sW1wiZjI4MFwiLFwi6ai5XCIsMzIsXCLpoonpoozpoo3poo/popTpoprpopvpop7pop/poqHpoqLpoqXpoqbomY3omZTomazoma7omb/ombrombzombvomqjomo3omovomqzomp3omqfomqPomqrompPomqnomrbom4TomrXom47omrDomrromrHomq/om4nom4/omrTom6nom7Hom7Lom63om7Pom5DonJPom57om7Tom5/om5jom5HonIPonIfom7jonIjonIronI3onInonKPonLvonJ7onKXonK7onJronL7onYjonLTonLHonKnonLfonL/onoLonKLonb3onb7onbvonaDonbDonYzona7onovonZPonaPonbzonaTonZnonaXonpPonq/onqjon5JcIl0sW1wiZjM0MFwiLFwi6amaXCIsMTcsXCLpqbLpqoPpqonpqo3pqo7pqpTpqpXpqpnpqqbpqqlcIiw2LFwi6aqy6aqz6aq06aq16aq56aq76aq96aq+6aq/6auD6auE6auGXCIsNCxcIumrjemrjumrj+mrkOmrkumrlOmrlemrlumrl+mrmemrmumrm+mrnFwiXSxbXCJmMzgwXCIsXCLpq53pq57pq6Dpq6Lpq6Ppq6Tpq6Xpq6fpq6jpq6npq6rpq6zpq67pq7BcIiw4LFwi6au66au8XCIsNixcIumshOmshemshuifhuieiOieheiereiel+ieg+ieq+ifpeierOieteies+ifi+ifk+ieveifkeifgOifiuifm+ifquifoOifruigluigk+ifvuigiuigm+igoeigueigvOe8tue9gue9hOe9heiIkOeruuerveesiOesg+eshOesleesiuesq+esj+eth+esuOesquesmeesruesseesoOespeespOess+esvuesnuetmOetmuetheetteetjOetneetoOetruetu+etouetsuetseeukOeupueup+euuOeurOeuneeuqOeuheeuqueunOeuoueuq+eutOevkeevgeevjOevneevmuevpeevpuevquewjOevvuevvOewj+ewluewi1wiXSxbXCJmNDQwXCIsXCLprIfprIlcIiw1LFwi6ayQ6ayR6ayS6ayUXCIsMTAsXCLprKDprKHprKLprKRcIiwxMCxcIumssOmssemss1wiLDcsXCLprL3prL7prL/prYDprYbprYrprYvprYzprY7prZDprZLprZPprZVcIiw1XSxbXCJmNDgwXCIsXCLprZtcIiwzMixcIuewn+ewquewpuewuOexgeexgOiHvuiIgeiIguiIhOiHrOihhOiIoeiIouiIo+iIreiIr+iIqOiIq+iIuOiIu+iIs+iItOiIvuiJhOiJieiJi+iJj+iJmuiJn+iJqOihvuiiheiiiOijmOijn+ilnue+nee+n+e+p+e+r+e+sOe+suexvOaVieeykeeyneeynOeynueyoueysueyvOeyveezgeezh+ezjOezjeeziOezheezl+ezqOiJruaaqOe+v+e/jue/lee/pee/oee/pue/qee/rue/s+ezuOe1t+e2pue2rue5h+e6m+m6uOm6tOi1s+i2hOi2lOi2kei2sei1p+i1reixh+ixiemFiumFkOmFjumFj+mFpFwiXSxbXCJmNTQwXCIsXCLprbxcIiw2Ml0sW1wiZjU4MFwiLFwi6a67XCIsMzIsXCLphaLphaHphbDphanpha/phb3phb7phbLphbTphbnphozphoXphpDpho3phpHphqLphqPphqrphq3phq7phq/phrXphrTphrrosZXpub7otrjot6vouIXouZnouanotrXotr/otrzotrrot4Tot5bot5fot5rot57ot47ot4/ot5vot4bot6zot7fot7jot6Pot7not7vot6TouInot73ouJTouJ3ouJ/ouKzouK7ouKPouK/ouLrouYDouLnouLXouL3ouLHouYnouYHouYLouZHouZLouYroubDoubboubzoua/oubTouoXouo/oupToupDoupzoup7osbjosoLosorosoXospjospTmlpvop5bop57op5rop5xcIl0sW1wiZjY0MFwiLFwi6a+cXCIsNjJdLFtcImY2ODBcIixcIumwm1wiLDMyLFwi6Kel6Ker6Kev6Ki+6Kym6Z2T6Zup6Zuz6Zuv6ZyG6ZyB6ZyI6ZyP6ZyO6Zyq6Zyt6Zyw6Zy+6b6A6b6D6b6FXCIsNSxcIum+jOm7vum8i+m8jemauemavOmavembjumbkueev+mboOmKjumKrumLiOmMvumNqumPiumOj+mQvumRq+mxv+mygumyhemyhumyh+myiOeoo+myi+myjumykOmykemykumylOmylemymumym+mynlwiLDUsXCLpsqVcIiw0LFwi6bKr6bKt6bKu6bKwXCIsNyxcIumyuumyu+myvOmyvemzhOmzhemzhumzh+mziumzi1wiXSxbXCJmNzQwXCIsXCLpsLxcIiw2Ml0sW1wiZjc4MFwiLFwi6bG76bG96bG+6bKA6bKD6bKE6bKJ6bKK6bKM6bKP6bKT6bKW6bKX6bKY6bKZ6bKd6bKq6bKs6bKv6bK56bK+XCIsNCxcIumziOmziemzkemzkumzmumzm+mzoOmzoemzjFwiLDQsXCLps5Pps5Tps5Xps5fps5jps5nps5zps53ps5/ps6LpnbzpnoXpnpHpnpLpnpTpnq/pnqvpnqPpnrLpnrTpqrHpqrDpqrfpuZjpqrbpqrrpqrzpq4Hpq4Dpq4Xpq4Lpq4vpq4zpq5HprYXprYPprYfprYnprYjprY3prZHpo6jppI3ppK7ppZXppZTpq5/pq6Hpq6bpq6/pq6vpq7vpq63pq7nprIjprI/prJPprJ/prKPpur3pur7nuLvpuoLpuofpuojpuovpupLpj5bpup3pup/pu5vpu5zpu53pu6Dpu5/pu6Lpu6npu6fpu6Xpu6rpu6/pvKLpvKzpvK/pvLnpvLfpvL3pvL7pvYRcIl0sW1wiZjg0MFwiLFwi6bOjXCIsNjJdLFtcImY4ODBcIixcIum0olwiLDMyXSxbXCJmOTQwXCIsXCLptYNcIiw2Ml0sW1wiZjk4MFwiLFwi6baCXCIsMzJdLFtcImZhNDBcIixcIum2o1wiLDYyXSxbXCJmYTgwXCIsXCLpt6JcIiwzMl0sW1wiZmI0MFwiLFwi6biDXCIsMjcsXCLpuKTpuKfpuK7puLDpuLTpuLvpuLzpuYDpuY3puZDpuZLpuZPpuZTpuZbpuZnpuZ3puZ/puaDpuaHpuaLpuaXpua7pua/pubLpubRcIiw5LFwi6bqAXCJdLFtcImZiODBcIixcIum6gem6g+m6hOm6hem6hum6iem6ium6jFwiLDUsXCLpupRcIiw4LFwi6bqe6bqgXCIsNSxcIum6p+m6qOm6qem6qlwiXSxbXCJmYzQwXCIsXCLpuqtcIiw4LFwi6bq16bq26bq36bq56bq66bq86bq/XCIsNCxcIum7hem7hum7h+m7iOm7ium7i+m7jOm7kOm7kum7k+m7lem7lum7l+m7mem7mum7num7oem7o+m7pOm7pum7qOm7q+m7rOm7rem7rum7sFwiLDgsXCLpu7rpu73pu79cIiw2XSxbXCJmYzgwXCIsXCLpvIZcIiw0LFwi6byM6byP6byR6byS6byU6byV6byW6byY6byaXCIsNSxcIum8oem8o1wiLDgsXCLpvK3pvK7pvLDpvLFcIl0sW1wiZmQ0MFwiLFwi6byyXCIsNCxcIum8uOm8uum8vOm8v1wiLDQsXCLpvYVcIiwxMCxcIum9klwiLDM4XSxbXCJmZDgwXCIsXCLpvblcIiw1LFwi6b6B6b6C6b6NXCIsMTEsXCLpvpzpvp3pvp7pvqFcIiw0LFwi76Ss76W576aV76en76exXCJdLFtcImZlNDBcIixcIu+ojO+oje+oju+oj++oke+ok++olO+omO+on++ooO+ooe+oo++opO+op++oqO+oqVwiXV1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdGFibGVzL2NwOTM2Lmpzb25cbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG52YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeVxufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9xcy9saWIvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogbWV0aG9kc1xuICogQ29weXJpZ2h0KGMpIDIwMTMtMjAxNCBUSiBIb2xvd2F5Y2h1a1xuICogQ29weXJpZ2h0KGMpIDIwMTUtMjAxNiBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0Q3VycmVudE5vZGVNZXRob2RzKCkgfHwgZ2V0QmFzaWNOb2RlTWV0aG9kcygpO1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBOb2RlLmpzIG1ldGhvZHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldEN1cnJlbnROb2RlTWV0aG9kcygpIHtcbiAgcmV0dXJuIGh0dHAuTUVUSE9EUyAmJiBodHRwLk1FVEhPRFMubWFwKGZ1bmN0aW9uIGxvd2VyQ2FzZU1ldGhvZChtZXRob2QpIHtcbiAgICByZXR1cm4gbWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgXCJiYXNpY1wiIE5vZGUuanMgbWV0aG9kcywgYSBzbmFwc2hvdCBmcm9tIE5vZGUuanMgMC4xMC5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0QmFzaWNOb2RlTWV0aG9kcygpIHtcbiAgcmV0dXJuIFtcbiAgICAnZ2V0JyxcbiAgICAncG9zdCcsXG4gICAgJ3B1dCcsXG4gICAgJ2hlYWQnLFxuICAgICdkZWxldGUnLFxuICAgICdvcHRpb25zJyxcbiAgICAndHJhY2UnLFxuICAgICdjb3B5JyxcbiAgICAnbG9jaycsXG4gICAgJ21rY29sJyxcbiAgICAnbW92ZScsXG4gICAgJ3B1cmdlJyxcbiAgICAncHJvcGZpbmQnLFxuICAgICdwcm9wcGF0Y2gnLFxuICAgICd1bmxvY2snLFxuICAgICdyZXBvcnQnLFxuICAgICdta2FjdGl2aXR5JyxcbiAgICAnY2hlY2tvdXQnLFxuICAgICdtZXJnZScsXG4gICAgJ20tc2VhcmNoJyxcbiAgICAnbm90aWZ5JyxcbiAgICAnc3Vic2NyaWJlJyxcbiAgICAndW5zdWJzY3JpYmUnLFxuICAgICdwYXRjaCcsXG4gICAgJ3NlYXJjaCcsXG4gICAgJ2Nvbm5lY3QnXG4gIF07XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvbWV0aG9kcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBzZW5kXG4gKiBDb3B5cmlnaHQoYykgMjAxMiBUSiBIb2xvd2F5Y2h1a1xuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNiBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnaHR0cC1lcnJvcnMnKVxudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc2VuZCcpXG52YXIgZGVwcmVjYXRlID0gcmVxdWlyZSgnZGVwZCcpKCdzZW5kJylcbnZhciBkZXN0cm95ID0gcmVxdWlyZSgnZGVzdHJveScpXG52YXIgZW5jb2RlVXJsID0gcmVxdWlyZSgnZW5jb2RldXJsJylcbnZhciBlc2NhcGVIdG1sID0gcmVxdWlyZSgnZXNjYXBlLWh0bWwnKVxudmFyIGV0YWcgPSByZXF1aXJlKCdldGFnJylcbnZhciBmcmVzaCA9IHJlcXVpcmUoJ2ZyZXNoJylcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZScpXG52YXIgbXMgPSByZXF1aXJlKCdtcycpXG52YXIgb25GaW5pc2hlZCA9IHJlcXVpcmUoJ29uLWZpbmlzaGVkJylcbnZhciBwYXJzZVJhbmdlID0gcmVxdWlyZSgncmFuZ2UtcGFyc2VyJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG52YXIgc3RhdHVzZXMgPSByZXF1aXJlKCdzdGF0dXNlcycpXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbi8qKlxuICogUGF0aCBmdW5jdGlvbiByZWZlcmVuY2VzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZXh0bmFtZSA9IHBhdGguZXh0bmFtZVxudmFyIGpvaW4gPSBwYXRoLmpvaW5cbnZhciBub3JtYWxpemUgPSBwYXRoLm5vcm1hbGl6ZVxudmFyIHJlc29sdmUgPSBwYXRoLnJlc29sdmVcbnZhciBzZXAgPSBwYXRoLnNlcFxuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgaWRlbnRpZnlpbmcgYSBieXRlcyBSYW5nZSBoZWFkZXIuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBCWVRFU19SQU5HRV9SRUdFWFAgPSAvXiAqYnl0ZXM9L1xuXG4vKipcbiAqIE1heGltdW0gdmFsdWUgYWxsb3dlZCBmb3IgdGhlIG1heCBhZ2UuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBNQVhfTUFYQUdFID0gNjAgKiA2MCAqIDI0ICogMzY1ICogMTAwMCAvLyAxIHllYXJcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYSBwYXRoIHdpdGggYSBkaXJlY3RvcnkgdXAgY29tcG9uZW50LlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgVVBfUEFUSF9SRUdFWFAgPSAvKD86XnxbXFxcXC9dKVxcLlxcLig/OltcXFxcL118JCkvXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBzZW5kXG5tb2R1bGUuZXhwb3J0cy5taW1lID0gbWltZVxuXG4vKipcbiAqIFJldHVybiBhIGBTZW5kU3RyZWFtYCBmb3IgYHJlcWAgYW5kIGBwYXRoYC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVxXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxuICogQHJldHVybiB7U2VuZFN0cmVhbX1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBzZW5kIChyZXEsIHBhdGgsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBTZW5kU3RyZWFtKHJlcSwgcGF0aCwgb3B0aW9ucylcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgYFNlbmRTdHJlYW1gIHdpdGggdGhlIGdpdmVuIGBwYXRoYC5cbiAqXG4gKiBAcGFyYW0ge1JlcXVlc3R9IHJlcVxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gU2VuZFN0cmVhbSAocmVxLCBwYXRoLCBvcHRpb25zKSB7XG4gIFN0cmVhbS5jYWxsKHRoaXMpXG5cbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdGhpcy5vcHRpb25zID0gb3B0c1xuICB0aGlzLnBhdGggPSBwYXRoXG4gIHRoaXMucmVxID0gcmVxXG5cbiAgdGhpcy5fYWNjZXB0UmFuZ2VzID0gb3B0cy5hY2NlcHRSYW5nZXMgIT09IHVuZGVmaW5lZFxuICAgID8gQm9vbGVhbihvcHRzLmFjY2VwdFJhbmdlcylcbiAgICA6IHRydWVcblxuICB0aGlzLl9jYWNoZUNvbnRyb2wgPSBvcHRzLmNhY2hlQ29udHJvbCAhPT0gdW5kZWZpbmVkXG4gICAgPyBCb29sZWFuKG9wdHMuY2FjaGVDb250cm9sKVxuICAgIDogdHJ1ZVxuXG4gIHRoaXMuX2V0YWcgPSBvcHRzLmV0YWcgIT09IHVuZGVmaW5lZFxuICAgID8gQm9vbGVhbihvcHRzLmV0YWcpXG4gICAgOiB0cnVlXG5cbiAgdGhpcy5fZG90ZmlsZXMgPSBvcHRzLmRvdGZpbGVzICE9PSB1bmRlZmluZWRcbiAgICA/IG9wdHMuZG90ZmlsZXNcbiAgICA6ICdpZ25vcmUnXG5cbiAgaWYgKHRoaXMuX2RvdGZpbGVzICE9PSAnaWdub3JlJyAmJiB0aGlzLl9kb3RmaWxlcyAhPT0gJ2FsbG93JyAmJiB0aGlzLl9kb3RmaWxlcyAhPT0gJ2RlbnknKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZG90ZmlsZXMgb3B0aW9uIG11c3QgYmUgXCJhbGxvd1wiLCBcImRlbnlcIiwgb3IgXCJpZ25vcmVcIicpXG4gIH1cblxuICB0aGlzLl9oaWRkZW4gPSBCb29sZWFuKG9wdHMuaGlkZGVuKVxuXG4gIGlmIChvcHRzLmhpZGRlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZGVwcmVjYXRlKCdoaWRkZW46IHVzZSBkb3RmaWxlczogXFwnJyArICh0aGlzLl9oaWRkZW4gPyAnYWxsb3cnIDogJ2lnbm9yZScpICsgJ1xcJyBpbnN0ZWFkJylcbiAgfVxuXG4gIC8vIGxlZ2FjeSBzdXBwb3J0XG4gIGlmIChvcHRzLmRvdGZpbGVzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kb3RmaWxlcyA9IHVuZGVmaW5lZFxuICB9XG5cbiAgdGhpcy5fZXh0ZW5zaW9ucyA9IG9wdHMuZXh0ZW5zaW9ucyAhPT0gdW5kZWZpbmVkXG4gICAgPyBub3JtYWxpemVMaXN0KG9wdHMuZXh0ZW5zaW9ucywgJ2V4dGVuc2lvbnMgb3B0aW9uJylcbiAgICA6IFtdXG5cbiAgdGhpcy5faW1tdXRhYmxlID0gb3B0cy5pbW11dGFibGUgIT09IHVuZGVmaW5lZFxuICAgID8gQm9vbGVhbihvcHRzLmltbXV0YWJsZSlcbiAgICA6IGZhbHNlXG5cbiAgdGhpcy5faW5kZXggPSBvcHRzLmluZGV4ICE9PSB1bmRlZmluZWRcbiAgICA/IG5vcm1hbGl6ZUxpc3Qob3B0cy5pbmRleCwgJ2luZGV4IG9wdGlvbicpXG4gICAgOiBbJ2luZGV4Lmh0bWwnXVxuXG4gIHRoaXMuX2xhc3RNb2RpZmllZCA9IG9wdHMubGFzdE1vZGlmaWVkICE9PSB1bmRlZmluZWRcbiAgICA/IEJvb2xlYW4ob3B0cy5sYXN0TW9kaWZpZWQpXG4gICAgOiB0cnVlXG5cbiAgdGhpcy5fbWF4YWdlID0gb3B0cy5tYXhBZ2UgfHwgb3B0cy5tYXhhZ2VcbiAgdGhpcy5fbWF4YWdlID0gdHlwZW9mIHRoaXMuX21heGFnZSA9PT0gJ3N0cmluZydcbiAgICA/IG1zKHRoaXMuX21heGFnZSlcbiAgICA6IE51bWJlcih0aGlzLl9tYXhhZ2UpXG4gIHRoaXMuX21heGFnZSA9ICFpc05hTih0aGlzLl9tYXhhZ2UpXG4gICAgPyBNYXRoLm1pbihNYXRoLm1heCgwLCB0aGlzLl9tYXhhZ2UpLCBNQVhfTUFYQUdFKVxuICAgIDogMFxuXG4gIHRoaXMuX3Jvb3QgPSBvcHRzLnJvb3RcbiAgICA/IHJlc29sdmUob3B0cy5yb290KVxuICAgIDogbnVsbFxuXG4gIGlmICghdGhpcy5fcm9vdCAmJiBvcHRzLmZyb20pIHtcbiAgICB0aGlzLmZyb20ob3B0cy5mcm9tKVxuICB9XG59XG5cbi8qKlxuICogSW5oZXJpdHMgZnJvbSBgU3RyZWFtYC5cbiAqL1xuXG51dGlsLmluaGVyaXRzKFNlbmRTdHJlYW0sIFN0cmVhbSlcblxuLyoqXG4gKiBFbmFibGUgb3IgZGlzYWJsZSBldGFnIGdlbmVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSB2YWxcbiAqIEByZXR1cm4ge1NlbmRTdHJlYW19XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLmV0YWcgPSBkZXByZWNhdGUuZnVuY3Rpb24oZnVuY3Rpb24gZXRhZyAodmFsKSB7XG4gIHRoaXMuX2V0YWcgPSBCb29sZWFuKHZhbClcbiAgZGVidWcoJ2V0YWcgJXMnLCB0aGlzLl9ldGFnKVxuICByZXR1cm4gdGhpc1xufSwgJ3NlbmQuZXRhZzogcGFzcyBldGFnIGFzIG9wdGlvbicpXG5cbi8qKlxuICogRW5hYmxlIG9yIGRpc2FibGUgXCJoaWRkZW5cIiAoZG90KSBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHBhdGhcbiAqIEByZXR1cm4ge1NlbmRTdHJlYW19XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLmhpZGRlbiA9IGRlcHJlY2F0ZS5mdW5jdGlvbihmdW5jdGlvbiBoaWRkZW4gKHZhbCkge1xuICB0aGlzLl9oaWRkZW4gPSBCb29sZWFuKHZhbClcbiAgdGhpcy5fZG90ZmlsZXMgPSB1bmRlZmluZWRcbiAgZGVidWcoJ2hpZGRlbiAlcycsIHRoaXMuX2hpZGRlbilcbiAgcmV0dXJuIHRoaXNcbn0sICdzZW5kLmhpZGRlbjogdXNlIGRvdGZpbGVzIG9wdGlvbicpXG5cbi8qKlxuICogU2V0IGluZGV4IGBwYXRoc2AsIHNldCB0byBhIGZhbHN5XG4gKiB2YWx1ZSB0byBkaXNhYmxlIGluZGV4IHN1cHBvcnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8Qm9vbGVhbnxBcnJheX0gcGF0aHNcbiAqIEByZXR1cm4ge1NlbmRTdHJlYW19XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLmluZGV4ID0gZGVwcmVjYXRlLmZ1bmN0aW9uKGZ1bmN0aW9uIGluZGV4IChwYXRocykge1xuICB2YXIgaW5kZXggPSAhcGF0aHMgPyBbXSA6IG5vcm1hbGl6ZUxpc3QocGF0aHMsICdwYXRocyBhcmd1bWVudCcpXG4gIGRlYnVnKCdpbmRleCAlbycsIHBhdGhzKVxuICB0aGlzLl9pbmRleCA9IGluZGV4XG4gIHJldHVybiB0aGlzXG59LCAnc2VuZC5pbmRleDogcGFzcyBpbmRleCBhcyBvcHRpb24nKVxuXG4vKipcbiAqIFNldCByb290IGBwYXRoYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHJldHVybiB7U2VuZFN0cmVhbX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU2VuZFN0cmVhbS5wcm90b3R5cGUucm9vdCA9IGZ1bmN0aW9uIHJvb3QgKHBhdGgpIHtcbiAgdGhpcy5fcm9vdCA9IHJlc29sdmUoU3RyaW5nKHBhdGgpKVxuICBkZWJ1Zygncm9vdCAlcycsIHRoaXMuX3Jvb3QpXG4gIHJldHVybiB0aGlzXG59XG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLmZyb20gPSBkZXByZWNhdGUuZnVuY3Rpb24oU2VuZFN0cmVhbS5wcm90b3R5cGUucm9vdCxcbiAgJ3NlbmQuZnJvbTogcGFzcyByb290IGFzIG9wdGlvbicpXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLnJvb3QgPSBkZXByZWNhdGUuZnVuY3Rpb24oU2VuZFN0cmVhbS5wcm90b3R5cGUucm9vdCxcbiAgJ3NlbmQucm9vdDogcGFzcyByb290IGFzIG9wdGlvbicpXG5cbi8qKlxuICogU2V0IG1heC1hZ2UgdG8gYG1heEFnZWAuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1heEFnZVxuICogQHJldHVybiB7U2VuZFN0cmVhbX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU2VuZFN0cmVhbS5wcm90b3R5cGUubWF4YWdlID0gZGVwcmVjYXRlLmZ1bmN0aW9uKGZ1bmN0aW9uIG1heGFnZSAobWF4QWdlKSB7XG4gIHRoaXMuX21heGFnZSA9IHR5cGVvZiBtYXhBZ2UgPT09ICdzdHJpbmcnXG4gICAgPyBtcyhtYXhBZ2UpXG4gICAgOiBOdW1iZXIobWF4QWdlKVxuICB0aGlzLl9tYXhhZ2UgPSAhaXNOYU4odGhpcy5fbWF4YWdlKVxuICAgID8gTWF0aC5taW4oTWF0aC5tYXgoMCwgdGhpcy5fbWF4YWdlKSwgTUFYX01BWEFHRSlcbiAgICA6IDBcbiAgZGVidWcoJ21heC1hZ2UgJWQnLCB0aGlzLl9tYXhhZ2UpXG4gIHJldHVybiB0aGlzXG59LCAnc2VuZC5tYXhhZ2U6IHBhc3MgbWF4QWdlIGFzIG9wdGlvbicpXG5cbi8qKlxuICogRW1pdCBlcnJvciB3aXRoIGBzdGF0dXNgLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXNcbiAqIEBwYXJhbSB7RXJyb3J9IFtlcnJdXG4gKiBAcHJpdmF0ZVxuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gZXJyb3IgKHN0YXR1cywgZXJyKSB7XG4gIC8vIGVtaXQgaWYgbGlzdGVuZXJzIGluc3RlYWQgb2YgcmVzcG9uZGluZ1xuICBpZiAoaGFzTGlzdGVuZXJzKHRoaXMsICdlcnJvcicpKSB7XG4gICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBjcmVhdGVFcnJvcihzdGF0dXMsIGVyciwge1xuICAgICAgZXhwb3NlOiBmYWxzZVxuICAgIH0pKVxuICB9XG5cbiAgdmFyIHJlcyA9IHRoaXMucmVzXG4gIHZhciBtc2cgPSBzdGF0dXNlc1tzdGF0dXNdIHx8IFN0cmluZyhzdGF0dXMpXG4gIHZhciBkb2MgPSBjcmVhdGVIdG1sRG9jdW1lbnQoJ0Vycm9yJywgZXNjYXBlSHRtbChtc2cpKVxuXG4gIC8vIGNsZWFyIGV4aXN0aW5nIGhlYWRlcnNcbiAgY2xlYXJIZWFkZXJzKHJlcylcblxuICAvLyBhZGQgZXJyb3IgaGVhZGVyc1xuICBpZiAoZXJyICYmIGVyci5oZWFkZXJzKSB7XG4gICAgc2V0SGVhZGVycyhyZXMsIGVyci5oZWFkZXJzKVxuICB9XG5cbiAgLy8gc2VuZCBiYXNpYyByZXNwb25zZVxuICByZXMuc3RhdHVzQ29kZSA9IHN0YXR1c1xuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sOyBjaGFyc2V0PVVURi04JylcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1MZW5ndGgnLCBCdWZmZXIuYnl0ZUxlbmd0aChkb2MpKVxuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsIFwiZGVmYXVsdC1zcmMgJ3NlbGYnXCIpXG4gIHJlcy5zZXRIZWFkZXIoJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLCAnbm9zbmlmZicpXG4gIHJlcy5lbmQoZG9jKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBwYXRobmFtZSBlbmRzIHdpdGggXCIvXCIuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBwcml2YXRlXG4gKi9cblxuU2VuZFN0cmVhbS5wcm90b3R5cGUuaGFzVHJhaWxpbmdTbGFzaCA9IGZ1bmN0aW9uIGhhc1RyYWlsaW5nU2xhc2ggKCkge1xuICByZXR1cm4gdGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGggLSAxXSA9PT0gJy8nXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhpcyBpcyBhIGNvbmRpdGlvbmFsIEdFVCByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5TZW5kU3RyZWFtLnByb3RvdHlwZS5pc0NvbmRpdGlvbmFsR0VUID0gZnVuY3Rpb24gaXNDb25kaXRpb25hbEdFVCAoKSB7XG4gIHJldHVybiB0aGlzLnJlcS5oZWFkZXJzWydpZi1tYXRjaCddIHx8XG4gICAgdGhpcy5yZXEuaGVhZGVyc1snaWYtdW5tb2RpZmllZC1zaW5jZSddIHx8XG4gICAgdGhpcy5yZXEuaGVhZGVyc1snaWYtbm9uZS1tYXRjaCddIHx8XG4gICAgdGhpcy5yZXEuaGVhZGVyc1snaWYtbW9kaWZpZWQtc2luY2UnXVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZXF1ZXN0IHByZWNvbmRpdGlvbnMgZmFpbGVkLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAcHJpdmF0ZVxuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLmlzUHJlY29uZGl0aW9uRmFpbHVyZSA9IGZ1bmN0aW9uIGlzUHJlY29uZGl0aW9uRmFpbHVyZSAoKSB7XG4gIHZhciByZXEgPSB0aGlzLnJlcVxuICB2YXIgcmVzID0gdGhpcy5yZXNcblxuICAvLyBpZi1tYXRjaFxuICB2YXIgbWF0Y2ggPSByZXEuaGVhZGVyc1snaWYtbWF0Y2gnXVxuICBpZiAobWF0Y2gpIHtcbiAgICB2YXIgZXRhZyA9IHJlcy5nZXRIZWFkZXIoJ0VUYWcnKVxuICAgIHJldHVybiAhZXRhZyB8fCAobWF0Y2ggIT09ICcqJyAmJiBwYXJzZVRva2VuTGlzdChtYXRjaCkuZXZlcnkoZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggIT09IGV0YWcgJiYgbWF0Y2ggIT09ICdXLycgKyBldGFnICYmICdXLycgKyBtYXRjaCAhPT0gZXRhZ1xuICAgIH0pKVxuICB9XG5cbiAgLy8gaWYtdW5tb2RpZmllZC1zaW5jZVxuICB2YXIgdW5tb2RpZmllZFNpbmNlID0gcGFyc2VIdHRwRGF0ZShyZXEuaGVhZGVyc1snaWYtdW5tb2RpZmllZC1zaW5jZSddKVxuICBpZiAoIWlzTmFOKHVubW9kaWZpZWRTaW5jZSkpIHtcbiAgICB2YXIgbGFzdE1vZGlmaWVkID0gcGFyc2VIdHRwRGF0ZShyZXMuZ2V0SGVhZGVyKCdMYXN0LU1vZGlmaWVkJykpXG4gICAgcmV0dXJuIGlzTmFOKGxhc3RNb2RpZmllZCkgfHwgbGFzdE1vZGlmaWVkID4gdW5tb2RpZmllZFNpbmNlXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBTdHJpcCBjb250ZW50LSogaGVhZGVyIGZpZWxkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUNvbnRlbnRIZWFkZXJGaWVsZHMgPSBmdW5jdGlvbiByZW1vdmVDb250ZW50SGVhZGVyRmllbGRzICgpIHtcbiAgdmFyIHJlcyA9IHRoaXMucmVzXG4gIHZhciBoZWFkZXJzID0gZ2V0SGVhZGVyTmFtZXMocmVzKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBoZWFkZXIgPSBoZWFkZXJzW2ldXG4gICAgaWYgKGhlYWRlci5zdWJzdHIoMCwgOCkgPT09ICdjb250ZW50LScgJiYgaGVhZGVyICE9PSAnY29udGVudC1sb2NhdGlvbicpIHtcbiAgICAgIHJlcy5yZW1vdmVIZWFkZXIoaGVhZGVyKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc3BvbmQgd2l0aCAzMDQgbm90IG1vZGlmaWVkLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLm5vdE1vZGlmaWVkID0gZnVuY3Rpb24gbm90TW9kaWZpZWQgKCkge1xuICB2YXIgcmVzID0gdGhpcy5yZXNcbiAgZGVidWcoJ25vdCBtb2RpZmllZCcpXG4gIHRoaXMucmVtb3ZlQ29udGVudEhlYWRlckZpZWxkcygpXG4gIHJlcy5zdGF0dXNDb2RlID0gMzA0XG4gIHJlcy5lbmQoKVxufVxuXG4vKipcbiAqIFJhaXNlIGVycm9yIHRoYXQgaGVhZGVycyBhbHJlYWR5IHNlbnQuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU2VuZFN0cmVhbS5wcm90b3R5cGUuaGVhZGVyc0FscmVhZHlTZW50ID0gZnVuY3Rpb24gaGVhZGVyc0FscmVhZHlTZW50ICgpIHtcbiAgdmFyIGVyciA9IG5ldyBFcnJvcignQ2FuXFwndCBzZXQgaGVhZGVycyBhZnRlciB0aGV5IGFyZSBzZW50LicpXG4gIGRlYnVnKCdoZWFkZXJzIGFscmVhZHkgc2VudCcpXG4gIHRoaXMuZXJyb3IoNTAwLCBlcnIpXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlcXVlc3QgaXMgY2FjaGVhYmxlLCBha2FcbiAqIHJlc3BvbmRlZCB3aXRoIDJ4eCBvciAzMDQgKHNlZSBSRkMgMjYxNiBzZWN0aW9uIDE0LjJ7NSw2fSkuXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLmlzQ2FjaGFibGUgPSBmdW5jdGlvbiBpc0NhY2hhYmxlICgpIHtcbiAgdmFyIHN0YXR1c0NvZGUgPSB0aGlzLnJlcy5zdGF0dXNDb2RlXG4gIHJldHVybiAoc3RhdHVzQ29kZSA+PSAyMDAgJiYgc3RhdHVzQ29kZSA8IDMwMCkgfHxcbiAgICBzdGF0dXNDb2RlID09PSAzMDRcbn1cblxuLyoqXG4gKiBIYW5kbGUgc3RhdCgpIGVycm9yLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yXG4gKiBAcHJpdmF0ZVxuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLm9uU3RhdEVycm9yID0gZnVuY3Rpb24gb25TdGF0RXJyb3IgKGVycm9yKSB7XG4gIHN3aXRjaCAoZXJyb3IuY29kZSkge1xuICAgIGNhc2UgJ0VOQU1FVE9PTE9ORyc6XG4gICAgY2FzZSAnRU5PRU5UJzpcbiAgICBjYXNlICdFTk9URElSJzpcbiAgICAgIHRoaXMuZXJyb3IoNDA0LCBlcnJvcilcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMuZXJyb3IoNTAwLCBlcnJvcilcbiAgICAgIGJyZWFrXG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY2FjaGUgaXMgZnJlc2guXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLmlzRnJlc2ggPSBmdW5jdGlvbiBpc0ZyZXNoICgpIHtcbiAgcmV0dXJuIGZyZXNoKHRoaXMucmVxLmhlYWRlcnMsIHtcbiAgICAnZXRhZyc6IHRoaXMucmVzLmdldEhlYWRlcignRVRhZycpLFxuICAgICdsYXN0LW1vZGlmaWVkJzogdGhpcy5yZXMuZ2V0SGVhZGVyKCdMYXN0LU1vZGlmaWVkJylcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmFuZ2UgaXMgZnJlc2guXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLmlzUmFuZ2VGcmVzaCA9IGZ1bmN0aW9uIGlzUmFuZ2VGcmVzaCAoKSB7XG4gIHZhciBpZlJhbmdlID0gdGhpcy5yZXEuaGVhZGVyc1snaWYtcmFuZ2UnXVxuXG4gIGlmICghaWZSYW5nZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBpZi1yYW5nZSBhcyBldGFnXG4gIGlmIChpZlJhbmdlLmluZGV4T2YoJ1wiJykgIT09IC0xKSB7XG4gICAgdmFyIGV0YWcgPSB0aGlzLnJlcy5nZXRIZWFkZXIoJ0VUYWcnKVxuICAgIHJldHVybiBCb29sZWFuKGV0YWcgJiYgaWZSYW5nZS5pbmRleE9mKGV0YWcpICE9PSAtMSlcbiAgfVxuXG4gIC8vIGlmLXJhbmdlIGFzIG1vZGlmaWVkIGRhdGVcbiAgdmFyIGxhc3RNb2RpZmllZCA9IHRoaXMucmVzLmdldEhlYWRlcignTGFzdC1Nb2RpZmllZCcpXG4gIHJldHVybiBwYXJzZUh0dHBEYXRlKGxhc3RNb2RpZmllZCkgPD0gcGFyc2VIdHRwRGF0ZShpZlJhbmdlKVxufVxuXG4vKipcbiAqIFJlZGlyZWN0IHRvIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEBwcml2YXRlXG4gKi9cblxuU2VuZFN0cmVhbS5wcm90b3R5cGUucmVkaXJlY3QgPSBmdW5jdGlvbiByZWRpcmVjdCAocGF0aCkge1xuICB2YXIgcmVzID0gdGhpcy5yZXNcblxuICBpZiAoaGFzTGlzdGVuZXJzKHRoaXMsICdkaXJlY3RvcnknKSkge1xuICAgIHRoaXMuZW1pdCgnZGlyZWN0b3J5JywgcmVzLCBwYXRoKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHRoaXMuaGFzVHJhaWxpbmdTbGFzaCgpKSB7XG4gICAgdGhpcy5lcnJvcig0MDMpXG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgbG9jID0gZW5jb2RlVXJsKGNvbGxhcHNlTGVhZGluZ1NsYXNoZXModGhpcy5wYXRoICsgJy8nKSlcbiAgdmFyIGRvYyA9IGNyZWF0ZUh0bWxEb2N1bWVudCgnUmVkaXJlY3RpbmcnLCAnUmVkaXJlY3RpbmcgdG8gPGEgaHJlZj1cIicgKyBlc2NhcGVIdG1sKGxvYykgKyAnXCI+JyArXG4gICAgZXNjYXBlSHRtbChsb2MpICsgJzwvYT4nKVxuXG4gIC8vIHJlZGlyZWN0XG4gIHJlcy5zdGF0dXNDb2RlID0gMzAxXG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgnKVxuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIEJ1ZmZlci5ieXRlTGVuZ3RoKGRvYykpXG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JywgXCJkZWZhdWx0LXNyYyAnc2VsZidcIilcbiAgcmVzLnNldEhlYWRlcignWC1Db250ZW50LVR5cGUtT3B0aW9ucycsICdub3NuaWZmJylcbiAgcmVzLnNldEhlYWRlcignTG9jYXRpb24nLCBsb2MpXG4gIHJlcy5lbmQoZG9jKVxufVxuXG4vKipcbiAqIFBpcGUgdG8gYHJlcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmVhbX0gcmVzXG4gKiBAcmV0dXJuIHtTdHJlYW19IHJlc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5TZW5kU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gcGlwZSAocmVzKSB7XG4gIC8vIHJvb3QgcGF0aFxuICB2YXIgcm9vdCA9IHRoaXMuX3Jvb3RcblxuICAvLyByZWZlcmVuY2VzXG4gIHRoaXMucmVzID0gcmVzXG5cbiAgLy8gZGVjb2RlIHRoZSBwYXRoXG4gIHZhciBwYXRoID0gZGVjb2RlKHRoaXMucGF0aClcbiAgaWYgKHBhdGggPT09IC0xKSB7XG4gICAgdGhpcy5lcnJvcig0MDApXG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLy8gbnVsbCBieXRlKHMpXG4gIGlmICh+cGF0aC5pbmRleE9mKCdcXDAnKSkge1xuICAgIHRoaXMuZXJyb3IoNDAwKVxuICAgIHJldHVybiByZXNcbiAgfVxuXG4gIHZhciBwYXJ0c1xuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIC8vIG5vcm1hbGl6ZVxuICAgIGlmIChwYXRoKSB7XG4gICAgICBwYXRoID0gbm9ybWFsaXplKCcuJyArIHNlcCArIHBhdGgpXG4gICAgfVxuXG4gICAgLy8gbWFsaWNpb3VzIHBhdGhcbiAgICBpZiAoVVBfUEFUSF9SRUdFWFAudGVzdChwYXRoKSkge1xuICAgICAgZGVidWcoJ21hbGljaW91cyBwYXRoIFwiJXNcIicsIHBhdGgpXG4gICAgICB0aGlzLmVycm9yKDQwMylcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG5cbiAgICAvLyBleHBsb2RlIHBhdGggcGFydHNcbiAgICBwYXJ0cyA9IHBhdGguc3BsaXQoc2VwKVxuXG4gICAgLy8gam9pbiAvIG5vcm1hbGl6ZSBmcm9tIG9wdGlvbmFsIHJvb3QgZGlyXG4gICAgcGF0aCA9IG5vcm1hbGl6ZShqb2luKHJvb3QsIHBhdGgpKVxuICAgIHJvb3QgPSBub3JtYWxpemUocm9vdCArIHNlcClcbiAgfSBlbHNlIHtcbiAgICAvLyBcIi4uXCIgaXMgbWFsaWNpb3VzIHdpdGhvdXQgXCJyb290XCJcbiAgICBpZiAoVVBfUEFUSF9SRUdFWFAudGVzdChwYXRoKSkge1xuICAgICAgZGVidWcoJ21hbGljaW91cyBwYXRoIFwiJXNcIicsIHBhdGgpXG4gICAgICB0aGlzLmVycm9yKDQwMylcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG5cbiAgICAvLyBleHBsb2RlIHBhdGggcGFydHNcbiAgICBwYXJ0cyA9IG5vcm1hbGl6ZShwYXRoKS5zcGxpdChzZXApXG5cbiAgICAvLyByZXNvbHZlIHRoZSBwYXRoXG4gICAgcGF0aCA9IHJlc29sdmUocGF0aClcbiAgfVxuXG4gIC8vIGRvdGZpbGUgaGFuZGxpbmdcbiAgaWYgKGNvbnRhaW5zRG90RmlsZShwYXJ0cykpIHtcbiAgICB2YXIgYWNjZXNzID0gdGhpcy5fZG90ZmlsZXNcblxuICAgIC8vIGxlZ2FjeSBzdXBwb3J0XG4gICAgaWYgKGFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhY2Nlc3MgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXVswXSA9PT0gJy4nXG4gICAgICAgID8gKHRoaXMuX2hpZGRlbiA/ICdhbGxvdycgOiAnaWdub3JlJylcbiAgICAgICAgOiAnYWxsb3cnXG4gICAgfVxuXG4gICAgZGVidWcoJyVzIGRvdGZpbGUgXCIlc1wiJywgYWNjZXNzLCBwYXRoKVxuICAgIHN3aXRjaCAoYWNjZXNzKSB7XG4gICAgICBjYXNlICdhbGxvdyc6XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgdGhpcy5lcnJvcig0MDMpXG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIGNhc2UgJ2lnbm9yZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmVycm9yKDQwNClcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxuXG4gIC8vIGluZGV4IGZpbGUgc3VwcG9ydFxuICBpZiAodGhpcy5faW5kZXgubGVuZ3RoICYmIHRoaXMuaGFzVHJhaWxpbmdTbGFzaCgpKSB7XG4gICAgdGhpcy5zZW5kSW5kZXgocGF0aClcbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICB0aGlzLnNlbmRGaWxlKHBhdGgpXG4gIHJldHVybiByZXNcbn1cblxuLyoqXG4gKiBUcmFuc2ZlciBgcGF0aGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuU2VuZFN0cmVhbS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIHNlbmQgKHBhdGgsIHN0YXQpIHtcbiAgdmFyIGxlbiA9IHN0YXQuc2l6ZVxuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuICB2YXIgb3B0cyA9IHt9XG4gIHZhciByZXMgPSB0aGlzLnJlc1xuICB2YXIgcmVxID0gdGhpcy5yZXFcbiAgdmFyIHJhbmdlcyA9IHJlcS5oZWFkZXJzLnJhbmdlXG4gIHZhciBvZmZzZXQgPSBvcHRpb25zLnN0YXJ0IHx8IDBcblxuICBpZiAoaGVhZGVyc1NlbnQocmVzKSkge1xuICAgIC8vIGltcG9zc2libGUgdG8gc2VuZCBub3dcbiAgICB0aGlzLmhlYWRlcnNBbHJlYWR5U2VudCgpXG4gICAgcmV0dXJuXG4gIH1cblxuICBkZWJ1ZygncGlwZSBcIiVzXCInLCBwYXRoKVxuXG4gIC8vIHNldCBoZWFkZXIgZmllbGRzXG4gIHRoaXMuc2V0SGVhZGVyKHBhdGgsIHN0YXQpXG5cbiAgLy8gc2V0IGNvbnRlbnQtdHlwZVxuICB0aGlzLnR5cGUocGF0aClcblxuICAvLyBjb25kaXRpb25hbCBHRVQgc3VwcG9ydFxuICBpZiAodGhpcy5pc0NvbmRpdGlvbmFsR0VUKCkpIHtcbiAgICBpZiAodGhpcy5pc1ByZWNvbmRpdGlvbkZhaWx1cmUoKSkge1xuICAgICAgdGhpcy5lcnJvcig0MTIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NhY2hhYmxlKCkgJiYgdGhpcy5pc0ZyZXNoKCkpIHtcbiAgICAgIHRoaXMubm90TW9kaWZpZWQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgLy8gYWRqdXN0IGxlbiB0byBzdGFydC9lbmQgb3B0aW9uc1xuICBsZW4gPSBNYXRoLm1heCgwLCBsZW4gLSBvZmZzZXQpXG4gIGlmIChvcHRpb25zLmVuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGJ5dGVzID0gb3B0aW9ucy5lbmQgLSBvZmZzZXQgKyAxXG4gICAgaWYgKGxlbiA+IGJ5dGVzKSBsZW4gPSBieXRlc1xuICB9XG5cbiAgLy8gUmFuZ2Ugc3VwcG9ydFxuICBpZiAodGhpcy5fYWNjZXB0UmFuZ2VzICYmIEJZVEVTX1JBTkdFX1JFR0VYUC50ZXN0KHJhbmdlcykpIHtcbiAgICAvLyBwYXJzZVxuICAgIHJhbmdlcyA9IHBhcnNlUmFuZ2UobGVuLCByYW5nZXMsIHtcbiAgICAgIGNvbWJpbmU6IHRydWVcbiAgICB9KVxuXG4gICAgLy8gSWYtUmFuZ2Ugc3VwcG9ydFxuICAgIGlmICghdGhpcy5pc1JhbmdlRnJlc2goKSkge1xuICAgICAgZGVidWcoJ3JhbmdlIHN0YWxlJylcbiAgICAgIHJhbmdlcyA9IC0yXG4gICAgfVxuXG4gICAgLy8gdW5zYXRpc2ZpYWJsZVxuICAgIGlmIChyYW5nZXMgPT09IC0xKSB7XG4gICAgICBkZWJ1ZygncmFuZ2UgdW5zYXRpc2ZpYWJsZScpXG5cbiAgICAgIC8vIENvbnRlbnQtUmFuZ2VcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtUmFuZ2UnLCBjb250ZW50UmFuZ2UoJ2J5dGVzJywgbGVuKSlcblxuICAgICAgLy8gNDE2IFJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGVcbiAgICAgIHJldHVybiB0aGlzLmVycm9yKDQxNiwge1xuICAgICAgICBoZWFkZXJzOiB7J0NvbnRlbnQtUmFuZ2UnOiByZXMuZ2V0SGVhZGVyKCdDb250ZW50LVJhbmdlJyl9XG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIHZhbGlkIChzeW50YWN0aWNhbGx5IGludmFsaWQvbXVsdGlwbGUgcmFuZ2VzIGFyZSB0cmVhdGVkIGFzIGEgcmVndWxhciByZXNwb25zZSlcbiAgICBpZiAocmFuZ2VzICE9PSAtMiAmJiByYW5nZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBkZWJ1ZygncmFuZ2UgJWonLCByYW5nZXMpXG5cbiAgICAgIC8vIENvbnRlbnQtUmFuZ2VcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gMjA2XG4gICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVJhbmdlJywgY29udGVudFJhbmdlKCdieXRlcycsIGxlbiwgcmFuZ2VzWzBdKSlcblxuICAgICAgLy8gYWRqdXN0IGZvciByZXF1ZXN0ZWQgcmFuZ2VcbiAgICAgIG9mZnNldCArPSByYW5nZXNbMF0uc3RhcnRcbiAgICAgIGxlbiA9IHJhbmdlc1swXS5lbmQgLSByYW5nZXNbMF0uc3RhcnQgKyAxXG4gICAgfVxuICB9XG5cbiAgLy8gY2xvbmUgb3B0aW9uc1xuICBmb3IgKHZhciBwcm9wIGluIG9wdGlvbnMpIHtcbiAgICBvcHRzW3Byb3BdID0gb3B0aW9uc1twcm9wXVxuICB9XG5cbiAgLy8gc2V0IHJlYWQgb3B0aW9uc1xuICBvcHRzLnN0YXJ0ID0gb2Zmc2V0XG4gIG9wdHMuZW5kID0gTWF0aC5tYXgob2Zmc2V0LCBvZmZzZXQgKyBsZW4gLSAxKVxuXG4gIC8vIGNvbnRlbnQtbGVuZ3RoXG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgbGVuKVxuXG4gIC8vIEhFQUQgc3VwcG9ydFxuICBpZiAocmVxLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgcmVzLmVuZCgpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0aGlzLnN0cmVhbShwYXRoLCBvcHRzKVxufVxuXG4vKipcbiAqIFRyYW5zZmVyIGZpbGUgZm9yIGBwYXRoYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQGFwaSBwcml2YXRlXG4gKi9cblNlbmRTdHJlYW0ucHJvdG90eXBlLnNlbmRGaWxlID0gZnVuY3Rpb24gc2VuZEZpbGUgKHBhdGgpIHtcbiAgdmFyIGkgPSAwXG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIGRlYnVnKCdzdGF0IFwiJXNcIicsIHBhdGgpXG4gIGZzLnN0YXQocGF0aCwgZnVuY3Rpb24gb25zdGF0IChlcnIsIHN0YXQpIHtcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnRU5PRU5UJyAmJiAhZXh0bmFtZShwYXRoKSAmJiBwYXRoW3BhdGgubGVuZ3RoIC0gMV0gIT09IHNlcCkge1xuICAgICAgLy8gbm90IGZvdW5kLCBjaGVjayBleHRlbnNpb25zXG4gICAgICByZXR1cm4gbmV4dChlcnIpXG4gICAgfVxuICAgIGlmIChlcnIpIHJldHVybiBzZWxmLm9uU3RhdEVycm9yKGVycilcbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSByZXR1cm4gc2VsZi5yZWRpcmVjdChwYXRoKVxuICAgIHNlbGYuZW1pdCgnZmlsZScsIHBhdGgsIHN0YXQpXG4gICAgc2VsZi5zZW5kKHBhdGgsIHN0YXQpXG4gIH0pXG5cbiAgZnVuY3Rpb24gbmV4dCAoZXJyKSB7XG4gICAgaWYgKHNlbGYuX2V4dGVuc2lvbnMubGVuZ3RoIDw9IGkpIHtcbiAgICAgIHJldHVybiBlcnJcbiAgICAgICAgPyBzZWxmLm9uU3RhdEVycm9yKGVycilcbiAgICAgICAgOiBzZWxmLmVycm9yKDQwNClcbiAgICB9XG5cbiAgICB2YXIgcCA9IHBhdGggKyAnLicgKyBzZWxmLl9leHRlbnNpb25zW2krK11cblxuICAgIGRlYnVnKCdzdGF0IFwiJXNcIicsIHApXG4gICAgZnMuc3RhdChwLCBmdW5jdGlvbiAoZXJyLCBzdGF0KSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gbmV4dChlcnIpXG4gICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSByZXR1cm4gbmV4dCgpXG4gICAgICBzZWxmLmVtaXQoJ2ZpbGUnLCBwLCBzdGF0KVxuICAgICAgc2VsZi5zZW5kKHAsIHN0YXQpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZmVyIGluZGV4IGZvciBgcGF0aGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5TZW5kU3RyZWFtLnByb3RvdHlwZS5zZW5kSW5kZXggPSBmdW5jdGlvbiBzZW5kSW5kZXggKHBhdGgpIHtcbiAgdmFyIGkgPSAtMVxuICB2YXIgc2VsZiA9IHRoaXNcblxuICBmdW5jdGlvbiBuZXh0IChlcnIpIHtcbiAgICBpZiAoKytpID49IHNlbGYuX2luZGV4Lmxlbmd0aCkge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHNlbGYub25TdGF0RXJyb3IoZXJyKVxuICAgICAgcmV0dXJuIHNlbGYuZXJyb3IoNDA0KVxuICAgIH1cblxuICAgIHZhciBwID0gam9pbihwYXRoLCBzZWxmLl9pbmRleFtpXSlcblxuICAgIGRlYnVnKCdzdGF0IFwiJXNcIicsIHApXG4gICAgZnMuc3RhdChwLCBmdW5jdGlvbiAoZXJyLCBzdGF0KSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gbmV4dChlcnIpXG4gICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSByZXR1cm4gbmV4dCgpXG4gICAgICBzZWxmLmVtaXQoJ2ZpbGUnLCBwLCBzdGF0KVxuICAgICAgc2VsZi5zZW5kKHAsIHN0YXQpXG4gICAgfSlcbiAgfVxuXG4gIG5leHQoKVxufVxuXG4vKipcbiAqIFN0cmVhbSBgcGF0aGAgdG8gdGhlIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU2VuZFN0cmVhbS5wcm90b3R5cGUuc3RyZWFtID0gZnVuY3Rpb24gc3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gIC8vIFRPRE86IHRoaXMgaXMgYWxsIGxhbWUsIHJlZmFjdG9yIG1lZWVlXG4gIHZhciBmaW5pc2hlZCA9IGZhbHNlXG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgcmVzID0gdGhpcy5yZXNcblxuICAvLyBwaXBlXG4gIHZhciBzdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIHRoaXMuZW1pdCgnc3RyZWFtJywgc3RyZWFtKVxuICBzdHJlYW0ucGlwZShyZXMpXG5cbiAgLy8gcmVzcG9uc2UgZmluaXNoZWQsIGRvbmUgd2l0aCB0aGUgZmRcbiAgb25GaW5pc2hlZChyZXMsIGZ1bmN0aW9uIG9uZmluaXNoZWQgKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGRlc3Ryb3koc3RyZWFtKVxuICB9KVxuXG4gIC8vIGVycm9yIGhhbmRsaW5nIGNvZGUtc21lbGxcbiAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIG9uZXJyb3IgKGVycikge1xuICAgIC8vIHJlcXVlc3QgYWxyZWFkeSBmaW5pc2hlZFxuICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuXG5cbiAgICAvLyBjbGVhbiB1cCBzdHJlYW1cbiAgICBmaW5pc2hlZCA9IHRydWVcbiAgICBkZXN0cm95KHN0cmVhbSlcblxuICAgIC8vIGVycm9yXG4gICAgc2VsZi5vblN0YXRFcnJvcihlcnIpXG4gIH0pXG5cbiAgLy8gZW5kXG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gb25lbmQgKCkge1xuICAgIHNlbGYuZW1pdCgnZW5kJylcbiAgfSlcbn1cblxuLyoqXG4gKiBTZXQgY29udGVudC10eXBlIGJhc2VkIG9uIGBwYXRoYFxuICogaWYgaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblNlbmRTdHJlYW0ucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbiB0eXBlIChwYXRoKSB7XG4gIHZhciByZXMgPSB0aGlzLnJlc1xuXG4gIGlmIChyZXMuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKSkgcmV0dXJuXG5cbiAgdmFyIHR5cGUgPSBtaW1lLmxvb2t1cChwYXRoKVxuXG4gIGlmICghdHlwZSkge1xuICAgIGRlYnVnKCdubyBjb250ZW50LXR5cGUnKVxuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNoYXJzZXQgPSBtaW1lLmNoYXJzZXRzLmxvb2t1cCh0eXBlKVxuXG4gIGRlYnVnKCdjb250ZW50LXR5cGUgJXMnLCB0eXBlKVxuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCB0eXBlICsgKGNoYXJzZXQgPyAnOyBjaGFyc2V0PScgKyBjaGFyc2V0IDogJycpKVxufVxuXG4vKipcbiAqIFNldCByZXNwb25zZSBoZWFkZXIgZmllbGRzLCBtb3N0XG4gKiBmaWVsZHMgbWF5IGJlIHByZS1kZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuU2VuZFN0cmVhbS5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gc2V0SGVhZGVyIChwYXRoLCBzdGF0KSB7XG4gIHZhciByZXMgPSB0aGlzLnJlc1xuXG4gIHRoaXMuZW1pdCgnaGVhZGVycycsIHJlcywgcGF0aCwgc3RhdClcblxuICBpZiAodGhpcy5fYWNjZXB0UmFuZ2VzICYmICFyZXMuZ2V0SGVhZGVyKCdBY2NlcHQtUmFuZ2VzJykpIHtcbiAgICBkZWJ1ZygnYWNjZXB0IHJhbmdlcycpXG4gICAgcmVzLnNldEhlYWRlcignQWNjZXB0LVJhbmdlcycsICdieXRlcycpXG4gIH1cblxuICBpZiAodGhpcy5fY2FjaGVDb250cm9sICYmICFyZXMuZ2V0SGVhZGVyKCdDYWNoZS1Db250cm9sJykpIHtcbiAgICB2YXIgY2FjaGVDb250cm9sID0gJ3B1YmxpYywgbWF4LWFnZT0nICsgTWF0aC5mbG9vcih0aGlzLl9tYXhhZ2UgLyAxMDAwKVxuXG4gICAgaWYgKHRoaXMuX2ltbXV0YWJsZSkge1xuICAgICAgY2FjaGVDb250cm9sICs9ICcsIGltbXV0YWJsZSdcbiAgICB9XG5cbiAgICBkZWJ1ZygnY2FjaGUtY29udHJvbCAlcycsIGNhY2hlQ29udHJvbClcbiAgICByZXMuc2V0SGVhZGVyKCdDYWNoZS1Db250cm9sJywgY2FjaGVDb250cm9sKVxuICB9XG5cbiAgaWYgKHRoaXMuX2xhc3RNb2RpZmllZCAmJiAhcmVzLmdldEhlYWRlcignTGFzdC1Nb2RpZmllZCcpKSB7XG4gICAgdmFyIG1vZGlmaWVkID0gc3RhdC5tdGltZS50b1VUQ1N0cmluZygpXG4gICAgZGVidWcoJ21vZGlmaWVkICVzJywgbW9kaWZpZWQpXG4gICAgcmVzLnNldEhlYWRlcignTGFzdC1Nb2RpZmllZCcsIG1vZGlmaWVkKVxuICB9XG5cbiAgaWYgKHRoaXMuX2V0YWcgJiYgIXJlcy5nZXRIZWFkZXIoJ0VUYWcnKSkge1xuICAgIHZhciB2YWwgPSBldGFnKHN0YXQpXG4gICAgZGVidWcoJ2V0YWcgJXMnLCB2YWwpXG4gICAgcmVzLnNldEhlYWRlcignRVRhZycsIHZhbClcbiAgfVxufVxuXG4vKipcbiAqIENsZWFyIGFsbCBoZWFkZXJzIGZyb20gYSByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNsZWFySGVhZGVycyAocmVzKSB7XG4gIHZhciBoZWFkZXJzID0gZ2V0SGVhZGVyTmFtZXMocmVzKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5yZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSlcbiAgfVxufVxuXG4vKipcbiAqIENvbGxhcHNlIGFsbCBsZWFkaW5nIHNsYXNoZXMgaW50byBhIHNpbmdsZSBzbGFzaFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbGxhcHNlTGVhZGluZ1NsYXNoZXMgKHN0cikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHJbaV0gIT09ICcvJykge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaSA+IDFcbiAgICA/ICcvJyArIHN0ci5zdWJzdHIoaSlcbiAgICA6IHN0clxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBwYXRoIHBhcnRzIGNvbnRhaW4gYSBkb3RmaWxlLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbnRhaW5zRG90RmlsZSAocGFydHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFydHNbaV1cbiAgICBpZiAocGFydC5sZW5ndGggPiAxICYmIHBhcnRbMF0gPT09ICcuJykge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBDb250ZW50LVJhbmdlIGhlYWRlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IHNpemVcbiAqIEBwYXJhbSB7YXJyYXl9IFtyYW5nZV1cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50UmFuZ2UgKHR5cGUsIHNpemUsIHJhbmdlKSB7XG4gIHJldHVybiB0eXBlICsgJyAnICsgKHJhbmdlID8gcmFuZ2Uuc3RhcnQgKyAnLScgKyByYW5nZS5lbmQgOiAnKicpICsgJy8nICsgc2l6ZVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIG1pbmltYWwgSFRNTCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBib2R5XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUh0bWxEb2N1bWVudCAodGl0bGUsIGJvZHkpIHtcbiAgcmV0dXJuICc8IURPQ1RZUEUgaHRtbD5cXG4nICtcbiAgICAnPGh0bWwgbGFuZz1cImVuXCI+XFxuJyArXG4gICAgJzxoZWFkPlxcbicgK1xuICAgICc8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cXG4nICtcbiAgICAnPHRpdGxlPicgKyB0aXRsZSArICc8L3RpdGxlPlxcbicgK1xuICAgICc8L2hlYWQ+XFxuJyArXG4gICAgJzxib2R5PlxcbicgK1xuICAgICc8cHJlPicgKyBib2R5ICsgJzwvcHJlPlxcbicgK1xuICAgICc8L2JvZHk+XFxuJyArXG4gICAgJzwvaHRtbD5cXG4nXG59XG5cbi8qKlxuICogZGVjb2RlVVJJQ29tcG9uZW50LlxuICpcbiAqIEFsbG93cyBWOCB0byBvbmx5IGRlb3B0aW1pemUgdGhpcyBmbiBpbnN0ZWFkIG9mIGFsbFxuICogb2Ygc2VuZCgpLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBkZWNvZGUgKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHBhdGgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAtMVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBoZWFkZXIgbmFtZXMgb24gYSByZXNwbnNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNcbiAqIEByZXR1cm5zIHthcnJheVtzdHJpbmddfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRIZWFkZXJOYW1lcyAocmVzKSB7XG4gIHJldHVybiB0eXBlb2YgcmVzLmdldEhlYWRlck5hbWVzICE9PSAnZnVuY3Rpb24nXG4gICAgPyBPYmplY3Qua2V5cyhyZXMuX2hlYWRlcnMgfHwge30pXG4gICAgOiByZXMuZ2V0SGVhZGVyTmFtZXMoKVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMgb2YgYSBnaXZlbiB0eXBlLlxuICpcbiAqIFRoZSB3YXkgdG8gZG8gdGhpcyBjaGVjayBpcyBkb25lIHRocmVlIGRpZmZlcmVudCB3YXlzIGluIE5vZGUuanMgPj0gMC44XG4gKiBzbyB0aGlzIGNvbnNvbGlkYXRlcyB0aGVtIGludG8gYSBtaW5pbWFsIHNldCB1c2luZyBpbnN0YW5jZSBtZXRob2RzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGhhc0xpc3RlbmVycyAoZW1pdHRlciwgdHlwZSkge1xuICB2YXIgY291bnQgPSB0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ICE9PSAnZnVuY3Rpb24nXG4gICAgPyBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGhcbiAgICA6IGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKVxuXG4gIHJldHVybiBjb3VudCA+IDBcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIHJlc3BvbnNlIGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHJlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGhlYWRlcnNTZW50IChyZXMpIHtcbiAgcmV0dXJuIHR5cGVvZiByZXMuaGVhZGVyc1NlbnQgIT09ICdib29sZWFuJ1xuICAgID8gQm9vbGVhbihyZXMuX2hlYWRlcilcbiAgICA6IHJlcy5oZWFkZXJzU2VudFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgaW5kZXggb3B0aW9uIGludG8gYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHtib29sZWFufHN0cmluZ3xhcnJheX0gdmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVMaXN0ICh2YWwsIG5hbWUpIHtcbiAgdmFyIGxpc3QgPSBbXS5jb25jYXQodmFsIHx8IFtdKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgbGlzdFtpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IobmFtZSArICcgbXVzdCBiZSBhcnJheSBvZiBzdHJpbmdzIG9yIGZhbHNlJylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGlzdFxufVxuXG4vKipcbiAqIFBhcnNlIGFuIEhUVFAgRGF0ZSBpbnRvIGEgbnVtYmVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlSHR0cERhdGUgKGRhdGUpIHtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUgJiYgRGF0ZS5wYXJzZShkYXRlKVxuXG4gIHJldHVybiB0eXBlb2YgdGltZXN0YW1wID09PSAnbnVtYmVyJ1xuICAgID8gdGltZXN0YW1wXG4gICAgOiBOYU5cbn1cblxuLyoqXG4gKiBQYXJzZSBhIEhUVFAgdG9rZW4gbGlzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5MaXN0IChzdHIpIHtcbiAgdmFyIGVuZCA9IDBcbiAgdmFyIGxpc3QgPSBbXVxuICB2YXIgc3RhcnQgPSAwXG5cbiAgLy8gZ2F0aGVyIHRva2Vuc1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc3dpdGNoIChzdHIuY2hhckNvZGVBdChpKSkge1xuICAgICAgY2FzZSAweDIwOiAvKiAgICovXG4gICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XG4gICAgICAgICAgc3RhcnQgPSBlbmQgPSBpICsgMVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDB4MmM6IC8qICwgKi9cbiAgICAgICAgbGlzdC5wdXNoKHN0ci5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpXG4gICAgICAgIHN0YXJ0ID0gZW5kID0gaSArIDFcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVuZCA9IGkgKyAxXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gZmluYWwgdG9rZW5cbiAgbGlzdC5wdXNoKHN0ci5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpXG5cbiAgcmV0dXJuIGxpc3Rcbn1cblxuLyoqXG4gKiBTZXQgYW4gb2JqZWN0IG9mIGhlYWRlcnMgb24gYSByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzXG4gKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyc1xuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzZXRIZWFkZXJzIChyZXMsIGhlYWRlcnMpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldXG4gICAgcmVzLnNldEhlYWRlcihrZXksIGhlYWRlcnNba2V5XSlcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3NlbmQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDUyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDUzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzXG4vLyBtb2R1bGUgaWQgPSA1NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzXG4vLyBtb2R1bGUgaWQgPSA1NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gNTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzXG4vLyBtb2R1bGUgaWQgPSA1N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gNThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gNTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qc1xuLy8gbW9kdWxlIGlkID0gNjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanNcbi8vIG1vZHVsZSBpZCA9IDYxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanNcbi8vIG1vZHVsZSBpZCA9IDYyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBUT19TVFJJTkdfVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbnZhciBET01JdGVyYWJsZXMgPSAoJ0NTU1J1bGVMaXN0LENTU1N0eWxlRGVjbGFyYXRpb24sQ1NTVmFsdWVMaXN0LENsaWVudFJlY3RMaXN0LERPTVJlY3RMaXN0LERPTVN0cmluZ0xpc3QsJyArXG4gICdET01Ub2tlbkxpc3QsRGF0YVRyYW5zZmVySXRlbUxpc3QsRmlsZUxpc3QsSFRNTEFsbENvbGxlY3Rpb24sSFRNTENvbGxlY3Rpb24sSFRNTEZvcm1FbGVtZW50LEhUTUxTZWxlY3RFbGVtZW50LCcgK1xuICAnTWVkaWFMaXN0LE1pbWVUeXBlQXJyYXksTmFtZWROb2RlTWFwLE5vZGVMaXN0LFBhaW50UmVxdWVzdExpc3QsUGx1Z2luLFBsdWdpbkFycmF5LFNWR0xlbmd0aExpc3QsU1ZHTnVtYmVyTGlzdCwnICtcbiAgJ1NWR1BhdGhTZWdMaXN0LFNWR1BvaW50TGlzdCxTVkdTdHJpbmdMaXN0LFNWR1RyYW5zZm9ybUxpc3QsU291cmNlQnVmZmVyTGlzdCxTdHlsZVNoZWV0TGlzdCxUZXh0VHJhY2tDdWVMaXN0LCcgK1xuICAnVGV4dFRyYWNrTGlzdCxUb3VjaExpc3QnKS5zcGxpdCgnLCcpO1xuXG5mb3IgKHZhciBpID0gMDsgaSA8IERPTUl0ZXJhYmxlcy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IERPTUl0ZXJhYmxlc1tpXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChwcm90byAmJiAhcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICBJdGVyYXRvcnNbTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gNjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzXG4vLyBtb2R1bGUgaWQgPSA2NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4taW5zdGFuY2UuanNcbi8vIG1vZHVsZSBpZCA9IDY1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qc1xuLy8gbW9kdWxlIGlkID0gNjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKHNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBoaWRlKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qc1xuLy8gbW9kdWxlIGlkID0gNjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgQU5BTFlUSUNTX1BBVEggfSBmcm9tICcuLi9jb25maWcnXG5pbXBvcnQge1xuICBBbm9tYWx5LFxuICBBbm9tYWx5SWQsIGdldEFub21hbHlUeXBlSW5mbyxcbiAgbG9hZEFub21hbHlCeUlkLFxuICBzZXRBbm9tYWx5UHJlZGljdGlvblRpbWUsXG4gIHNldEFub21hbHlTdGF0dXNcbn0gZnJvbSAnLi9hbm9tYWx5VHlwZSdcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4vbWV0cmljcyc7XG5pbXBvcnQgeyBnZXRMYWJlbGVkU2VnbWVudHMsIGluc2VydFNlZ21lbnRzLCByZW1vdmVTZWdtZW50cyB9IGZyb20gJy4vc2VnbWVudHMnO1xuaW1wb3J0IHsgc3BsaXQsIG1hcCwgbWFwU3luYyB9IGZyb20gJ2V2ZW50LXN0cmVhbSdcblxuY29uc3QgbGVhcm5Xb3JrZXIgPSBzcGF3bigncHl0aG9uMycsIFsnd29ya2VyLnB5J10sIHsgY3dkOiBBTkFMWVRJQ1NfUEFUSCB9KVxubGVhcm5Xb3JrZXIuc3Rkb3V0LnBpcGUoc3BsaXQoKSlcbiAgLnBpcGUoXG4gICAgbWFwU3luYyhmdW5jdGlvbihsaW5lKXtcbiAgICAgIG9uTWVzc2FnZShsaW5lKVxuICAgIH0pXG4gICk7XG5cbmxlYXJuV29ya2VyLnN0ZGVyci5vbignZGF0YScsIGRhdGEgPT4gY29uc29sZS5lcnJvcihgd29ya2VyIHN0ZGVycjogJHtkYXRhfWApKTtcblxuY29uc3QgdGFza01hcCA9IHt9O1xubGV0IG5leHRUYXNrSWQgPSAwO1xuXG5mdW5jdGlvbiBvbk1lc3NhZ2UoZGF0YSkge1xuICBjb25zb2xlLmxvZyhgd29ya2VyIHN0ZG91dDogJHtkYXRhfWApO1xuICBsZXQgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGRhdGEpO1xuICBsZXQgdGFza0lkID0gcmVzcG9uc2UuX190YXNrX2lkO1xuICAvLyBsZXQgYW5vbWFseU5hbWUgPSByZXNwb25zZS5hbm9tYWx5X25hbWU7XG4gIC8vIGxldCB0YXNrID0gcmVzcG9uc2UudGFzaztcbiAgbGV0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICBpZihzdGF0dXMgPT09ICdzdWNjZXNzJyB8fCBzdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgaWYodGFza0lkIGluIHRhc2tNYXApIHtcbiAgICAgIGxldCByZXNvbHZlciA9IHRhc2tNYXBbdGFza0lkXTtcbiAgICAgIHJlc29sdmVyKHJlc3BvbnNlKTtcbiAgICAgIGRlbGV0ZSB0YXNrTWFwW3Rhc2tJZF07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJ1blRhc2sodGFzaykgOiBQcm9taXNlPGFueT4ge1xuICBsZXQgYW5vbWFseTpBbm9tYWx5ID0gbG9hZEFub21hbHlCeUlkKHRhc2suYW5vbWFseV9pZCk7XG4gIHRhc2subWV0cmljID0ge1xuICAgIGRhdGFzb3VyY2U6IGFub21hbHkubWV0cmljLmRhdGFzb3VyY2UsXG4gICAgdGFyZ2V0czogYW5vbWFseS5tZXRyaWMudGFyZ2V0cy5tYXAodCA9PiBnZXRUYXJnZXQodCkpXG4gIH07XG5cbiAgdGFzay5fX3Rhc2tfaWQgPSBuZXh0VGFza0lkKys7XG4gIGxldCBjb21tYW5kID0gSlNPTi5zdHJpbmdpZnkodGFzaylcbiAgbGVhcm5Xb3JrZXIuc3RkaW4ud3JpdGUoYCR7Y29tbWFuZH1cXG5gKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPE9iamVjdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRhc2tNYXBbdGFzay5fX3Rhc2tfaWRdID0gcmVzb2x2ZVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBydW5MZWFybmluZyhhbm9tYWx5SWQ6QW5vbWFseUlkKSB7XG4gIGxldCBzZWdtZW50cyA9IGdldExhYmVsZWRTZWdtZW50cyhhbm9tYWx5SWQpO1xuICBzZXRBbm9tYWx5U3RhdHVzKGFub21hbHlJZCwgJ2xlYXJuaW5nJyk7XG4gIGxldCBhbm9tYWx5OkFub21hbHkgID0gbG9hZEFub21hbHlCeUlkKGFub21hbHlJZCk7XG4gIGxldCBhbmFseXRpY3NUeXBlID0gXCJhbm9tYWxpZXNcIjtcbiAgbGV0IHByZXNldCA9IHVuZGVmaW5lZDtcbiAgaWYgKGFub21hbHkubmFtZS5pbmNsdWRlcyhcImp1bXBzXCIpKSB7XG4gICAgYW5hbHl0aWNzVHlwZSA9IFwicGF0dGVybnNcIjtcbiAgICBwcmVzZXQgPSBcInN0ZXBzXCJcbiAgfVxuICBpZiAoYW5vbWFseS5uYW1lLmluY2x1ZGVzKFwiY2xpZmZzXCIpIHx8IGFub21hbHkubmFtZS5pbmNsdWRlcyhcImRyb3BzXCIpKSB7XG4gICAgYW5hbHl0aWNzVHlwZSA9IFwicGF0dGVybnNcIjtcbiAgICBwcmVzZXQgPSBcImNsaWZmc1wiXG4gIH1cbiAgaWYgKGFub21hbHkubmFtZS5pbmNsdWRlcyhcInBlYWtzXCIpKSB7XG4gICAgYW5hbHl0aWNzVHlwZSA9IFwicGF0dGVybnNcIjtcbiAgICBwcmVzZXQgPSBcInBlYWtzXCJcbiAgfVxuICBsZXQgdGFzayA9IHtcbiAgICB0eXBlOiAnbGVhcm4nLFxuICAgIGFub21hbHlfaWQ6IGFub21hbHlJZCxcbiAgICBhbmFseXRpY3NfdHlwZTogYW5hbHl0aWNzVHlwZSxcbiAgICBwcmVzZXQsXG4gICAgc2VnbWVudHM6IHNlZ21lbnRzXG4gIH07XG5cbiAgbGV0IHJlc3VsdCA9IGF3YWl0IHJ1blRhc2sodGFzayk7XG5cbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgIHNldEFub21hbHlTdGF0dXMoYW5vbWFseUlkLCAncmVhZHknKTtcbiAgICBpbnNlcnRTZWdtZW50cyhhbm9tYWx5SWQsIHJlc3VsdC5zZWdtZW50cywgZmFsc2UpO1xuICAgIHNldEFub21hbHlQcmVkaWN0aW9uVGltZShhbm9tYWx5SWQsIHJlc3VsdC5sYXN0X3ByZWRpY3Rpb25fdGltZSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0QW5vbWFseVN0YXR1cyhhbm9tYWx5SWQsICdmYWlsZWQnLCByZXN1bHQuZXJyb3IpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blByZWRpY3QoYW5vbWFseUlkOkFub21hbHlJZCkge1xuICBsZXQgYW5vbWFseTpBbm9tYWx5ID0gbG9hZEFub21hbHlCeUlkKGFub21hbHlJZCk7XG4gIGxldCBhbmFseXRpY3NUeXBlID0gXCJhbm9tYWxpZXNcIjtcbiAgbGV0IHByZXNldCA9IHVuZGVmaW5lZDtcbiAgaWYgKGFub21hbHkubmFtZS5pbmNsdWRlcyhcImp1bXBcIikpIHtcbiAgICBhbmFseXRpY3NUeXBlID0gXCJwYXR0ZXJuc1wiO1xuICAgIHByZXNldCA9IFwic3RlcHNcIlxuICB9XG4gIGlmIChhbm9tYWx5Lm5hbWUuaW5jbHVkZXMoXCJjbGlmZnNcIikgfHwgYW5vbWFseS5uYW1lLmluY2x1ZGVzKFwiZHJvcHNcIikpIHtcbiAgICBhbmFseXRpY3NUeXBlID0gXCJwYXR0ZXJuc1wiO1xuICAgIHByZXNldCA9IFwiY2xpZmZzXCJcbiAgfVxuICBpZiAoYW5vbWFseS5uYW1lLmluY2x1ZGVzKFwicGVha3NcIikpIHtcbiAgICBhbmFseXRpY3NUeXBlID0gXCJwYXR0ZXJuc1wiO1xuICAgIHByZXNldCA9IFwicGVha3NcIlxuICB9XG4gIGxldCB0YXNrID0ge1xuICAgIHR5cGU6ICdwcmVkaWN0JyxcbiAgICBhbm9tYWx5X2lkOiBhbm9tYWx5SWQsXG4gICAgYW5hbHl0aWNzX3R5cGU6IGFuYWx5dGljc1R5cGUsXG4gICAgcHJlc2V0LFxuICAgIGxhc3RfcHJlZGljdGlvbl90aW1lOiBhbm9tYWx5Lmxhc3RfcHJlZGljdGlvbl90aW1lXG4gIH07XG4gIGxldCByZXN1bHQgPSBhd2FpdCBydW5UYXNrKHRhc2spO1xuXG4gIGlmKHJlc3VsdC5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIE1lcmdpbmcgc2VnbWVudHNcbiAgbGV0IHNlZ21lbnRzID0gZ2V0TGFiZWxlZFNlZ21lbnRzKGFub21hbHlJZCk7XG4gIGlmKHNlZ21lbnRzLmxlbmd0aCA+IDAgJiYgcmVzdWx0LnNlZ21lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgbGFzdE9sZFNlZ21lbnQgPSBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXTtcbiAgICBsZXQgZmlyc3ROZXdTZWdtZW50ID0gcmVzdWx0LnNlZ21lbnRzWzBdO1xuXG4gICAgaWYoZmlyc3ROZXdTZWdtZW50LnN0YXJ0IDw9IGxhc3RPbGRTZWdtZW50LmZpbmlzaCkge1xuICAgICAgcmVzdWx0LnNlZ21lbnRzWzBdLnN0YXJ0ID0gbGFzdE9sZFNlZ21lbnQuc3RhcnQ7XG4gICAgICByZW1vdmVTZWdtZW50cyhhbm9tYWx5SWQsIFtsYXN0T2xkU2VnbWVudC5pZF0pO1xuICAgIH1cbiAgfVxuXG4gIGluc2VydFNlZ21lbnRzKGFub21hbHlJZCwgcmVzdWx0LnNlZ21lbnRzLCBmYWxzZSk7XG4gIHNldEFub21hbHlQcmVkaWN0aW9uVGltZShhbm9tYWx5SWQsIHJlc3VsdC5sYXN0X3ByZWRpY3Rpb25fdGltZSk7XG4gIHJldHVybiByZXN1bHQuc2VnbWVudHM7XG59XG5cbmV4cG9ydCB7IHJ1bkxlYXJuaW5nLCBydW5QcmVkaWN0IH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZpY2VzL2FuYWx5dGljcy50cyIsImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBnZXRKc29uRGF0YVN5bmMsIHdyaXRlSnNvbkRhdGFTeW5jIH0gIGZyb20gJy4vanNvbic7XG5pbXBvcnQgeyBTRUdNRU5UU19QQVRIIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IEFub21hbHlJZCwgbG9hZEFub21hbHlCeUlkLCBzYXZlQW5vbWFseSB9IGZyb20gJy4vYW5vbWFseVR5cGUnO1xuXG5mdW5jdGlvbiBnZXRMYWJlbGVkU2VnbWVudHMoYW5vbWFseUlkOiBBbm9tYWx5SWQpIHtcbiAgbGV0IGZpbGVuYW1lID0gcGF0aC5qb2luKFNFR01FTlRTX1BBVEgsIGAke2Fub21hbHlJZH1fbGFiZWxlZC5qc29uYCk7XG5cbiAgbGV0IHNlZ21lbnRzID0gW107XG4gIHRyeSB7XG4gICAgc2VnbWVudHMgPSBnZXRKc29uRGF0YVN5bmMoZmlsZW5hbWUpO1xuICAgIGZvciAobGV0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICAgIGlmIChzZWdtZW50LmxhYmVsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZWdtZW50LmxhYmVsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXRQcmVkaWN0ZWRTZWdtZW50cyhhbm9tYWx5SWQ6IEFub21hbHlJZCkge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oU0VHTUVOVFNfUEFUSCwgYCR7YW5vbWFseUlkfV9zZWdtZW50cy5qc29uYCk7XG5cbiAgbGV0IGpzb25EYXRhO1xuICB0cnkge1xuICAgIGpzb25EYXRhID0gZ2V0SnNvbkRhdGFTeW5jKGZpbGVuYW1lKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpO1xuICAgIGpzb25EYXRhID0gW107XG4gIH1cbiAgcmV0dXJuIGpzb25EYXRhO1xufVxuXG5mdW5jdGlvbiBzYXZlU2VnbWVudHMoYW5vbWFseUlkOiBBbm9tYWx5SWQsIHNlZ21lbnRzKSB7XG4gIGxldCBmaWxlbmFtZSA9IHBhdGguam9pbihTRUdNRU5UU19QQVRILCBgJHthbm9tYWx5SWR9X2xhYmVsZWQuanNvbmApO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHdyaXRlSnNvbkRhdGFTeW5jKGZpbGVuYW1lLCBzZWdtZW50cyk7XG4gIH0gY2F0Y2goZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoZS5tZXNzYWdlKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbmB0IHdyaXRlIHRvIGRiJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0U2VnbWVudHMoYW5vbWFseUlkOiBBbm9tYWx5SWQsIGFkZGVkU2VnbWVudHMsIGxhYmVsZWQ6Ym9vbGVhbikge1xuICAvLyBTZXQgc3RhdHVzXG4gIGxldCBpbmZvID0gbG9hZEFub21hbHlCeUlkKGFub21hbHlJZCk7XG4gIGxldCBzZWdtZW50cyA9IGdldExhYmVsZWRTZWdtZW50cyhhbm9tYWx5SWQpO1xuXG4gIGxldCBuZXh0SWQgPSBpbmZvLm5leHRfaWQ7XG4gIGxldCBhZGRlZElkcyA9IFtdXG4gIGZvciAobGV0IHNlZ21lbnQgb2YgYWRkZWRTZWdtZW50cykge1xuICAgIHNlZ21lbnQuaWQgPSBuZXh0SWQ7XG4gICAgc2VnbWVudC5sYWJlbGVkID0gbGFiZWxlZDtcbiAgICBhZGRlZElkcy5wdXNoKG5leHRJZCk7XG4gICAgbmV4dElkKys7XG4gICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgfVxuICBpbmZvLm5leHRfaWQgPSBuZXh0SWQ7XG4gIHNhdmVTZWdtZW50cyhhbm9tYWx5SWQsIHNlZ21lbnRzKTtcbiAgc2F2ZUFub21hbHkoYW5vbWFseUlkLCBpbmZvKTtcbiAgcmV0dXJuIGFkZGVkSWRzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTZWdtZW50cyhhbm9tYWx5SWQ6IEFub21hbHlJZCwgcmVtb3ZlZFNlZ21lbnRzKSB7XG4gIGxldCBzZWdtZW50cyA9IGdldExhYmVsZWRTZWdtZW50cyhhbm9tYWx5SWQpO1xuICBmb3IgKGxldCBzZWdtZW50SWQgb2YgcmVtb3ZlZFNlZ21lbnRzKSB7XG4gICAgc2VnbWVudHMgPSBzZWdtZW50cy5maWx0ZXIoZWwgPT4gZWwuaWQgIT09IHNlZ21lbnRJZCk7XG4gIH1cbiAgc2F2ZVNlZ21lbnRzKGFub21hbHlJZCwgc2VnbWVudHMpO1xufVxuXG5leHBvcnQgeyBnZXRMYWJlbGVkU2VnbWVudHMsIGdldFByZWRpY3RlZFNlZ21lbnRzLCBzYXZlU2VnbWVudHMsIGluc2VydFNlZ21lbnRzLCByZW1vdmVTZWdtZW50cyB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2aWNlcy9zZWdtZW50cy50cyIsInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxuXG4vLyB0aHJvdWdoXG4vL1xuLy8gYSBzdHJlYW0gdGhhdCBkb2VzIG5vdGhpbmcgYnV0IHJlLWVtaXQgdGhlIGlucHV0LlxuLy8gdXNlZnVsIGZvciBhZ2dyZWdhdGluZyBhIHNlcmllcyBvZiBjaGFuZ2luZyBidXQgbm90IGVuZGluZyBzdHJlYW1zIGludG8gb25lIHN0cmVhbSlcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gdGhyb3VnaFxudGhyb3VnaC50aHJvdWdoID0gdGhyb3VnaFxuXG4vL2NyZWF0ZSBhIHJlYWRhYmxlIHdyaXRhYmxlIHN0cmVhbS5cblxuZnVuY3Rpb24gdGhyb3VnaCAod3JpdGUsIGVuZCwgb3B0cykge1xuICB3cml0ZSA9IHdyaXRlIHx8IGZ1bmN0aW9uIChkYXRhKSB7IHRoaXMucXVldWUoZGF0YSkgfVxuICBlbmQgPSBlbmQgfHwgZnVuY3Rpb24gKCkgeyB0aGlzLnF1ZXVlKG51bGwpIH1cblxuICB2YXIgZW5kZWQgPSBmYWxzZSwgZGVzdHJveWVkID0gZmFsc2UsIGJ1ZmZlciA9IFtdLCBfZW5kZWQgPSBmYWxzZVxuICB2YXIgc3RyZWFtID0gbmV3IFN0cmVhbSgpXG4gIHN0cmVhbS5yZWFkYWJsZSA9IHN0cmVhbS53cml0YWJsZSA9IHRydWVcbiAgc3RyZWFtLnBhdXNlZCA9IGZhbHNlXG5cbi8vICBzdHJlYW0uYXV0b1BhdXNlICAgPSAhKG9wdHMgJiYgb3B0cy5hdXRvUGF1c2UgICA9PT0gZmFsc2UpXG4gIHN0cmVhbS5hdXRvRGVzdHJveSA9ICEob3B0cyAmJiBvcHRzLmF1dG9EZXN0cm95ID09PSBmYWxzZSlcblxuICBzdHJlYW0ud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHdyaXRlLmNhbGwodGhpcywgZGF0YSlcbiAgICByZXR1cm4gIXN0cmVhbS5wYXVzZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYWluKCkge1xuICAgIHdoaWxlKGJ1ZmZlci5sZW5ndGggJiYgIXN0cmVhbS5wYXVzZWQpIHtcbiAgICAgIHZhciBkYXRhID0gYnVmZmVyLnNoaWZ0KClcbiAgICAgIGlmKG51bGwgPT09IGRhdGEpXG4gICAgICAgIHJldHVybiBzdHJlYW0uZW1pdCgnZW5kJylcbiAgICAgIGVsc2VcbiAgICAgICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBkYXRhKVxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbS5xdWV1ZSA9IHN0cmVhbS5wdXNoID0gZnVuY3Rpb24gKGRhdGEpIHtcbi8vICAgIGNvbnNvbGUuZXJyb3IoZW5kZWQpXG4gICAgaWYoX2VuZGVkKSByZXR1cm4gc3RyZWFtXG4gICAgaWYoZGF0YSA9PT0gbnVsbCkgX2VuZGVkID0gdHJ1ZVxuICAgIGJ1ZmZlci5wdXNoKGRhdGEpXG4gICAgZHJhaW4oKVxuICAgIHJldHVybiBzdHJlYW1cbiAgfVxuXG4gIC8vdGhpcyB3aWxsIGJlIHJlZ2lzdGVyZWQgYXMgdGhlIGZpcnN0ICdlbmQnIGxpc3RlbmVyXG4gIC8vbXVzdCBjYWxsIGRlc3Ryb3kgbmV4dCB0aWNrLCB0byBtYWtlIHN1cmUgd2UncmUgYWZ0ZXIgYW55XG4gIC8vc3RyZWFtIHBpcGVkIGZyb20gaGVyZS5cbiAgLy90aGlzIGlzIG9ubHkgYSBwcm9ibGVtIGlmIGVuZCBpcyBub3QgZW1pdHRlZCBzeW5jaHJvbm91c2x5LlxuICAvL2EgbmljZXIgd2F5IHRvIGRvIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlIGxhc3QgbGlzdGVuZXIgZm9yICdlbmQnXG5cbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2VcbiAgICBpZighc3RyZWFtLndyaXRhYmxlICYmIHN0cmVhbS5hdXRvRGVzdHJveSlcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpXG4gICAgICB9KVxuICB9KVxuXG4gIGZ1bmN0aW9uIF9lbmQgKCkge1xuICAgIHN0cmVhbS53cml0YWJsZSA9IGZhbHNlXG4gICAgZW5kLmNhbGwoc3RyZWFtKVxuICAgIGlmKCFzdHJlYW0ucmVhZGFibGUgJiYgc3RyZWFtLmF1dG9EZXN0cm95KVxuICAgICAgc3RyZWFtLmRlc3Ryb3koKVxuICB9XG5cbiAgc3RyZWFtLmVuZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgaWYoZW5kZWQpIHJldHVyblxuICAgIGVuZGVkID0gdHJ1ZVxuICAgIGlmKGFyZ3VtZW50cy5sZW5ndGgpIHN0cmVhbS53cml0ZShkYXRhKVxuICAgIF9lbmQoKSAvLyB3aWxsIGVtaXQgb3IgcXVldWVcbiAgICByZXR1cm4gc3RyZWFtXG4gIH1cblxuICBzdHJlYW0uZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZihkZXN0cm95ZWQpIHJldHVyblxuICAgIGRlc3Ryb3llZCA9IHRydWVcbiAgICBlbmRlZCA9IHRydWVcbiAgICBidWZmZXIubGVuZ3RoID0gMFxuICAgIHN0cmVhbS53cml0YWJsZSA9IHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlXG4gICAgc3RyZWFtLmVtaXQoJ2Nsb3NlJylcbiAgICByZXR1cm4gc3RyZWFtXG4gIH1cblxuICBzdHJlYW0ucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYoc3RyZWFtLnBhdXNlZCkgcmV0dXJuXG4gICAgc3RyZWFtLnBhdXNlZCA9IHRydWVcbiAgICByZXR1cm4gc3RyZWFtXG4gIH1cblxuICBzdHJlYW0ucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICAgIGlmKHN0cmVhbS5wYXVzZWQpIHtcbiAgICAgIHN0cmVhbS5wYXVzZWQgPSBmYWxzZVxuICAgICAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpXG4gICAgfVxuICAgIGRyYWluKClcbiAgICAvL21heSBoYXZlIGJlY29tZSBwYXVzZWQgYWdhaW4sXG4gICAgLy9hcyBkcmFpbiBlbWl0cyAnZGF0YScuXG4gICAgaWYoIXN0cmVhbS5wYXVzZWQpXG4gICAgICBzdHJlYW0uZW1pdCgnZHJhaW4nKVxuICAgIHJldHVybiBzdHJlYW1cbiAgfVxuICByZXR1cm4gc3RyZWFtXG59XG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy90aHJvdWdoL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA3MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGJvZHktcGFyc2VyXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGVwcmVjYXRlID0gcmVxdWlyZSgnZGVwZCcpKCdib2R5LXBhcnNlcicpXG5cbi8qKlxuICogQ2FjaGUgb2YgbG9hZGVkIHBhcnNlcnMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBwYXJzZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vKipcbiAqIEB0eXBlZGVmIFBhcnNlcnNcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGpzb25cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHJhd1xuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gdGV4dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gdXJsZW5jb2RlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAdHlwZSB7UGFyc2Vyc31cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBkZXByZWNhdGUuZnVuY3Rpb24oYm9keVBhcnNlcixcbiAgJ2JvZHlQYXJzZXI6IHVzZSBpbmRpdmlkdWFsIGpzb24vdXJsZW5jb2RlZCBtaWRkbGV3YXJlcycpXG5cbi8qKlxuICogSlNPTiBwYXJzZXIuXG4gKiBAcHVibGljXG4gKi9cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdqc29uJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogY3JlYXRlUGFyc2VyR2V0dGVyKCdqc29uJylcbn0pXG5cbi8qKlxuICogUmF3IHBhcnNlci5cbiAqIEBwdWJsaWNcbiAqL1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ3JhdycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGNyZWF0ZVBhcnNlckdldHRlcigncmF3Jylcbn0pXG5cbi8qKlxuICogVGV4dCBwYXJzZXIuXG4gKiBAcHVibGljXG4gKi9cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICd0ZXh0Jywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogY3JlYXRlUGFyc2VyR2V0dGVyKCd0ZXh0Jylcbn0pXG5cbi8qKlxuICogVVJMLWVuY29kZWQgcGFyc2VyLlxuICogQHB1YmxpY1xuICovXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAndXJsZW5jb2RlZCcsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGNyZWF0ZVBhcnNlckdldHRlcigndXJsZW5jb2RlZCcpXG59KVxuXG4vKipcbiAqIENyZWF0ZSBhIG1pZGRsZXdhcmUgdG8gcGFyc2UganNvbiBhbmQgdXJsZW5jb2RlZCBib2RpZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAZGVwcmVjYXRlZFxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGJvZHlQYXJzZXIgKG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSB7fVxuXG4gIC8vIGV4Y2x1ZGUgdHlwZSBvcHRpb25cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBmb3IgKHZhciBwcm9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChwcm9wICE9PSAndHlwZScpIHtcbiAgICAgICAgb3B0c1twcm9wXSA9IG9wdGlvbnNbcHJvcF1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgX3VybGVuY29kZWQgPSBleHBvcnRzLnVybGVuY29kZWQob3B0cylcbiAgdmFyIF9qc29uID0gZXhwb3J0cy5qc29uKG9wdHMpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGJvZHlQYXJzZXIgKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgX2pzb24ocmVxLCByZXMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBuZXh0KGVycilcbiAgICAgIF91cmxlbmNvZGVkKHJlcSwgcmVzLCBuZXh0KVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBnZXR0ZXIgZm9yIGxvYWRpbmcgYSBwYXJzZXIuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVBhcnNlckdldHRlciAobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICByZXR1cm4gbG9hZFBhcnNlcihuYW1lKVxuICB9XG59XG5cbi8qKlxuICogTG9hZCBhIHBhcnNlciBtb2R1bGUuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWRQYXJzZXIgKHBhcnNlck5hbWUpIHtcbiAgdmFyIHBhcnNlciA9IHBhcnNlcnNbcGFyc2VyTmFtZV1cblxuICBpZiAocGFyc2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcGFyc2VyXG4gIH1cblxuICAvLyB0aGlzIHVzZXMgYSBzd2l0Y2ggZm9yIHN0YXRpYyByZXF1aXJlIGFuYWx5c2lzXG4gIHN3aXRjaCAocGFyc2VyTmFtZSkge1xuICAgIGNhc2UgJ2pzb24nOlxuICAgICAgcGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdHlwZXMvanNvbicpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3Jhdyc6XG4gICAgICBwYXJzZXIgPSByZXF1aXJlKCcuL2xpYi90eXBlcy9yYXcnKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd0ZXh0JzpcbiAgICAgIHBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3R5cGVzL3RleHQnKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd1cmxlbmNvZGVkJzpcbiAgICAgIHBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3R5cGVzL3VybGVuY29kZWQnKVxuICAgICAgYnJlYWtcbiAgfVxuXG4gIC8vIHN0b3JlIHRvIHByZXZlbnQgaW52b2tpbmcgcmVxdWlyZSgpXG4gIHJldHVybiAocGFyc2Vyc1twYXJzZXJOYW1lXSA9IHBhcnNlcilcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9ib2R5LXBhcnNlci9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNzFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBkZXBkXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubGF6eVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnY2FsbFNpdGVUb1N0cmluZycsIGZ1bmN0aW9uIGNhbGxTaXRlVG9TdHJpbmcgKCkge1xuICB2YXIgbGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXRcbiAgdmFyIG9iaiA9IHt9XG4gIHZhciBwcmVwID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2VcblxuICBmdW5jdGlvbiBwcmVwYXJlT2JqZWN0U3RhY2tUcmFjZSAob2JqLCBzdGFjaykge1xuICAgIHJldHVybiBzdGFja1xuICB9XG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmVwYXJlT2JqZWN0U3RhY2tUcmFjZVxuICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSAyXG5cbiAgLy8gY2FwdHVyZSB0aGUgc3RhY2tcbiAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uob2JqKVxuXG4gIC8vIHNsaWNlIHRoZSBzdGFja1xuICB2YXIgc3RhY2sgPSBvYmouc3RhY2suc2xpY2UoKVxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJlcFxuICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBsaW1pdFxuXG4gIHJldHVybiBzdGFja1swXS50b1N0cmluZyA/IHRvU3RyaW5nIDogcmVxdWlyZSgnLi9jYWxsc2l0ZS10b3N0cmluZycpXG59KVxuXG5sYXp5UHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdldmVudExpc3RlbmVyQ291bnQnLCBmdW5jdGlvbiBldmVudExpc3RlbmVyQ291bnQgKCkge1xuICByZXR1cm4gRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgfHwgcmVxdWlyZSgnLi9ldmVudC1saXN0ZW5lci1jb3VudCcpXG59KVxuXG4vKipcbiAqIERlZmluZSBhIGxhenkgcHJvcGVydHkuXG4gKi9cblxuZnVuY3Rpb24gbGF6eVByb3BlcnR5IChvYmosIHByb3AsIGdldHRlcikge1xuICBmdW5jdGlvbiBnZXQgKCkge1xuICAgIHZhciB2YWwgPSBnZXR0ZXIoKVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiB2YWxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHZhbFxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZ2V0XG4gIH0pXG59XG5cbi8qKlxuICogQ2FsbCB0b1N0cmluZygpIG9uIHRoZSBvYmpcbiAqL1xuXG5mdW5jdGlvbiB0b1N0cmluZyAob2JqKSB7XG4gIHJldHVybiBvYmoudG9TdHJpbmcoKVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2RlcGQvbGliL2NvbXBhdC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidHJ5IHtcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG4gIGlmICh0eXBlb2YgdXRpbC5pbmhlcml0cyAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgJyc7XG4gIG1vZHVsZS5leHBvcnRzID0gdXRpbC5pbmhlcml0cztcbn0gY2F0Y2ggKGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2luaGVyaXRzX2Jyb3dzZXIuanMnKTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0cy5qc1xuLy8gbW9kdWxlIGlkID0gNzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWdbJ2RlZmF1bHQnXSA9IGNyZWF0ZURlYnVnO1xuZXhwb3J0cy5jb2VyY2UgPSBjb2VyY2U7XG5leHBvcnRzLmRpc2FibGUgPSBkaXNhYmxlO1xuZXhwb3J0cy5lbmFibGUgPSBlbmFibGU7XG5leHBvcnRzLmVuYWJsZWQgPSBlbmFibGVkO1xuZXhwb3J0cy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cbi8qKlxuICogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG4gKi9cblxuZXhwb3J0cy5uYW1lcyA9IFtdO1xuZXhwb3J0cy5za2lwcyA9IFtdO1xuXG4vKipcbiAqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cbiAqXG4gKiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzID0ge307XG5cbi8qKlxuICogUHJldmlvdXMgbG9nIHRpbWVzdGFtcC5cbiAqL1xuXG52YXIgcHJldlRpbWU7XG5cbi8qKlxuICogU2VsZWN0IGEgY29sb3IuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzZWxlY3RDb2xvcihuYW1lc3BhY2UpIHtcbiAgdmFyIGhhc2ggPSAwLCBpO1xuXG4gIGZvciAoaSBpbiBuYW1lc3BhY2UpIHtcbiAgICBoYXNoICA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgbmFtZXNwYWNlLmNoYXJDb2RlQXQoaSk7XG4gICAgaGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGV4cG9ydHMuY29sb3JzLmxlbmd0aF07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuXG4gIGZ1bmN0aW9uIGRlYnVnKCkge1xuICAgIC8vIGRpc2FibGVkP1xuICAgIGlmICghZGVidWcuZW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgdmFyIHNlbGYgPSBkZWJ1ZztcblxuICAgIC8vIHNldCBgZGlmZmAgdGltZXN0YW1wXG4gICAgdmFyIGN1cnIgPSArbmV3IERhdGUoKTtcbiAgICB2YXIgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuICAgIHNlbGYuZGlmZiA9IG1zO1xuICAgIHNlbGYucHJldiA9IHByZXZUaW1lO1xuICAgIHNlbGYuY3VyciA9IGN1cnI7XG4gICAgcHJldlRpbWUgPSBjdXJyO1xuXG4gICAgLy8gdHVybiB0aGUgYGFyZ3VtZW50c2AgaW50byBhIHByb3BlciBBcnJheVxuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBhcmdzWzBdID0gZXhwb3J0cy5jb2VyY2UoYXJnc1swXSk7XG5cbiAgICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBhcmdzWzBdKSB7XG4gICAgICAvLyBhbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuICAgICAgYXJncy51bnNoaWZ0KCclTycpO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgZnVuY3Rpb24obWF0Y2gsIGZvcm1hdCkge1xuICAgICAgLy8gaWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuICAgICAgaWYgKG1hdGNoID09PSAnJSUnKSByZXR1cm4gbWF0Y2g7XG4gICAgICBpbmRleCsrO1xuICAgICAgdmFyIGZvcm1hdHRlciA9IGV4cG9ydHMuZm9ybWF0dGVyc1tmb3JtYXRdO1xuICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBmb3JtYXR0ZXIpIHtcbiAgICAgICAgdmFyIHZhbCA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICBtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cbiAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuICAgICAgICBhcmdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGluZGV4LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG5cbiAgICAvLyBhcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuICAgIGV4cG9ydHMuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG4gICAgdmFyIGxvZ0ZuID0gZGVidWcubG9nIHx8IGV4cG9ydHMubG9nIHx8IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XG4gICAgbG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gIH1cblxuICBkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG4gIGRlYnVnLmVuYWJsZWQgPSBleHBvcnRzLmVuYWJsZWQobmFtZXNwYWNlKTtcbiAgZGVidWcudXNlQ29sb3JzID0gZXhwb3J0cy51c2VDb2xvcnMoKTtcbiAgZGVidWcuY29sb3IgPSBzZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXG4gIC8vIGVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZXhwb3J0cy5pbml0KSB7XG4gICAgZXhwb3J0cy5pbml0KGRlYnVnKTtcbiAgfVxuXG4gIHJldHVybiBkZWJ1Zztcbn1cblxuLyoqXG4gKiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG4gKiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gIGV4cG9ydHMuc2F2ZShuYW1lc3BhY2VzKTtcblxuICBleHBvcnRzLm5hbWVzID0gW107XG4gIGV4cG9ydHMuc2tpcHMgPSBbXTtcblxuICB2YXIgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuICB2YXIgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoIXNwbGl0W2ldKSBjb250aW51ZTsgLy8gaWdub3JlIGVtcHR5IHN0cmluZ3NcbiAgICBuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcbiAgICBpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG4gICAgICBleHBvcnRzLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnN1YnN0cigxKSArICckJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkaXNhYmxlKCkge1xuICBleHBvcnRzLmVuYWJsZSgnJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcbiAgdmFyIGksIGxlbjtcbiAgZm9yIChpID0gMCwgbGVuID0gZXhwb3J0cy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChleHBvcnRzLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZm9yIChpID0gMCwgbGVuID0gZXhwb3J0cy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChleHBvcnRzLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29lcmNlIGB2YWxgLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICogQHJldHVybiB7TWl4ZWR9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb2VyY2UodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcbiAgcmV0dXJuIHZhbDtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvZGVidWcuanNcbi8vIG1vZHVsZSBpZCA9IDc0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigoPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIGlmIChtcyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtcyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICByZXR1cm4gcGx1cmFsKG1zLCBkLCAnZGF5JykgfHxcbiAgICBwbHVyYWwobXMsIGgsICdob3VyJykgfHxcbiAgICBwbHVyYWwobXMsIG0sICdtaW51dGUnKSB8fFxuICAgIHBsdXJhbChtcywgcywgJ3NlY29uZCcpIHx8XG4gICAgbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG4sIG5hbWUpIHtcbiAgaWYgKG1zIDwgbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobXMgPCBuICogMS41KSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IobXMgLyBuKSArICcgJyArIG5hbWU7XG4gIH1cbiAgcmV0dXJuIE1hdGguY2VpbChtcyAvIG4pICsgJyAnICsgbmFtZSArICdzJztcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV0XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwibmV0XCJcbi8vIG1vZHVsZSBpZCA9IDc2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogZGVwZFxuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmxhenlQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ2NhbGxTaXRlVG9TdHJpbmcnLCBmdW5jdGlvbiBjYWxsU2l0ZVRvU3RyaW5nICgpIHtcbiAgdmFyIGxpbWl0ID0gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0XG4gIHZhciBvYmogPSB7fVxuICB2YXIgcHJlcCA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlXG5cbiAgZnVuY3Rpb24gcHJlcGFyZU9iamVjdFN0YWNrVHJhY2UgKG9iaiwgc3RhY2spIHtcbiAgICByZXR1cm4gc3RhY2tcbiAgfVxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJlcGFyZU9iamVjdFN0YWNrVHJhY2VcbiAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gMlxuXG4gIC8vIGNhcHR1cmUgdGhlIHN0YWNrXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG9iailcblxuICAvLyBzbGljZSB0aGUgc3RhY2tcbiAgdmFyIHN0YWNrID0gb2JqLnN0YWNrLnNsaWNlKClcblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXBcbiAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gbGltaXRcblxuICByZXR1cm4gc3RhY2tbMF0udG9TdHJpbmcgPyB0b1N0cmluZyA6IHJlcXVpcmUoJy4vY2FsbHNpdGUtdG9zdHJpbmcnKVxufSlcblxubGF6eVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnZXZlbnRMaXN0ZW5lckNvdW50JywgZnVuY3Rpb24gZXZlbnRMaXN0ZW5lckNvdW50ICgpIHtcbiAgcmV0dXJuIEV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50IHx8IHJlcXVpcmUoJy4vZXZlbnQtbGlzdGVuZXItY291bnQnKVxufSlcblxuLyoqXG4gKiBEZWZpbmUgYSBsYXp5IHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGxhenlQcm9wZXJ0eSAob2JqLCBwcm9wLCBnZXR0ZXIpIHtcbiAgZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICB2YXIgdmFsID0gZ2V0dGVyKClcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogdmFsXG4gICAgfSlcblxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGdldFxuICB9KVxufVxuXG4vKipcbiAqIENhbGwgdG9TdHJpbmcoKSBvbiB0aGUgb2JqXG4gKi9cblxuZnVuY3Rpb24gdG9TdHJpbmcgKG9iaikge1xuICByZXR1cm4gb2JqLnRvU3RyaW5nKClcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvZGVwZC9saWIvY29tcGF0L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA3N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gU29tZSBlbnZpcm9ubWVudHMgZG9uJ3QgaGF2ZSBnbG9iYWwgQnVmZmVyIChlLmcuIFJlYWN0IE5hdGl2ZSkuXG4vLyBTb2x1dGlvbiB3b3VsZCBiZSBpbnN0YWxsaW5nIG5wbSBtb2R1bGVzIFwiYnVmZmVyXCIgYW5kIFwic3RyZWFtXCIgZXhwbGljaXRseS5cbnZhciBCdWZmZXIgPSByZXF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcjtcblxudmFyIGJvbUhhbmRsaW5nID0gcmVxdWlyZShcIi4vYm9tLWhhbmRsaW5nXCIpLFxuICAgIGljb252ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8vIEFsbCBjb2RlY3MgYW5kIGFsaWFzZXMgYXJlIGtlcHQgaGVyZSwga2V5ZWQgYnkgZW5jb2RpbmcgbmFtZS9hbGlhcy5cbi8vIFRoZXkgYXJlIGxhenkgbG9hZGVkIGluIGBpY29udi5nZXRDb2RlY2AgZnJvbSBgZW5jb2RpbmdzL2luZGV4LmpzYC5cbmljb252LmVuY29kaW5ncyA9IG51bGw7XG5cbi8vIENoYXJhY3RlcnMgZW1pdHRlZCBpbiBjYXNlIG9mIGVycm9yLlxuaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlID0gJ++/vSc7XG5pY29udi5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUgPSAnPyc7XG5cbi8vIFB1YmxpYyBBUEkuXG5pY29udi5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBlbmNvZGluZywgb3B0aW9ucykge1xuICAgIHN0ciA9IFwiXCIgKyAoc3RyIHx8IFwiXCIpOyAvLyBFbnN1cmUgc3RyaW5nLlxuXG4gICAgdmFyIGVuY29kZXIgPSBpY29udi5nZXRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKTtcblxuICAgIHZhciByZXMgPSBlbmNvZGVyLndyaXRlKHN0cik7XG4gICAgdmFyIHRyYWlsID0gZW5jb2Rlci5lbmQoKTtcbiAgICBcbiAgICByZXR1cm4gKHRyYWlsICYmIHRyYWlsLmxlbmd0aCA+IDApID8gQnVmZmVyLmNvbmNhdChbcmVzLCB0cmFpbF0pIDogcmVzO1xufVxuXG5pY29udi5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoYnVmLCBlbmNvZGluZywgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgYnVmID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoIWljb252LnNraXBEZWNvZGVXYXJuaW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJY29udi1saXRlIHdhcm5pbmc6IGRlY29kZSgpLWluZyBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuIFJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Vc2UtQnVmZmVycy13aGVuLWRlY29kaW5nJyk7XG4gICAgICAgICAgICBpY29udi5za2lwRGVjb2RlV2FybmluZyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBidWYgPSBuZXcgQnVmZmVyKFwiXCIgKyAoYnVmIHx8IFwiXCIpLCBcImJpbmFyeVwiKTsgLy8gRW5zdXJlIGJ1ZmZlci5cbiAgICB9XG5cbiAgICB2YXIgZGVjb2RlciA9IGljb252LmdldERlY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpO1xuXG4gICAgdmFyIHJlcyA9IGRlY29kZXIud3JpdGUoYnVmKTtcbiAgICB2YXIgdHJhaWwgPSBkZWNvZGVyLmVuZCgpO1xuXG4gICAgcmV0dXJuIHRyYWlsID8gKHJlcyArIHRyYWlsKSA6IHJlcztcbn1cblxuaWNvbnYuZW5jb2RpbmdFeGlzdHMgPSBmdW5jdGlvbiBlbmNvZGluZ0V4aXN0cyhlbmMpIHtcbiAgICB0cnkge1xuICAgICAgICBpY29udi5nZXRDb2RlYyhlbmMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8vIExlZ2FjeSBhbGlhc2VzIHRvIGNvbnZlcnQgZnVuY3Rpb25zXG5pY29udi50b0VuY29kaW5nID0gaWNvbnYuZW5jb2RlO1xuaWNvbnYuZnJvbUVuY29kaW5nID0gaWNvbnYuZGVjb2RlO1xuXG4vLyBTZWFyY2ggZm9yIGEgY29kZWMgaW4gaWNvbnYuZW5jb2RpbmdzLiBDYWNoZSBjb2RlYyBkYXRhIGluIGljb252Ll9jb2RlY0RhdGFDYWNoZS5cbmljb252Ll9jb2RlY0RhdGFDYWNoZSA9IHt9O1xuaWNvbnYuZ2V0Q29kZWMgPSBmdW5jdGlvbiBnZXRDb2RlYyhlbmNvZGluZykge1xuICAgIGlmICghaWNvbnYuZW5jb2RpbmdzKVxuICAgICAgICBpY29udi5lbmNvZGluZ3MgPSByZXF1aXJlKFwiLi4vZW5jb2RpbmdzXCIpOyAvLyBMYXp5IGxvYWQgYWxsIGVuY29kaW5nIGRlZmluaXRpb25zLlxuICAgIFxuICAgIC8vIENhbm9uaWNhbGl6ZSBlbmNvZGluZyBuYW1lOiBzdHJpcCBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFycyBhbmQgYXBwZW5kZWQgeWVhci5cbiAgICB2YXIgZW5jID0gKCcnK2VuY29kaW5nKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teMC05YS16XXw6XFxkezR9JC9nLCBcIlwiKTtcblxuICAgIC8vIFRyYXZlcnNlIGljb252LmVuY29kaW5ncyB0byBmaW5kIGFjdHVhbCBjb2RlYy5cbiAgICB2YXIgY29kZWNPcHRpb25zID0ge307XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGNvZGVjID0gaWNvbnYuX2NvZGVjRGF0YUNhY2hlW2VuY107XG4gICAgICAgIGlmIChjb2RlYylcbiAgICAgICAgICAgIHJldHVybiBjb2RlYztcblxuICAgICAgICB2YXIgY29kZWNEZWYgPSBpY29udi5lbmNvZGluZ3NbZW5jXTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBjb2RlY0RlZikge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiAvLyBEaXJlY3QgYWxpYXMgdG8gb3RoZXIgZW5jb2RpbmcuXG4gICAgICAgICAgICAgICAgZW5jID0gY29kZWNEZWY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjogLy8gQWxpYXMgd2l0aCBvcHRpb25zLiBDYW4gYmUgbGF5ZXJlZC5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gY29kZWNEZWYpXG4gICAgICAgICAgICAgICAgICAgIGNvZGVjT3B0aW9uc1trZXldID0gY29kZWNEZWZba2V5XTtcblxuICAgICAgICAgICAgICAgIGlmICghY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSA9IGVuYztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBlbmMgPSBjb2RlY0RlZi50eXBlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjogLy8gQ29kZWMgaXRzZWxmLlxuICAgICAgICAgICAgICAgIGlmICghY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSA9IGVuYztcblxuICAgICAgICAgICAgICAgIC8vIFRoZSBjb2RlYyBmdW5jdGlvbiBtdXN0IGxvYWQgYWxsIHRhYmxlcyBhbmQgcmV0dXJuIG9iamVjdCB3aXRoIC5lbmNvZGVyIGFuZCAuZGVjb2RlciBtZXRob2RzLlxuICAgICAgICAgICAgICAgIC8vIEl0J2xsIGJlIGNhbGxlZCBvbmx5IG9uY2UgKGZvciBlYWNoIGRpZmZlcmVudCBvcHRpb25zIG9iamVjdCkuXG4gICAgICAgICAgICAgICAgY29kZWMgPSBuZXcgY29kZWNEZWYoY29kZWNPcHRpb25zLCBpY29udik7XG5cbiAgICAgICAgICAgICAgICBpY29udi5fY29kZWNEYXRhQ2FjaGVbY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZV0gPSBjb2RlYzsgLy8gU2F2ZSBpdCB0byBiZSByZXVzZWQgbGF0ZXIuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVjO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVuY29kaW5nIG5vdCByZWNvZ25pemVkOiAnXCIgKyBlbmNvZGluZyArIFwiJyAoc2VhcmNoZWQgYXM6ICdcIitlbmMrXCInKVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuaWNvbnYuZ2V0RW5jb2RlciA9IGZ1bmN0aW9uIGdldEVuY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29kZWMgPSBpY29udi5nZXRDb2RlYyhlbmNvZGluZyksXG4gICAgICAgIGVuY29kZXIgPSBuZXcgY29kZWMuZW5jb2RlcihvcHRpb25zLCBjb2RlYyk7XG5cbiAgICBpZiAoY29kZWMuYm9tQXdhcmUgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmFkZEJPTSlcbiAgICAgICAgZW5jb2RlciA9IG5ldyBib21IYW5kbGluZy5QcmVwZW5kQk9NKGVuY29kZXIsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGVuY29kZXI7XG59XG5cbmljb252LmdldERlY29kZXIgPSBmdW5jdGlvbiBnZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgdmFyIGNvZGVjID0gaWNvbnYuZ2V0Q29kZWMoZW5jb2RpbmcpLFxuICAgICAgICBkZWNvZGVyID0gbmV3IGNvZGVjLmRlY29kZXIob3B0aW9ucywgY29kZWMpO1xuXG4gICAgaWYgKGNvZGVjLmJvbUF3YXJlICYmICEob3B0aW9ucyAmJiBvcHRpb25zLnN0cmlwQk9NID09PSBmYWxzZSkpXG4gICAgICAgIGRlY29kZXIgPSBuZXcgYm9tSGFuZGxpbmcuU3RyaXBCT00oZGVjb2Rlciwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVjb2Rlcjtcbn1cblxuXG4vLyBMb2FkIGV4dGVuc2lvbnMgaW4gTm9kZS4gQWxsIG9mIHRoZW0gYXJlIG9taXR0ZWQgaW4gQnJvd3NlcmlmeSBidWlsZCB2aWEgJ2Jyb3dzZXInIGZpZWxkIGluIHBhY2thZ2UuanNvbi5cbnZhciBub2RlVmVyID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xuaWYgKG5vZGVWZXIpIHtcblxuICAgIC8vIExvYWQgc3RyZWFtaW5nIHN1cHBvcnQgaW4gTm9kZSB2MC4xMCtcbiAgICB2YXIgbm9kZVZlckFyciA9IG5vZGVWZXIuc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xuICAgIGlmIChub2RlVmVyQXJyWzBdID4gMCB8fCBub2RlVmVyQXJyWzFdID49IDEwKSB7XG4gICAgICAgIHJlcXVpcmUoXCIuL3N0cmVhbXNcIikoaWNvbnYpO1xuICAgIH1cblxuICAgIC8vIExvYWQgTm9kZSBwcmltaXRpdmUgZXh0ZW5zaW9ucy5cbiAgICByZXF1aXJlKFwiLi9leHRlbmQtbm9kZVwiKShpY29udik7XG59XG5cbmlmIChcIsSAXCIgIT0gXCJcXHUwMTAwXCIpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiaWNvbnYtbGl0ZSB3YXJuaW5nOiBqYXZhc2NyaXB0IGZpbGVzIHVzZSBlbmNvZGluZyBkaWZmZXJlbnQgZnJvbSB1dGYtOC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9KYXZhc2NyaXB0LXNvdXJjZS1maWxlLWVuY29kaW5ncyBmb3IgbW9yZSBpbmZvLlwiKTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3RyaW5nX2RlY29kZXJcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJzdHJpbmdfZGVjb2RlclwiXG4vLyBtb2R1bGUgaWQgPSA3OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFtbXCJhMTQwXCIsXCLuk4ZcIiw2Ml0sW1wiYTE4MFwiLFwi7pSFXCIsMzJdLFtcImEyNDBcIixcIu6UplwiLDYyXSxbXCJhMjgwXCIsXCLulaVcIiwzMl0sW1wiYTJhYlwiLFwi7p2mXCIsNV0sW1wiYTJlM1wiLFwi4oKs7p2tXCJdLFtcImEyZWZcIixcIu6dru6dr1wiXSxbXCJhMmZkXCIsXCLunbDunbFcIl0sW1wiYTM0MFwiLFwi7paGXCIsNjJdLFtcImEzODBcIixcIu6XhVwiLDMxLFwi44CAXCJdLFtcImE0NDBcIixcIu6XplwiLDYyXSxbXCJhNDgwXCIsXCLumKVcIiwzMl0sW1wiYTRmNFwiLFwi7p2yXCIsMTBdLFtcImE1NDBcIixcIu6ZhlwiLDYyXSxbXCJhNTgwXCIsXCLumoVcIiwzMl0sW1wiYTVmN1wiLFwi7p29XCIsN10sW1wiYTY0MFwiLFwi7pqmXCIsNjJdLFtcImE2ODBcIixcIu6bpVwiLDMyXSxbXCJhNmI5XCIsXCLunoVcIiw3XSxbXCJhNmQ5XCIsXCLuno1cIiw2XSxbXCJhNmVjXCIsXCLunpTunpVcIl0sW1wiYTZmM1wiLFwi7p6WXCJdLFtcImE2ZjZcIixcIu6el1wiLDhdLFtcImE3NDBcIixcIu6chlwiLDYyXSxbXCJhNzgwXCIsXCLunYVcIiwzMl0sW1wiYTdjMlwiLFwi7p6gXCIsMTRdLFtcImE3ZjJcIixcIu6er1wiLDEyXSxbXCJhODk2XCIsXCLunrxcIiwxMF0sW1wiYThiY1wiLFwi7p+HXCJdLFtcImE4YmZcIixcIse5XCJdLFtcImE4YzFcIixcIu6fie6fiu6fi+6fjFwiXSxbXCJhOGVhXCIsXCLun41cIiwyMF0sW1wiYTk1OFwiLFwi7p+iXCJdLFtcImE5NWJcIixcIu6fo1wiXSxbXCJhOTVkXCIsXCLun6Tun6Xun6ZcIl0sW1wiYTk4OVwiLFwi44C+4r+wXCIsMTFdLFtcImE5OTdcIixcIu6ftFwiLDEyXSxbXCJhOWYwXCIsXCLuoIFcIiwxNF0sW1wiYWFhMVwiLFwi7oCAXCIsOTNdLFtcImFiYTFcIixcIu6BnlwiLDkzXSxbXCJhY2ExXCIsXCLugrxcIiw5M10sW1wiYWRhMVwiLFwi7oSaXCIsOTNdLFtcImFlYTFcIixcIu6FuFwiLDkzXSxbXCJhZmExXCIsXCLuh5ZcIiw5M10sW1wiZDdmYVwiLFwi7qCQXCIsNF0sW1wiZjhhMVwiLFwi7oi0XCIsOTNdLFtcImY5YTFcIixcIu6KklwiLDkzXSxbXCJmYWExXCIsXCLui7BcIiw5M10sW1wiZmJhMVwiLFwi7o2OXCIsOTNdLFtcImZjYTFcIixcIu6OrFwiLDkzXSxbXCJmZGExXCIsXCLukIpcIiw5M10sW1wiZmU1MFwiLFwi4rqB7qCW7qCX7qCY4rqE45Gz45GH4rqI4rqL7qCe45ae45ia45iO4rqM4rqX46Wu46SY7qCm46eP46ef46mz46eQ7qCr7qCs462O47Gu47Og4rqn7qCx7qCy4rqq5IGW5IWf4rqu5Iy34rqz4rq24rq37qC75I6x5I6s4rq75I+d5JOW5Jmh5JmM7qGDXCJdLFtcImZlODBcIixcIuSco+ScqeSdvOSejeK7iuSlh+SluuSlveSmguSmg+SmheSmhuSmn+Smm+Smt+Smtu6hlO6hleSyo+Syn+SyoOSyoeSxt+SyouS0k1wiLDYsXCLktq7uoaTukahcIiw5M11dXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9nYmstYWRkZWQuanNvblxuLy8gbW9kdWxlIGlkID0gODBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBbW1wiMFwiLFwiXFx1MDAwMFwiLDEyN10sW1wiYTE0MFwiLFwi44CA77yM44CB44CC77yO4oCn77yb77ya77yf77yB77iw4oCm4oCl77mQ77mR77mSwrfvuZTvuZXvuZbvuZfvvZzigJPvuLHigJTvuLPilbTvuLTvuY/vvIjvvInvuLXvuLbvvZvvvZ3vuLfvuLjjgJTjgJXvuLnvuLrjgJDjgJHvuLvvuLzjgIrjgIvvuL3vuL7jgIjjgInvuL/vuYDjgIzjgI3vuYHvuYLjgI7jgI/vuYPvuYTvuZnvuZpcIl0sW1wiYTFhMVwiLFwi77mb77mc77md77me4oCY4oCZ4oCc4oCd44Cd44Ce4oC14oCy77yD77yG77yK4oC7wqfjgIPil4vil4/ilrPilrLil47imIbimIXil4fil4bilqHilqDilr3ilrzjiqPihIXCr++/o++8v8uN77mJ77mK77mN77mO77mL77mM77mf77mg77mh77yL77yNw5fDt8Kx4oia77yc77ye77yd4omm4omn4omg4oie4omS4omh77miXCIsNCxcIu+9nuKIqeKIquKKpeKIoOKIn+KKv+OPkuOPkeKIq+KIruKIteKItOKZgOKZguKKleKKmeKGkeKGk+KGkOKGkuKGluKGl+KGmeKGmOKIpeKIo++8j1wiXSxbXCJhMjQwXCIsXCLvvLziiJXvuajvvITvv6XjgJLvv6Dvv6HvvIXvvKDihIPihInvuanvuarvuavjj5Xjjpzjjp3jjp7jj47jjqHjjo7jjo/jj4TCsOWFmeWFm+WFnuWFneWFoeWFo+WXp+eTqeezjuKWgVwiLDcsXCLilo/ilo7ilo3ilozilovilorilonilLzilLTilKzilKTilJzilpTilIDilILilpXilIzilJDilJTilJjila1cIl0sW1wiYTJhMVwiLFwi4pWu4pWw4pWv4pWQ4pWe4pWq4pWh4pei4pej4pel4pek4pWx4pWy4pWz77yQXCIsOSxcIuKFoFwiLDksXCLjgKFcIiw4LFwi5Y2B5Y2E5Y2F77yhXCIsMjUsXCLvvYFcIiwyMV0sW1wiYTM0MFwiLFwi772X772Y772Z772azpFcIiwxNixcIs6jXCIsNixcIs6xXCIsMTYsXCLPg1wiLDYsXCLjhIVcIiwxMF0sW1wiYTNhMVwiLFwi44SQXCIsMjUsXCLLmcuJy4rLh8uLXCJdLFtcImEzZTFcIixcIuKCrFwiXSxbXCJhNDQwXCIsXCLkuIDkuZnkuIHkuIPkuYPkuZ3kuobkuozkurrlhL/lhaXlhavlh6DliIDliIHlipvljJXljYHljZzlj4jkuInkuIvkuIjkuIrkuKvkuLjlh6HkuYXkuYjkuZ/kuZ7kuo7kuqHlhYDliIPli7rljYPlj4nlj6PlnJ/lo6vlpJXlpKflpbPlrZDlrZHlrZPlr7jlsI/lsKLlsLjlsbHlt53lt6Xlt7Hlt7Llt7Plt77lubLlu77lvIvlvJPmiY1cIl0sW1wiYTRhMVwiLFwi5LiR5LiQ5LiN5Lit5Liw5Li55LmL5bC55LqI5LqR5LqV5LqS5LqU5Lqi5LuB5LuA5LuD5LuG5LuH5LuN5LuK5LuL5LuE5YWD5YWB5YWn5YWt5YWu5YWs5YaX5Ye25YiG5YiH5YiI5Yu75Yu+5Yu/5YyW5Yy55Y2I5Y2H5Y2F5Y2e5Y6E5Y+L5Y+K5Y+N5aOs5aSp5aSr5aSq5aSt5a2U5bCR5bCk5bC65bGv5be05bm75bu/5byU5byV5b+D5oiI5oi25omL5omO5pSv5paH5paX5pak5pa55pel5puw5pyI5pyo5qyg5q2i5q255q+L5q+U5q+b5rCP5rC054Gr54iq54i254i754mH54mZ54mb54qs546L5LiZXCJdLFtcImE1NDBcIixcIuS4luS4leS4lOS4mOS4u+S5jeS5j+S5juS7peS7mOS7lOS7leS7luS7l+S7o+S7pOS7meS7nuWFheWFhOWGieWGiuWGrOWHueWHuuWHuOWIiuWKoOWKn+WMheWMhuWMl+WMneS7n+WNiuWNieWNoeWNoOWNr+WNruWOu+WPr+WPpOWPs+WPrOWPruWPqeWPqOWPvOWPuOWPteWPq+WPpuWPquWPsuWPseWPsOWPpeWPreWPu+Wbm+WbmuWkllwiXSxbXCJhNWExXCIsXCLlpK7lpLHlpbTlpbblrZXlroPlsLzlt6jlt6flt6bluILluIPlubPlubzlvIHlvJjlvJflv4XmiIrmiZPmiZTmiZLmiZHmlqXml6bmnK7mnKzmnKrmnKvmnK3mraPmr43msJHmsJDmsLjmsYHmsYDmsL7niq/njoTnjonnk5znk6bnlJjnlJ/nlKjnlKnnlLDnlLHnlLLnlLPnlovnmb3nmq7nmr/nm67nn5vnn6Lnn7PnpLrnpr7nqbTnq4vkuJ7kuJ/kuZLkuZPkuankupnkuqTkuqbkuqXku7/kvInkvJnkvIrkvJXkvI3kvJDkvJHkvI/ku7Lku7bku7vku7Dku7Pku73kvIHkvIvlhYnlhYflhYblhYjlhahcIl0sW1wiYTY0MFwiLFwi5YWx5YaN5Yaw5YiX5YiR5YiS5YiO5YiW5Yqj5YyI5Yyh5Yyg5Y2w5Y2x5ZCJ5ZCP5ZCM5ZCK5ZCQ5ZCB5ZCL5ZCE5ZCR5ZCN5ZCI5ZCD5ZCO5ZCG5ZCS5Zug5Zue5Zud5Zyz5Zyw5Zyo5Zyt5Zys5Zyv5Zyp5aSZ5aSa5aS35aS45aaE5aW45aaD5aW95aW55aaC5aaB5a2X5a2Y5a6H5a6I5a6F5a6J5a+65bCW5bG55bee5biG5bm25bm0XCJdLFtcImE2YTFcIixcIuW8j+W8m+W/meW/luaIjuaIjOaIjeaIkOaJo+aJm+aJmOaUtuaXqeaXqOaXrOaXreabsuabs+acieacveactOacseacteasoeatpOatu+awluaxneaxl+axmeaxn+axoOaxkOaxleaxoeaxm+axjeaxjueBsOeJn+eJneeZvuerueexs+ezuOe8tue+iue+veiAgeiAg+iAjOiAkuiAs+iBv+iCieiCi+iCjOiHo+iHquiHs+iHvOiIjOiIm+iIn+iJruiJsuiJvuiZq+ihgOihjOiho+ilv+mYoeS4suS6qOS9jeS9j+S9h+S9l+S9nuS8tOS9m+S9leS8sOS9kOS9keS8veS8uuS8uOS9g+S9lOS8vOS9huS9o1wiXSxbXCJhNzQwXCIsXCLkvZzkvaDkvK/kvY7kvLbkvZnkvZ3kvYjkvZrlhYzlhYvlhY3lhbXlhrblhrfliKXliKTliKnliKrliKjliqvliqnliqrliqzljKPljbPljbXlkJ3lkK3lkJ7lkL7lkKblkY7lkKflkYblkYPlkLPlkYjlkYLlkJvlkKnlkYrlkLnlkLvlkLjlkK7lkLXlkLblkKDlkLzlkYDlkLHlkKvlkJ/lkKzlm6rlm7Dlm6Tlm6vlnYrlnZHlnYDlnY1cIl0sW1wiYTdhMVwiLFwi5Z2H5Z2O5Zy+5Z2Q5Z2P5Zy75aOv5aS+5aad5aaS5aao5aae5aaj5aaZ5aaW5aaN5aak5aaT5aaK5aal5a2d5a2c5a2a5a2b5a6M5a6L5a6P5bCs5bGA5bGB5bC/5bC+5bKQ5bKR5bKU5bKM5ber5biM5bqP5bqH5bqK5bu35byE5byf5b2k5b2i5b235b255b+Y5b+M5b+X5b+N5b+x5b+r5b+45b+q5oiS5oiR5oqE5oqX5oqW5oqA5om25oqJ5omt5oqK5om85om+5om55omz5oqS5omv5oqY5omu5oqV5oqT5oqR5oqG5pS55pS75pS45pex5pu05p2f5p2O5p2P5p2Q5p2R5p2c5p2W5p2e5p2J5p2G5p2gXCJdLFtcImE4NDBcIixcIuadk+adl+atpeavj+axguaxnuaymeaygeayiOayieayheaym+axquaxuuaykOaxsOayjOaxqOayluaykuaxveayg+axsuaxvuaxtOayhuaxtuayjeaylOaymOaygueBtueBvOeBveeBuOeJoueJoeeJoOeLhOeLgueOlueUrOeUq+eUt+eUuOeaguebr+efo+engeengOemv+eptuezu+e9leiCluiCk+iCneiCmOiCm+iCmuiCsuiJr+iKklwiXSxbXCJhOGExXCIsXCLoiovoio3opovop5LoqIDosLfosYbosZXosp3otaTotbDotrPouqvou4rovpvovrDov4Lov4bov4Xov4Tlt6HpgpHpgqLpgqrpgqbpgqPphYnph4bph4zpmLLpmK7pmLHpmKrpmKzkuKbkuZbkubPkuovkupvkup7kuqvkuqzkva/kvp3kvo3kvbPkvb/kvazkvpvkvovkvobkvoPkvbDkvbXkvojkvankvbvkvpbkvb7kvo/kvpHkvbrlhZTlhZLlhZXlhanlhbflhbblhbjlhr3lh73liLvliLjliLfliLrliLDliK7liLbliYHlir7lirvljZLljZTljZPljZHljabljbfljbjljbnlj5blj5Tlj5flkbPlkbVcIl0sW1wiYTk0MFwiLFwi5ZKW5ZG45ZKV5ZKA5ZG75ZG35ZKE5ZKS5ZKG5ZG85ZKQ5ZGx5ZG25ZKM5ZKa5ZGi5ZGo5ZKL5ZG95ZKO5Zu65Z6D5Z235Z2q5Z2p5Z2h5Z2m5Z2k5Z285aSc5aWJ5aWH5aWI5aWE5aWU5aa+5aa75aeU5aa55aau5aeR5aeG5aeQ5aeN5aeL5aeT5aeK5aav5aaz5aeS5aeF5a2f5a2k5a2j5a6X5a6a5a6Y5a6c5a6Z5a6b5bCa5bGI5bGFXCJdLFtcImE5YTFcIixcIuWxhuWyt+WyoeWyuOWyqeWyq+WyseWys+W4mOW4muW4luW4leW4m+W4keW5uOW6muW6l+W6nOW6leW6luW7tuW8puW8p+W8qeW+gOW+geW9v+W9vOW/neW/oOW/veW/teW/v+aAj+aAlOaAr+aAteaAluaAquaAleaAoeaAp+aAqeaAq+aAm+aIluaIleaIv+aIvuaJgOaJv+aLieaLjOaLhOaKv+aLguaKueaLkuaLm+aKq+aLk+aLlOaLi+aLiOaKqOaKveaKvOaLkOaLmeaLh+aLjeaKteaLmuaKseaLmOaLluaLl+aLhuaKrOaLjuaUvuaWp+aWvOaXuuaYlOaYk+aYjOaYhuaYguaYjuaYgOaYj+aYleaYilwiXSxbXCJhYTQwXCIsXCLmmIfmnI3mnIvmna3mnovmnpXmnbHmnpzmnbPmnbfmnofmnp3mnpfmna/mnbDmnb/mnonmnb7mnpDmnbXmnprmnpPmnbzmnarmnbLmrKPmrabmrafmrb/msJPmsJvms6Pms6jms7PmsrHms4zms6XmsrPmsr3msr7msrzms6Lmsqvms5Xms5Pmsrjms4Tmsrnms4Hmsq7ms5fms4Xms7Hmsr/msrvms6Hms5vms4rmsqzms6/ms5zms5bms6BcIl0sW1wiYWFhMVwiLFwi54KV54KO54KS54KK54KZ54is54it54i454mI54mn54mp54uA54uO54uZ54uX54uQ546p546o546f546r546l55S955ad55aZ55aa55qE55uC55uy55u055+l55+956S+56WA56WB56eJ56eI56m656m556u657O+572U576M576L6ICF6IK66IKl6IKi6IKx6IKh6IKr6IKp6IK06IKq6IKv6Iel6Ie+6IiN6Iqz6Iqd6IqZ6Iqt6Iq96Iqf6Iq56Iqx6Iqs6Iql6Iqv6Iq46Iqj6Iqw6Iq+6Iq36JmO6Jmx5Yid6KGo6LuL6L+O6L+U6L+R6YK16YK46YKx6YK26YeH6YeR6ZW36ZaA6Zic6ZmA6Zi/6Zi76ZmEXCJdLFtcImFiNDBcIixcIumZgumauembqOmdkumdnuS6n+S6reS6ruS/oeS+teS+r+S+v+S/oOS/keS/j+S/neS/g+S+tuS/mOS/n+S/iuS/l+S+ruS/kOS/hOS/guS/muS/juS/nuS+t+WFl+WGkuWGkeWGoOWJjuWJg+WJiuWJjeWJjOWJi+WJh+WLh+WLieWLg+WLgeWMjeWNl+WNu+WOmuWPm+WSrOWTgOWSqOWTjuWTieWSuOWSpuWSs+WTh+WTguWSveWSquWTgVwiXSxbXCJhYmExXCIsXCLlk4Tlk4jlkq/lkqvlkrHlkrvlkqnlkqflkr/lm7/lnoLlnovlnqDlnqPlnqLln47lnq7lnpPlpZXlpZHlpY/lpY7lpZDlp5zlp5jlp7/lp6Plp6jlqIPlp6Xlp6rlp5rlp6blqIHlp7vlranlrqPlrqblrqTlrqLlrqXlsIHlsY7lsY/lsY3lsYvls5nls5Llt7fluJ3luKXluJ/lub3luqDluqblu7rlvIjlvK3lvaXlvojlvoXlvorlvovlvoflvozlvonmgJLmgJ3mgKDmgKXmgI7mgKjmgY3mgbDmgajmgaLmgYbmgYPmgazmgavmgarmgaTmiYHmi5zmjJbmjInmi7zmi63mjIHmi67mi73mjIfmi7Hmi7dcIl0sW1wiYWM0MFwiLFwi5ouv5ous5ou+5ou05oyR5oyC5pS/5pWF5par5pa95pei5pil5pit5pig5pin5piv5pif5pio5pix5pik5pu35p+/5p+T5p+x5p+U5p+Q5p+s5p625p6v5p+15p+p5p+v5p+E5p+R5p605p+a5p+l5p645p+P5p+e5p+z5p6w5p+Z5p+i5p+d5p+S5q2q5q6D5q6G5q615q+S5q+X5rCf5rOJ5rSL5rSy5rSq5rWB5rSl5rSM5rSx5rSe5rSXXCJdLFtcImFjYTFcIixcIua0u+a0vea0vua0tua0m+aztea0uea0p+a0uOa0qea0rua0tea0jua0q+eCq+eCuueCs+eCrOeCr+eCreeCuOeCrueCpOeIsOeJsueJr+eJtOeLqeeLoOeLoeeOt+ePiueOu+eOsuePjeePgOeOs+eUmueUreeVj+eVjOeVjueVi+eWq+eWpOeWpeeWoueWo+eZuOeahueah+eaiOebiOebhuebg+ebheecgeebueebuOecieeci+ebvuebvOech+efnOeggueglOegjOegjeelhuelieeliOelh+emueemuuenkeenkueni+epv+eqgeerv+erveexvee0gue0hee0gOe0iee0h+e0hOe0hue8uOe+jue+v+iAhFwiXSxbXCJhZDQwXCIsXCLogJDogI3ogJHogLbog5bog6Xog5rog4Pog4Tog4zog6Hog5vog47og57og6Tog53oh7ToiKLoi6fojIPojIXoi6Poi5voi6bojIToi6XojILojInoi5Loi5foi7HojIHoi5zoi5Toi5Hoi57oi5Poi5/oi6/ojIbomZDombnombvombrooY3ooavopoHop5ToqIjoqILoqIPosp7osqDotbTotbPotrTou43ou4zov7Dov6bov6Lov6rov6VcIl0sW1wiYWRhMVwiLFwi6L+t6L+r6L+k6L+o6YOK6YOO6YOB6YOD6YWL6YWK6YeN6ZaC6ZmQ6ZmL6ZmM6ZmN6Z2i6Z2p6Z+L6Z+t6Z+z6aCB6aKo6aOb6aOf6aaW6aaZ5LmY5Lqz5YCM5YCN5YCj5L+v5YCm5YCl5L+45YCp5YCW5YCG5YC85YCf5YCa5YCS5YCR5L+65YCA5YCU5YCo5L+x5YCh5YCL5YCZ5YCY5L+z5L+u5YCt5YCq5L++5YCr5YCJ5YW85Yak5Yal5Yai5YeN5YeM5YeG5YeL5YmW5Ymc5YmU5Ymb5Ymd5Yyq5Y2/5Y6f5Y6d5Y+f5ZOo5ZSQ5ZSB5ZS35ZO85ZOl5ZOy5ZSG5ZO65ZSU5ZOp5ZOt5ZOh5ZSJ5ZOu5ZOqXCJdLFtcImFlNDBcIixcIuWTpuWUp+WUh+WTveWUj+Wcg+WchOWfguWflOWfi+Wfg+WgieWkj+Wll+WlmOWlmuWokeWomOWonOWon+Wom+Wok+WnrOWooOWoo+WoqeWopeWojOWoieWtq+WxmOWusOWus+WutuWutOWuruWuteWuueWuuOWwhOWxkeWxleWxkOWzreWzveWzu+WzquWzqOWzsOWztuW0geWztOW3ruW4reW4q+W6q+W6reW6p+W8seW+kuW+keW+kOaBmVwiXSxbXCJhZWExXCIsXCLmgaPmgaXmgZDmgZXmga3mganmga/mgoTmgp/mgprmgo3mgpTmgozmgoXmgpbmiYfmi7PmjIjmi7/mjY7mjL7mjK/mjZXmjYLmjYbmjY/mjYnmjLrmjZDmjL3mjKrmjKvmjKjmjY3mjYzmlYjmlYnmlpnml4Hml4XmmYLmmYnmmY/mmYPmmZLmmYzmmYXmmYHmm7jmnJTmnJXmnJfmoKHmoLjmoYjmoYbmoZPmoLnmoYLmoZTmoKnmorPmoJfmoYzmoZHmoL3mn7TmoZDmoYDmoLzmoYPmoKrmoYXmoJPmoJjmoYHmrormronmrrfmsKPmsKfmsKjmsKbmsKTms7DmtarmtpXmtojmtofmtabmtbjmtbfmtZnmtpNcIl0sW1wiYWY0MFwiLFwi5rWs5raJ5rWu5rWa5rW05rWp5raM5raK5rW55raF5rWl5raU54OK54OY54Ok54OZ54OI54OP54i554m554u854u554u954u454u3546G54+t55CJ54+u54+g54+q54+e55WU55Wd55Wc55Wa55WZ55a+55eF55eH55ay55az55a955a855a555eC55a455qL55qw55uK55uN55uO55yp55yf55yg55yo55+p56Cw56Cn56C456Cd56C056C3XCJdLFtcImFmYTFcIixcIuegpeegreegoOegn+egsuelleelkOeloOeln+elluelnuelneell+elmuenpOeno+enp+enn+enpuenqeenmOeqhOeqiOermeeshueskeeyiee0oee0l+e0i+e0iue0oOe0oue0lOe0kOe0lee0mue0nOe0jee0mee0m+e8uue9n+e+lOe/hee/geiAhuiAmOiAleiAmeiAl+iAveiAv+iDseiEguiDsOiEheiDreiDtOiEhuiDuOiDs+iEiOiDveiEiuiDvOiDr+iHreiHrOiIgOiIkOiIquiIq+iIqOiIrOiKu+iMq+iNkuiNlOiNiuiMuOiNkOiNieiMteiMtOiNj+iMsuiMueiMtuiMl+iNgOiMseiMqOiNg1wiXSxbXCJiMDQwXCIsXCLomZTomoromqrompPomqTomqnomozomqPompzoobDoobfoooHoooLoob3oobnoqJjoqJDoqI7oqIzoqJXoqIroqJfoqJPoqJboqI/oqJHosYjosbrosbnosqHosqLotbfouqzou5Lou5Tou4/ovrHpgIHpgIbov7fpgIDov7rov7TpgIPov73pgIXov7jpgpXpg6Hpg53pg6LphZLphY3phYzph5jph53ph5fph5zph5nploPpmaLpmaPpmaFcIl0sW1wiYjBhMVwiLFwi6Zmb6Zmd6Zmk6ZmY6Zme6Zq76aOi6aas6aqo6auY6ayl6ayy6ay85Lm+5YG65YG95YGc5YGH5YGD5YGM5YGa5YGJ5YGl5YG25YGO5YGV5YG15YG05YG35YGP5YCP5YGv5YGt5YWc5YaV5Yew5Ymq5Ymv5YuS5YuZ5YuY5YuV5YyQ5YyP5YyZ5Yy/5Y2A5Yy+5Y+D5pu85ZWG5ZWq5ZWm5ZWE5ZWe5ZWh5ZWD5ZWK5ZSx5ZWW5ZWP5ZWV5ZSv5ZWk5ZS45ZSu5ZWc5ZSs5ZWj5ZSz5ZWB5ZWX5ZyI5ZyL5ZyJ5Z+f5aCF5aCK5aCG5Z+g5Z+k5Z+65aCC5aC15Z+35Z+55aSg5aWi5ai25amB5amJ5amm5amq5amAXCJdLFtcImIxNDBcIixcIuWovOWpouWpmuWphuWpiuWtsOWvh+WvheWvhOWvguWuv+WvhuWwieWwiOWwh+WxoOWxnOWxneW0h+W0huW0juW0m+W0luW0ouW0keW0qeW0lOW0meW0pOW0p+W0l+W3ouW4uOW4tuW4s+W4t+W6t+W6uOW6tuW6teW6vuW8teW8t+W9l+W9rOW9qeW9q+W+l+W+meW+nuW+mOW+oeW+oOW+nOaBv+aCo+aCieaCoOaCqOaDi+aCtOaDpuaCvVwiXSxbXCJiMWExXCIsXCLmg4XmgrvmgrXmg5zmgrzmg5jmg5Xmg4bmg5/mgrjmg5rmg4fmiJrmiJvmiYjmjqDmjqfmjbLmjpbmjqLmjqXmjbfmjafmjpjmjqrmjbHmjqnmjonmjoPmjpvmjavmjqjmjoTmjojmjpnmjqHmjqzmjpLmjo/mjoDmjbvmjanmjajmjbrmlZ3mlZbmlZHmlZnmlZfllZ/mlY/mlZjmlZXmlZTmlpzmlpvmlqzml4/ml4vml4zml47mmZ3mmZrmmaTmmajmmabmmZ7mm7nli5fmnJvmooHmoq/moqLmopPmorXmob/mobbmorHmoqfmopfmorDmooPmo4Tmoq3moobmooXmopTmop3moqjmop/moqHmooLmrLLmrrpcIl0sW1wiYjI0MFwiLFwi5q+r5q+s5rCr5raO5ra85rez5reZ5ray5reh5reM5rek5re75re65riF5reH5reL5rav5reR5rau5ree5re55ra45re35re15reF5reS5ria5ra15rea5rer5reY5req5rex5reu5reo5reG5reE5raq5res5ra/5rem54O554SJ54SK54O954Ov54i954m954qB54yc54yb54yW54yT54yZ546H55CF55CK55CD55CG54++55CN55Og55O2XCJdLFtcImIyYTFcIixcIueTt+eUnOeUoueVpeeVpueVoueVsOeWj+eXlOeXleeWteeXiueXjeeajueblOebkuebm+ect+ecvuecvOectuecuOecuuehq+ehg+ehjuelpeelqOelreenu+eqkueqleesoOesqOesm+esrOespuesmeesnuesrueykueyl+eylee1hue1g+e1see0rue0uee0vOe1gOe0sOe0s+e1hOe0r+e1gue0sue0see8vee+nue+mue/jOe/jue/kuiAnOiBiuiBhuiEr+iEluiEo+iEq+iEqeiEsOiEpOiIguiIteiIt+iItuiIueiOjuiOnuiOmOiNuOiOouiOluiOveiOq+iOkuiOiuiOk+iOieiOoOiNt+iNu+iNvFwiXSxbXCJiMzQwXCIsXCLojobojqfomZXlvarom4fom4Domrbom4TomrXom4bom4vomrHomq/om4nooZPoop7ooojooqvoopLoopbooo3ooovoppPopo/oqKroqJ3oqKPoqKXoqLHoqK3oqJ/oqJvoqKLosYnosZrosqnosqzosqvosqjosqrosqfotafotabotr7otrrou5vou5/pgJnpgI3pgJrpgJfpgKPpgJ/pgJ3pgJDpgJXpgJ7pgKDpgI/pgKLpgJbpgJvpgJRcIl0sW1wiYjNhMVwiLFwi6YOo6YOt6YO96YWX6YeO6Ye16Yem6Yej6Yen6Yet6Yep6ZaJ6Zmq6Zm16Zmz6Zm46Zmw6Zm06Zm26Zm36Zms6ZuA6Zuq6Zup56ug56uf6aCC6aCD6a2a6bOl6bm16bm/6bql6bq75YKi5YKN5YKF5YKZ5YKR5YKA5YKW5YKY5YKa5pyA5Yex5Ymy5Ym05Ym15Ymp5Yue5Yud5Yub5Y2a5Y6l5ZW75ZaA5Zan5ZW85ZaK5Zad5ZaY5ZaC5Zac5Zaq5ZaU5ZaH5ZaL5ZaD5Zaz5Zau5Zaf5ZS+5Zay5Zaa5Za75Zas5Zax5ZW+5ZaJ5Zar5ZaZ5ZyN5aCv5aCq5aC05aCk5aCw5aCx5aCh5aCd5aCg5aO55aO65aWgXCJdLFtcImI0NDBcIixcIuWpt+WqmuWpv+WqkuWqm+Wqp+Wts+WtseWvkuWvjOWvk+WvkOWwiuWwi+WwseW1jOW1kOW0tOW1h+W3veW5heW4veW5gOW5g+W5vuW7iuW7geW7guW7hOW8vOW9reW+qeW+quW+qOaDkeaDoeaCsuaCtuaDoOaEnOaEo+aDuuaEleaDsOaDu+aDtOaFqOaDseaEjuaDtuaEieaEgOaEkuaIn+aJieaOo+aOjOaPj+aPgOaPqeaPieaPhuaPjVwiXSxbXCJiNGExXCIsXCLmj5Lmj6Pmj5Dmj6Hmj5bmj63mj67mjbbmj7Tmj6rmj5vmkZLmj5rmj7nmlZ7mlabmlaLmlaPmlpHmlpDmlq/mma7mmbDmmbTmmbbmma/mmpHmmbrmmb7mmbfmm77mm7/mnJ/mnJ3mo7rmo5Xmo6Dmo5jmo5fmpIXmo5/mo7Xmo67mo6fmo7nmo5Lmo7Lmo6Pmo4vmo43mpI3mpJLmpI7mo4nmo5rmpa7mo7vmrL7mrLrmrL3mrpjmrpbmrrzmr6/msK7msK/msKzmuK/muLjmuZTmuKHmuLLmuafmuYrmuKDmuKXmuKPmuJvmuZvmuZjmuKTmuZbmua7muK3muKbmua/muLTmuY3muLrmuKzmuYPmuJ3muL7mu4tcIl0sW1wiYjU0MFwiLFwi5rqJ5riZ5rmO5rmj5rmE5rmy5rmp5rmf54SZ54Sa54Sm54Sw54Sh54S254Wu54Sc54mM54qE54qA54y254yl54y054yp55C655Cq55Cz55Ci55Cl55C155C255C055Cv55Cb55Cm55Co55Sl55Sm55Wr55Wq55ei55eb55ej55eZ55eY55ee55eg55m755m855qW55qT55q055uc552P55+t56Gd56Gs56Gv56iN56iI56iL56iF56iA56qYXCJdLFtcImI1YTFcIixcIueql+eqluerpeero+etieetluethuetkOetkuetlOetjeeti+etj+etkeeyn+eypee1nue1kOe1qOe1lee0q+e1rue1sue1oee1pue1oue1sOe1s+WWhOe/lOe/leiAi+iBkuiCheiFleiFlOiFi+iFkeiFjuiEueiFhuiEvuiFjOiFk+iFtOiIkuiInOiPqeiQg+iPuOiQjeiPoOiPheiQi+iPgeiPr+iPseiPtOiRl+iQiuiPsOiQjOiPjOiPveiPsuiPiuiQuOiQjuiQhOiPnOiQh+iPlOiPn+iZm+ibn+ibmeibreiblOibm+ibpOibkOibnuihl+ijgeijguiiseimg+imluiou+ipoOipleipnuiovOipgVwiXSxbXCJiNjQwXCIsXCLoqZToqZvoqZDoqYboqLToqLroqLboqZbosaHosoLosq/osrzosrPosr3os4Hosrvos4DosrTosrfosrbosr/osrjotorotoXotoHot47ot53ot4vot5rot5Hot4zot5vot4bou7vou7jou7zovpzpgK7pgLXpgLHpgLjpgLLpgLbphILpg7XphInpg77phaPphaXph4/piJTpiJXpiKPpiInpiJ7piI3piJDpiIfpiJHplpTplo/plovplpFcIl0sW1wiYjZhMVwiLFwi6ZaT6ZaS6ZaO6ZqK6ZqO6ZqL6Zm96ZqF6ZqG6ZqN6Zmy6ZqE6ZuB6ZuF6ZuE6ZuG6ZuH6Zuv6Zuy6Z+M6aCF6aCG6aCI6aOn6aOq6aOv6aOp6aOy6aOt6aau6aat6buD6buN6buR5LqC5YKt5YK15YKy5YKz5YOF5YK+5YKs5YK35YK75YKv5YOH5Ym/5Ym35Ym95Yuf5Yum5Yuk5Yui5Yuj5Yyv5Zef5Zeo5ZeT5Zem5ZeO5Zec5ZeH5ZeR5Zej5Zek5Zev5Zea5Zeh5ZeF5ZeG5Zel5ZeJ5ZyS5ZyT5aGe5aGR5aGY5aGX5aGa5aGU5aGr5aGM5aGt5aGK5aGi5aGS5aGL5aWn5auB5auJ5auM5aq+5aq95aq8XCJdLFtcImI3NDBcIixcIuWqs+WrguWqsuW1qeW1r+W5jOW5ueW7ieW7iOW8kuW9meW+rOW+ruaEmuaEj+aFiOaEn+aDs+aEm+aDueaEgeaEiOaFjuaFjOaFhOaFjeaEvuaEtOaEp+aEjeaEhuaEt+aIoeaIouaQk+aQvuaQnuaQquaQreaQveaQrOaQj+aQnOaQlOaQjeaQtuaQluaQl+aQhuaVrOaWn+aWsOaal+aaieaah+aaiOaaluaahOaamOaajeacg+amlOalrVwiXSxbXCJiN2ExXCIsXCLmpZrmpbfmpaDmpZTmpbXmpLDmpoLmpYrmpajmpavmpZ7mpZPmpbnmpobmpZ3mpaPmpZvmrYfmrbLmr4Dmrr/mr5Pmr73muqLmuq/mu5Pmurbmu4LmupDmup3mu4fmu4XmuqXmupjmurzmurrmuqvmu5Hmupbmupzmu4Tmu5TmuqrmuqfmurTnhY7nhZnnhannhaTnhYnnhafnhZznhaznhabnhYznhaXnhZ7nhYbnhajnhZbniLrniZLnjLfnjYXnjL/njL7nka/nkZrnkZXnkZ/nkZ7nkYHnkL/nkZnnkZvnkZznlbbnlbjnmIDnl7DnmIHnl7Lnl7Hnl7rnl7/nl7Tnl7Pnm57nm5/nnZvnnavnnabnnZ7nnaNcIl0sW1wiYjg0MFwiLFwi5525552q552s552c552l552o552i55+u56KO56Kw56KX56KY56KM56KJ56G856KR56KT56G/56W656W/56aB6JCs56a956ic56ia56ig56iU56if56ie56qf56qg562356+A562g562u562n57Kx57Kz57K157aT57W557aR57aB57aP57Wb572u572p572q572y576p576o576k6IGW6IGY6IKG6IKE6IWx6IWw6IW46IWl6IWu6IWz6IWrXCJdLFtcImI4YTFcIixcIuiFueiFuuiFpuiIheiJh+iSguiRt+iQveiQseiRteiRpuiRq+iRieiRrOiRm+iQvOiQteiRoeiRo+iRqeiRreiRhuiZnuiZnOiZn+ibueick+iciOich+icgOibvuibu+icguicg+ichuiciuihmeijn+ijlOijmeijnOijmOijneijoeijiuijleijkuimnOino+ipq+ipsuips+ippuipqeipsOiqh+ipvOipo+iqoOipseiqheipreipouipruiprOipueipu+iovuipqOixouiyiuiyieiziuizh+iziOizhOiysuizg+izguizhei3oei3n+i3qOi3r+i3s+i3uui3qui3pOi3pui6sui8g+i8iei7vui8ilwiXSxbXCJiOTQwXCIsXCLovp/ovrLpgYvpgYrpgZPpgYLpgZTpgLzpgZXpgZDpgYfpgY/pgY7pgY3pgZHpgL7pgYHphJLphJfphazpharphanph4npiLfpiZfpiLjpiL3piYDpiL7piZvpiYvpiaTpiZHpiLTpiYnpiY3piYXpiLnpiL/piZrplpjpmpjpmpTpmpXpm43pm4vpm4npm4rpm7fpm7vpm7npm7bpnZbpnbTpnbbpoJDpoJHpoJPpoIrpoJLpoIzpo7zpo7RcIl0sW1wiYjlhMVwiLFwi6aO96aO+6aaz6aax6aa06auh6bOp6bqC6byO6byT6byg5YOn5YOu5YOl5YOW5YOt5YOa5YOV5YOP5YOR5YOx5YOO5YOp5YWi5Yez5YqD5YqC5Yyx5Y6t5Ze+5ZiA5Zib5ZiX5Ze95ZiU5ZiG5ZiJ5ZiN5ZiO5Ze35ZiW5Zif5ZiI5ZiQ5Ze25ZyY5ZyW5aG15aG+5aKD5aKT5aKK5aG55aKF5aG95aO95aSl5aSi5aSk5aWq5aWp5auh5aum5aup5auX5auW5auY5auj5a215a+e5a+n5a+h5a+l5a+m5a+o5a+i5a+k5a+f5bCN5bGi5baE5baH5bmb5bmj5bmV5bmX5bmU5buT5buW5byK5b2G5b2w5b655oWHXCJdLFtcImJhNDBcIixcIuaEv+aFi+aFt+aFouaFo+aFn+aFmuaFmOaFteaIquaSh+aRmOaRlOaSpOaRuOaRn+aRuuaRkeaRp+aQtOaRreaRu+aVsuaWoeaXl+aXluaaouaaqOaaneamnOamqOamleangeamruank+ani+amm+amt+amu+amq+amtOankOanjeamreanjOampuang+amo+atieatjOaws+a8s+a8lOa7vua8k+a7tOa8qea8vua8oOa8rOa8j+a8gua8olwiXSxbXCJiYWExXCIsXCLmu7/mu6/mvIbmvLHmvLjmvLLmvKPmvJXmvKvmvK/mvojmvKrmu6zmvIHmu7Lmu4zmu7fnhpTnhpnnhb3nhornhoTnhpLniL7nipLnipbnjYTnjZDnkaTnkaPnkarnkbDnka3nlITnlpHnmKfnmI3nmIvnmInnmJPnm6Hnm6PnnoTnnb3nnb/nnaHno4Hnop/noqfnorPnoqnnoqPnpo7npo/npo3nqK7nqLHnqqrnqqnnq63nq6/nrqHnrpXnrovnrbXnrpfnrp3nrpTnro/nrrjnrofnroTnsrnnsr3nsr7ntrvntrDntpzntr3ntr7ntqDnt4rntrTntrLntrHntrrntqLntr/ntrXntrjntq3nt5Lnt4fntqxcIl0sW1wiYmI0MFwiLFwi572w57+g57+h57+f6IGe6IGa6IKH6IWQ6IaA6IaP6IaI6IaK6IW/6IaC6Ien6Ie66IiH6IiU6Iie6ImL6JOJ6JK/6JOG6JOE6JKZ6JKe6JKy6JKc6JOL6JK46JOA6JOT6JKQ6JK86JOR6JOK6Jy/6Jyc6Jy76Jyi6Jyl6Jy06JyY6J2V6Jy36Jyp6KOz6KSC6KO06KO56KO46KO96KOo6KSa6KOv6Kqm6KqM6Kqe6Kqj6KqN6Kqh6KqT6KqkXCJdLFtcImJiYTFcIixcIuiqquiqpeiqqOiqmOiqkeiqmuiqp+ixquiyjeiyjOizk+izkeizkui1q+i2mei2lei3vOi8lOi8kui8lei8k+i+o+mBoOmBmOmBnOmBo+mBmemBnumBoumBnemBm+mEmemEmOmEnumFtemFuOmFt+mFtOmJuOmKgOmKhemKmOmKlumJu+mKk+mKnOmKqOmJvOmKkemWoemWqOmWqemWo+mWpemWpOmamemanOmam+mbjOmbkumcgOmdvOmehemftumgl+mgmOmir+misemkg+mkhemkjOmkiemngemqr+mqsOmrpumtgemtgumztOmztumzs+m6vOm8u+m9iuWEhOWEgOWDu+WDteWDueWEguWEiOWEieWEheWHnFwiXSxbXCJiYzQwXCIsXCLliofliojlionlio3liorli7DljrLlmK7lmLvlmLnlmLLlmL/lmLTlmKnlmZPlmY7lmZflmbTlmLblmK/lmLDlooDlop/lop7lorPlopzloq7loqnloqblpa3lrInlq7vlrIvlq7XlrIzlrIjlr67lr6zlr6nlr6vlsaTlsaXltp3ltpTluaLluZ/luaHlu6Llu5rlu5/lu53lu6Plu6DlvYjlvbHlvrflvrXmhbbmhafmha7mhZ3mhZXmhoJcIl0sW1wiYmNhMVwiLFwi5oW85oWw5oWr5oW+5oan5oaQ5oar5oaO5oas5oaa5oak5oaU5oau5oiu5pGp5pGv5pG55pKe5pKy5pKI5pKQ5pKw5pKl5pKT5pKV5pKp5pKS5pKu5pKt5pKr5pKa5pKs5pKZ5pKi5pKz5pW15pW35pW45pqu5pqr5pq05pqx5qij5qif5qeo5qiB5qie5qiZ5qe95qih5qiT5qiK5qez5qiC5qiF5qet5qiR5q2Q5q2O5q6k5q+F5q+G5ry/5r285r6E5r2R5r2m5r2U5r6G5r2t5r2b5r245r2u5r6O5r265r2w5r2k5r6X5r2Y5ruV5r2v5r2g5r2f54af54as54ax54ao54mW54qb542O542X55Gp55KL55KDXCJdLFtcImJkNDBcIixcIueRvueSgOeVv+eYoOeYqeeYn+eYpOeYpueYoeeYoueamueauuebpOeejueeh+eejOeekeeei+eji+ejheeiuuejiueivuejleeivOejkOeov+eovOepgOeoveeot+eou+eqr+eqrueureeuseevhOeutOevhuevh+evgeeuoOevjOeziue3oOe3tOe3r+e3u+e3mOe3rOe3nee3qOe3o+e3mue3nue3qee2nue3mee3sue3uee9tee9t+e+r1wiXSxbXCJiZGExXCIsXCLnv6nogKbohpvohpzohp3ohqDohprohpjolJfolL3olJrok67olKzolK3olJPolJHolKPolKHolJTok6zolKXok7/olIbonoLonbTonbbonaDonabonbjonajonZnonZfonYzonZPooZvooZ3opJDopIfopJLopJPopJXopIroqrzoq5Loq4foq4ToqpXoq4voq7joqrLoq4noq4Loqr/oqrDoq5boq43oqrboqrnoq5vosYzosY7osazos6Dos57os6bos6Tos6zos63os6Los6Pos5zos6ros6Hota3otp/otqPouKvouJDouJ3ouKLouI/ouKnouJ/ouKHouJ7ourrovJ3ovJvovJ/ovKnovKbovKrovJzovJ5cIl0sW1wiYmU0MFwiLFwi6Lyl6YGp6YGu6YGo6YGt6YG36YSw6YSt6YSn6YSx6YaH6YaJ6YaL6YaD6YuF6Yq76Yq36Yuq6Yqs6Yuk6YuB6Yqz6Yq86YuS6YuH6Yuw6Yqy6Zat6Zax6ZyE6ZyG6ZyH6ZyJ6Z2g6Z6N6Z6L6Z6P6aCh6aCr6aCc6aKz6aSK6aST6aSS6aSY6aed6aeQ6aef6aeb6aeR6aeV6aeS6aeZ6aq36auu6auv6ayn6a2F6a2E6a236a2v6bSG6bSJXCJdLFtcImJlYTFcIixcIum0g+m6qem6vum7juWiqOm9kuWEkuWEmOWElOWEkOWEleWGgOWGquWHneWKkeWKk+WLs+WZmeWZq+WZueWZqeWZpOWZuOWZquWZqOWZpeWZseWZr+WZrOWZouWZtuWjgeWivuWjh+WjheWlruWsneWstOWtuOWvsOWwjuW9iuaGsuaGkeaGqeaGiuaHjeaGtuaGvuaHiuaHiOaIsOaTheaTgeaTi+aSu+aSvOaTmuaThOaTh+aTguaTjeaSv+aTkuaTlOaSvuaVtOabhuabieaaueabhOabh+aauOaoveaouOaouuapmeapq+apmOaoueaphOapouapoeapi+aph+aoteapn+apiOatmeatt+awhea/gua+sea+oVwiXSxbXCJiZjQwXCIsXCLmv4PmvqTmv4HmvqfmvrPmv4DmvrnmvrbmvqbmvqDmvrTnhr7nh4nnh5Dnh5Lnh4jnh5Xnhrnnh47nh5nnh5znh4Pnh4TnjajnkpznkqPnkpjnkp/nkp7nk6LnlIznlI3nmLTnmLjnmLrnm6fnm6XnnqDnnp7nnp/nnqXno6jno5rno6zno6fnpqbnqY3nqY7nqYbnqYznqYvnqrrnr5nnsJHnr4nnr6Tnr5vnr6Hnr6nnr6bns5Xns5bnuIpcIl0sW1wiYmZhMVwiLFwi57iR57iI57ib57ij57ie57id57iJ57iQ5725576y57+w57+x57+u6ICo6Iaz6Iap6Iao6Ie76IiI6ImY6ImZ6JWK6JWZ6JWI6JWo6JWp6JWD6JWJ6JWt6JWq6JWe6J6D6J6f6J6e6J6i6J6N6KGh6KSq6KSy6KSl6KSr6KSh6Kaq6Kam6Kum6Ku66Kur6Kux6KyA6Kuc6Kun6Kuu6Ku+6KyB6KyC6Ku36Kut6Kuz6Ku26Ku86LGr6LGt6LKT6LO06LmE6Lix6Li06LmC6Li56Li16Ly76Lyv6Ly46Lyz6L6o6L6m6YG16YG06YG46YGy6YG86YG66YS06YaS6Yyg6Yy26Yu46Yyz6Yyv6Yyi6Yu86Yyr6YyE6YyaXCJdLFtcImMwNDBcIixcIumMkOmMpumMoemMlemMrumMmemWu+map+maqOmaqumblemcjumckemclumcjemck+mcj+mdm+mdnOmdpumemOmgsOmguOmgu+mgt+mgremguemgpOmkkOmkqOmknumkm+mkoemkmumnremnoumnsemquOmqvOmru+mrremsqOmukem0lem0o+m0pum0qOm0kum0m+m7mOm7lOm+jem+nOWEquWEn+WEoeWEsuWLteWajuWagOWakOWaheWah1wiXSxbXCJjMGExXCIsXCLlmo/lo5Xlo5Plo5Hlo47lrLDlrKrlrKTlrbrlsLflsajltrzltrrltr3ltrjluavlvYzlvr3mh4nmh4Lmh4fmh6bmh4vmiLLmiLTmk47mk4rmk5jmk6Dmk7Dmk6bmk6zmk7Hmk6Lmk63mloLmloPmm5nmm5bmqoDmqpTmqoTmqqLmqpzmq5vmqqPmqb7mqpfmqpDmqqDmrZzmrq7mr5rmsIjmv5jmv7Hmv5/mv6Dmv5vmv6Tmv6vmv6/mvoDmv6zmv6Hmv6nmv5Xmv67mv7Dnh6fnh5/nh67nh6bnh6Xnh63nh6znh7Tnh6DniLXniYbnjbDnjbLnkqnnkrDnkqbnkqjnmYbnmYLnmYznm6rnnrPnnqrnnrDnnqxcIl0sW1wiYzE0MFwiLFwi556n556t55+v56O356O656O056Ov56SB56an56aq56mX56q/57CH57CN56++56+357CM56+g57Og57Oc57Oe57Oi57Of57OZ57Od57iu57i+57mG57i357iy57mD57ir57i957ix57mF57mB57i057i557mI57i157i/57iv572E57+z57+86IGx6IGy6IGw6IGv6IGz6IeG6IeD6Ia66IeC6IeA6Ia/6Ia96IeJ6Ia+6Ieo6IiJ6Imx6JaqXCJdLFtcImMxYTFcIixcIuiWhOiVvuiWnOiWkeiWlOiWr+iWm+iWh+iWqOiWiuiZp+ifgOifkeies+ifkuifhuieq+ieu+ieuuifiOifi+iku+iktuilhOikuOikveimrOisjuisl+ismeism+isiuisoOisneishOiskOixgeiwv+ixs+izuuizveizvOizuOizu+i2qOi5iei5i+i5iOi5iui9hOi8vui9gui9hei8v+mBv+mBvemChOmCgemCgumCgOmEuemGo+mGnumGnOmNjemOgumMqOmNtemNiumNpemNi+mMmOmNvumNrOmNm+mNsOmNmumNlOmXiumXi+mXjOmXiOmXhumasemauOmblumcnOmcnumeoOmfk+mhhumitumktemogVwiXSxbXCJjMjQwXCIsXCLpp7/prq7prqvprqrprq3ptLvptL/puovpu4/pu57pu5zpu53pu5vpvL7pvYvlj6LlmpXlmq7lo5nlo5jlrLjlvZ3mh6PmiLPmk7Tmk7Lmk77mlIbmk7rmk7vmk7fmlrfmm5zmnKbmqrPmqqzmq4Pmqrvmqrjmq4Lmqq7mqq/mrZ/mrbjmrq/ngInngIvmv77ngIbmv7rngJHngI/nh7vnh7znh77nh7jnjbfnjbXnkqfnkr/nlJXnmZbnmZhcIl0sW1wiYzJhMVwiLFwi55mS5569556/5567556856SO56au56mh56mi56mg56uE56uF57Cr57Cn57Cq57Ce57Cj57Ch57On57mU57mV57me57ma57mh57mS57mZ572I57+557+76IG36IG26IeN6IeP6IiK6JeP6Jap6JeN6JeQ6JeJ6Jaw6Ja66Ja56Jam6J+v6J+s6J+y6J+g6KaG6Kay6Ke06Kyo6Ky56Kys6Kyr6LGQ6LSF6LmZ6Lmj6Lmm6Lmk6Lmf6LmV6LuA6L2J6L2N6YKH6YKD6YKI6Yar6Yas6YeQ6Y6U6Y6K6Y6W6Y6i6Y6z6Y6u6Y6s6Y6w6Y6Y6Y6a6Y6X6ZeU6ZeW6ZeQ6ZeV6Zui6Zuc6ZuZ6Zub6Zue6Zyk6Z6j6Z6mXCJdLFtcImMzNDBcIixcIumeremfuemhjemhj+mhjOmhjumhk+miuumkvumkv+mkvemkrummpemojumrgemsg+mshumtj+mtjumtjemviumviemvvemviOmvgOm1kem1nem1oOm7oOm8lem8rOWEs+WapeWjnuWjn+WjouWvtem+kOW7rOaHsuaHt+aHtuaHteaUgOaUj+aboOabnearpearnearmuark+eAm+eAn+eAqOeAmueAneeAleeAmOeIhueIjeeJmOeKoueNuFwiXSxbXCJjM2ExXCIsXCLnjbrnkr3nk4rnk6PnlofnlobnmZ/nmaHnn4fnpJnnprHnqavnqannsL7nsL/nsLjnsL3nsLfnsYDnuavnua3nubnnuannuarnvoXnubPnvrbnvrnnvrjoh5jol6nol53ol6rol5Xol6Tol6Xol7fon7vooIXooI3on7non77opaDopZ/opZbopZ7orYHorZzorZjorYnorZrorY7orY/orYborZnotIjotIroubzoubLouofoubbouazoubroubTovZTovY7ovq3pgorpgovphrHphq7pj6Hpj5Hpj5/pj4Ppj4jpj5zpj53pj5bpj6Lpj43pj5jpj6Tpj5fpj6jpl5zpmrTpm6PpnKrpnKfpnaHpn5zpn7vpoZ5cIl0sW1wiYzQ0MFwiLFwi6aGY6aGb6aK86aWF6aWJ6aiW6aiZ6ayN6a+o6a+n6a+W6a+b6baJ6bWh6bWy6bWq6bWs6bqS6bqX6bqT6bq05Yu45Zqo5Zq35Zq25Zq05Zq85aOk5a2A5a2D5a295a+25beJ5oe45oe65pSY5pSU5pSZ5pum5pyn5qus54C+54Cw54Cy54iQ542755OP55mi55ml56Sm56Sq56Ss56Sr56uH56u257GM57GD57GN57Ov57Ow6L6u57m957m8XCJdLFtcImM0YTFcIixcIue6gue9jOiAgOiHmuiJpuiXu+iXueiYkeiXuuiYhuiYi+iYh+iYiuiglOigleilpOimuuinuOitsOitrOitpuitr+itn+itq+i0j+i0jei6iei6gei6hei6gumGtOmHi+mQmOmQg+mPvemXoemcsOmjhOmlkumlkemmqOmoq+mosOmot+motemwk+mwjem5uem6tem7qOm8r+m9n+m9o+m9oeWEt+WEuOWbgeWbgOWbguWklOWxrOW3jeaHvOaHvuaUneaUnOaWleabqearu+ashOaruuausueBjOeIm+eKp+eTlueTlOeZqeefk+exkOe6j+e6jOe+vOiYl+iYreiYmuigo+igouigoeign+ilquilrOimveittFwiXSxbXCJjNTQwXCIsXCLorbforb3otJPouorouo3ouovovZ/ovq/phrrpkK7pkLPpkLXpkLrpkLjpkLLpkKvpl6LpnLjpnLnpnLLpn7/poafpoaXppZfpqYXpqYPpqYDpqL7pq4/prZTprZHpsK3psKXptq/ptrTpt4Lptrjpup3pu6/pvJnpvZzpvabpvaflhLzlhLvlm4jlm4rlm4nlrb/lt5Tlt5LlvY7mh7/mlKTmrIrmraHngZHngZjnjoDnk6Tnlornma7nmaxcIl0sW1wiYzVhMVwiLFwi56az57Gg57Gf6IG+6IG96Ief6KWy6KWv6Ke86K6A6LSW6LSX6LqR6LqT6L2h6YWI6ZGE6ZGR6ZGS6Zy96Zy+6Z+D6Z+B6aGr6aWV6amV6amN6auS6aya6bGJ6bCx6bC+6bC76beT6beX6by06b2s6b2q6b6U5ZuM5beW5oiA5pSj5pSr5pSq5pus5qyQ55Oa56uK57Gk57Gj57Gl57qT57qW57qU6Iei6Ji46Ji/6KCx6K6K6YKQ6YKP6ZGj6ZGg6ZGk6Z2o6aGv6aWc6ama6amb6amX6auT6auU6auR6bGU6bGX6bGW6bel6bqf6bu05ZuR5aOp5pSs54Ge55mx55my55+X572Q576I6KC26KC56KGi6K6T6K6SXCJdLFtcImM2NDBcIixcIuiuluiJt+i0m+mHgOmRqumdgumdiOmdhOmfhumhsOmpn+msoumtmOmxn+m3uem3uum5vOm5vem8h+m9t+m9suW7s+aslueBo+exrOexruigu+ingOi6oemHgemRsumRsOmhsemlnumrlumso+m7jOeBpOefmuiumumRt+mfiempoumppee6nOiunOi6qumHhemRvemRvumRvOmxt+mxuOm7t+ixlOmRv+m4mueIqOmpqumssem4m+m4nuexslwiXSxbXCJjOTQwXCIsXCLkuYLkuZzlh7XljJrljoLkuIfkuIzkuYfkuo3lm5fvqIzlsa7lvbPkuI/lhofkuI7kuK7kupPku4Lku4nku4jlhpjli7zljazljrnlnKDlpIPlpKzlsJDlt7/ml6HmrrPmr4zmsJTniL/kuLHkuLzku6jku5zku6nku6Hku53ku5rliIzljJzljYzlnKLlnKPlpJflpK/lroHlroTlsJLlsLvlsbTlsbPluITluoDluoLlv4nmiInmiZDmsJVcIl0sW1wiYzlhMVwiLFwi5rC25rGD5rC/5rC754qu54qw546K56a46IKK6Zie5LyO5LyY5Lys5Lu15LyU5Lux5LyA5Lu35LyI5Lyd5LyC5LyF5Lyi5LyT5LyE5Lu05LyS5Yax5YiT5YiJ5YiQ5Yqm5Yyi5Yyf5Y2N5Y6K5ZCH5Zuh5Zuf5Zyu5Zyq5Zy05aS85aaA5aW85aaF5aW75aW+5aW35aW/5a2W5bCV5bCl5bG85bG65bG75bG+5bef5bm15bqE5byC5bya5b205b+V5b+U5b+P5omc5ome5omk5omh5omm5omi5omZ5omg5oma5oml5pev5peu5py+5py55py45py75py65py/5py85pyz5rCY5rGG5rGS5rGc5rGP5rGK5rGU5rGLXCJdLFtcImNhNDBcIixcIuaxjOeBseeJnueKtOeKteeOjueUqueZv+eptee9keiJuOiJvOiKgOiJveiJv+iZjeilvumCmemCl+mCmOmCm+mClOmYoumYpOmYoOmYo+S9luS8u+S9ouS9ieS9k+S9pOS8vuS9p+S9kuS9n+S9geS9mOS8reS8s+S8v+S9oeWGj+WGueWInOWInuWIoeWKreWKruWMieWNo+WNsuWOjuWOj+WQsOWQt+WQquWRlOWRheWQmeWQnOWQpeWQmFwiXSxbXCJjYWExXCIsXCLlkL3lkY/lkYHlkKjlkKTlkYflm67lm6flm6XlnYHlnYXlnYzlnYnlnYvlnZLlpIblpYDlpqblppjlpqDlppflpo7lpqLlppDlpo/lpqflpqHlro7lrpLlsKjlsKrlso3lso/lsojlsovlsonlspLlsorlsoblspPlspXlt6DluIrluI7luovluonluozluojluo3lvIXlvJ3lvbjlvbblv5Llv5Hlv5Dlv63lv6jlv67lv7Plv6Hlv6Tlv6Plv7rlv6/lv7flv7vmgIDlv7TmiLrmioPmiozmio7mio/mipTmiofmibHmibvmibrmibDmioHmiojmibfmib3mibLmibTmlLfml7Dml7Tml7Pml7Lml7XmnYXmnYdcIl0sW1wiY2I0MFwiLFwi5p2Z5p2V5p2M5p2I5p2d5p2N5p2a5p2L5q+Q5rCZ5rCa5rG45rGn5rGr5rKE5rKL5rKP5rGx5rGv5rGp5rKa5rGt5rKH5rKV5rKc5rGm5rGz5rGl5rG75rKO54G054G654mj54q/54q954uD54uG54uB54q654uF546V546X546T546U546S55S655S555aU55aV55qB56S96IC06IKV6IKZ6IKQ6IKS6IKc6IqQ6IqP6IqF6IqO6IqR6IqTXCJdLFtcImNiYTFcIixcIuiKiuiKg+iKhOixuOi/iei+v+mCn+mCoemCpemCnumCp+mCoOmYsOmYqOmYr+mYreS4s+S+mOS9vOS+heS9veS+gOS+h+S9tuS9tOS+ieS+hOS9t+S9jOS+l+S9quS+muS9ueS+geS9uOS+kOS+nOS+lOS+nuS+kuS+guS+leS9q+S9ruWGnuWGvOWGvuWIteWIsuWIs+WJhuWIseWKvOWMiuWMi+WMvOWOkuWOlOWSh+WRv+WSgeWSkeWSguWSiOWRq+WRuuWRvuWRpeWRrOWRtOWRpuWSjeWRr+WRoeWRoOWSmOWRo+WRp+WRpOWbt+WbueWdr+WdsuWdreWdq+WdseWdsOWdtuWegOWdteWdu+Wds+WdtOWdolwiXSxbXCJjYzQwXCIsXCLlnajlnb3lpIzlpYXlprXlprrlp4/lp47lprLlp4zlp4Hlprblprzlp4Plp5blprHlpr3lp4Dlp4jlprTlp4flraLlraXlrpPlrpXlsYTlsYflsq7lsqTlsqDlsrXlsq/lsqjlsqzlsp/lsqPlsq3lsqLlsqrlsqflsp3lsqXlsrblsrDlsqbluJfluJTluJnlvKjlvKLlvKPlvKTlvZTlvoLlvb7lvb3lv57lv6XmgK3mgKbmgJnmgLLmgItcIl0sW1wiY2NhMVwiLFwi5oC05oCK5oCX5oCz5oCa5oCe5oCs5oCi5oCN5oCQ5oCu5oCT5oCR5oCM5oCJ5oCc5oiU5oi95oqt5oq05ouR5oq+5oqq5oq25ouK5oqu5oqz5oqv5oq75oqp5oqw5oq45pS95pao5pa75piJ5pe85piE5piS5piI5pe75piD5piL5piN5piF5pe95piR5piQ5pu25pyK5p6F5p2s5p6O5p6S5p225p275p6Y5p6G5p6E5p205p6N5p6M5p265p6f5p6R5p6Z5p6D5p295p6B5p245p255p6U5qyl5q6A5q2+5q+e5rCd5rKT5rOs5rOr5rOu5rOZ5rK25rOU5rKt5rOn5rK35rOQ5rOC5rK65rOD5rOG5rOt5rOyXCJdLFtcImNkNDBcIixcIuazkuazneaytOayiuayneaygOaznuazgOa0sOazjeazh+aysOazueazj+azqeazkeeClOeCmOeCheeCk+eChueChOeCkeeClueCgueCmueCg+eJqueLlueLi+eLmOeLieeLnOeLkueLlOeLmueLjOeLkeeOpOeOoeeOreeOpueOoueOoOeOrOeOneeTneeTqOeUv+eVgOeUvueWjOeWmOear+ebs+ebseebsOebteefuOefvOefueefu+efulwiXSxbXCJjZGExXCIsXCLnn7fnpYLnpL/np4Xnqbjnqbvnq7vnsbXns73ogLXogo/ogq7ogqPogrjogrXogq3oiKDoiqDoi4DoiqvoiproipjoipvoirXoiqfoiq7oirzoip7oirroirToiqjoiqHoiqnoi4LoiqToi4PoirboiqLombDoma/oma3oma7osZbov5Lov4vov5Pov43ov5bov5Xov5fpgrLpgrTpgq/pgrPpgrDpmLnpmL3pmLzpmLrpmYPkv43kv4Xkv5PkvrLkv4nkv4vkv4Hkv5Tkv5zkv5nkvrvkvrPkv5vkv4fkv5bkvrrkv4Dkvrnkv6zliYTliYnli4Dli4LljL3ljbzljpfljpbljpnljpjlkrrlkqHlkq3lkqXlk49cIl0sW1wiY2U0MFwiLFwi5ZOD6IyN5ZK35ZKu5ZOW5ZK25ZOF5ZOG5ZKg5ZGw5ZK85ZKi5ZK+5ZGy5ZOe5ZKw5Z615Z6e5Z6f5Z6k5Z6M5Z6X5Z6d5Z6b5Z6U5Z6Y5Z6P5Z6Z5Z6l5Z6a5Z6V5aO05aSN5aWT5aeh5aee5aeu5aiA5aex5aed5ae65ae95ae85ae25aek5aey5ae35aeb5aep5aez5ae15aeg5ae+5ae05aet5a6o5bGM5bOQ5bOY5bOM5bOX5bOL5bObXCJdLFtcImNlYTFcIixcIuWznuWzmuWzieWzh+WziuWzluWzk+WzlOWzj+WziOWzhuWzjuWzn+WzuOW3ueW4oeW4ouW4o+W4oOW4pOW6sOW6pOW6ouW6m+W6o+W6peW8h+W8ruW9luW+huaAt+aAueaBlOaBsuaBnuaBheaBk+aBh+aBieaBm+aBjOaBgOaBguaBn+aApOaBhOaBmOaBpuaBruaJguaJg+aLj+aMjeaMi+aLteaMjuaMg+aLq+aLueaMj+aMjOaLuOaLtuaMgOaMk+aMlOaLuuaMleaLu+aLsOaVgeaVg+aWquaWv+aYtuaYoeaYsuaYteaYnOaYpuaYouaYs+aYq+aYuuaYneaYtOaYueaYruacj+ackOafgeafsuafiOaeulwiXSxbXCJjZjQwXCIsXCLmn5zmnrvmn7jmn5jmn4Dmnrfmn4Xmn6vmn6Tmn5/mnrXmn43mnrPmn7fmn7bmn67mn6Pmn4Lmnrnmn47mn6fmn7DmnrLmn7zmn4bmn63mn4zmnq7mn6bmn5vmn7rmn4nmn4rmn4Pmn6rmn4vmrKjmroLmroTmrrbmr5bmr5jmr6DmsKDmsKHmtKjmtLTmtK3mtJ/mtLzmtL/mtJLmtIrms5rmtLPmtITmtJnmtLrmtJrmtJHmtIDmtJ3mtYJcIl0sW1wiY2ZhMVwiLFwi5rSB5rSY5rS35rSD5rSP5rWA5rSH5rSg5rSs5rSI5rSi5rSJ5rSQ54K354Kf54K+54Kx54Kw54Kh54K054K154Kp54mB54mJ54mK54ms54mw54mz54mu54uK54uk54uo54ur54uf54uq54um54uj546F54+M54+C54+I54+F546554625461546054+r546/54+H546+54+D54+G546454+L55Os55Ou55Su55WH55WI55an55aq55m555uE55yI55yD55yE55yF55yK55u355u755u655+n55+o56CG56CR56CS56CF56CQ56CP56CO56CJ56CD56CT56WK56WM56WL56WF56WE56eV56eN56eP56eW56eO56qAXCJdLFtcImQwNDBcIixcIuepvuerkeesgOesgeexuuexuOexueexv+eygOeygee0g+e0iOe0gee9mOe+kee+jee+vuiAh+iAjuiAj+iAlOiAt+iDmOiDh+iDoOiDkeiDiOiDguiDkOiDheiDo+iDmeiDnOiDiuiDleiDieiDj+iDl+iDpuiDjeiHv+iIoeiKlOiLmeiLvuiLueiMh+iLqOiMgOiLleiMuuiLq+iLluiLtOiLrOiLoeiLsuiLteiMjOiLu+iLtuiLsOiLqlwiXSxbXCJkMGExXCIsXCLoi6Toi6Doi7roi7Poi63ombfombTombzombPooYHooY7ooafooarooanop5PoqIToqIfotbLov6Pov6Hov67ov6Dpg7Hpgr3pgr/pg5Xpg4Xpgr7pg4fpg4vpg4jph5Tph5PpmZTpmY/pmZHpmZPpmYrpmY7lgJ7lgIXlgIflgJPlgKLlgLDlgJvkv7Xkv7TlgLPlgLflgKzkv7bkv7flgJflgJzlgKDlgKflgLXlgK/lgLHlgI7lhZrlhpTlhpPlh4rlh4Tlh4Xlh4jlh47liaHliZrliZLliZ7liZ/liZXliaLli43ljI7ljp7llKblk6LllJfllJLlk6flk7Plk6TllJrlk7/llITllIjlk6vllJHllIXlk7FcIl0sW1wiZDE0MFwiLFwi5ZSK5ZO75ZO35ZO45ZOg5ZSO5ZSD5ZSL5ZyB5ZyC5Z+M5aCy5Z+V5Z+S5Z665Z+G5Z695Z685Z645Z625Z6/5Z+H5Z+Q5Z655Z+B5aSO5aWK5aiZ5aiW5ait5aiu5aiV5aiP5aiX5aiK5aie5aiz5a2s5a6n5a6t5a6s5bCD5bGW5bGU5bOs5bO/5bOu5bOx5bO35bSA5bO55bip5bio5bqo5bqu5bqq5bqs5byz5byw5b2n5oGd5oGa5oGnXCJdLFtcImQxYTFcIixcIuaBgeaCouaCiOaCgOaCkuaCgeaCneaCg+aCleaCm+aCl+aCh+aCnOaCjuaImeaJhuaLsuaMkOaNluaMrOaNhOaNheaMtuaNg+aPpOaMueaNi+aNiuaMvOaMqeaNgeaMtOaNmOaNlOaNmeaMreaNh+aMs+aNmuaNkeaMuOaNl+aNgOaNiOaViuaVhuaXhuaXg+aXhOaXguaZiuaZn+aZh+aZkeackuack+agn+agmuahieagsuags+agu+ahi+ahj+agluagseagnOagteagq+agreagr+ahjuahhOagtOagneagkuaglOagpuagqOagruahjeaguuagpeagoOasrOasr+asreasseastOatreiCguauiOavpuavpFwiXSxbXCJkMjQwXCIsXCLmr6jmr6Pmr6Lmr6fmsKXmtbrmtaPmtaTmtbbmtI3mtaHmtpLmtZjmtaLmta3mta/mtpHmto3mt6/mtb/mtobmtZ7mtafmtaDmtpfmtbDmtbzmtZ/mtoLmtpjmtK/mtajmtovmtb7mtoDmtoTmtJbmtoPmtbvmtb3mtbXmtpDng5zng5Png5Hng53ng4vnvLnng6Lng5fng5Lng57ng6Dng5Tng43ng4Xng4bng4fng5rng47ng6HniYLnibhcIl0sW1wiZDJhMVwiLFwi54m354m254yA54u654u054u+54u254uz54u754yB54+T54+Z54+l54+W546854+n54+j54+p54+c54+S54+b54+U54+d54+a54+X54+Y54+o55Oe55Of55O055O155Sh55Wb55Wf55aw55eB55a755eE55eA55a/55a255a655qK55uJ55yd55yb55yQ55yT55yS55yj55yR55yV55yZ55ya55yi55yn56Cj56Cs56Ci56C156Cv56Co56Cu56Cr56Ch56Cp56Cz56Cq56Cx56WU56Wb56WP56Wc56WT56WS56WR56er56es56eg56eu56et56eq56ec56ee56ed56qG56qJ56qF56qL56qM56qK56qH56uY56yQXCJdLFtcImQzNDBcIixcIueshOesk+esheesj+esiOesiuesjuesieeskueyhOeykeeyiueyjOeyiOeyjeeyhee0nue0nee0kee0jue0mOe0lue0k+e0n+e0kue0j+e0jOe9nOe9oee9nue9oOe9nee9m+e+lue+kue/g+e/gue/gOiAluiAvuiAueiDuuiDsuiDueiDteiEgeiDu+iEgOiIgeiIr+iIpeiMs+iMreiNhOiMmeiNkeiMpeiNluiMv+iNgeiMpuiMnOiMolwiXSxbXCJkM2ExXCIsXCLojYLojY7ojJvojKrojIjojLzojY3ojJbojKTojKDojLfojK/ojKnojYfojYXojYzojZPojJ7ojKzojYvojKfojYjomZPomZLomqLomqjompbomo3ompHomp7omofompfomobomovompromoXomqXompnomqHomqfompXompjomo7omp3ompDompTooYPooYTooa3oobXoobboobLoooDoobHoob/ooa/oooPoob7oobToobzoqJLosYfosZfosbvosqTosqPotbbotbjotrXotrfotrbou5Hou5Pov77ov7XpgILov7/ov7vpgITov7zov7bpg5bpg6Dpg5npg5rpg6Ppg5/pg6Xpg5jpg5vpg5fpg5zpg6TphZBcIl0sW1wiZDQ0MFwiLFwi6YWO6YWP6YeV6Yei6Yea6Zmc6Zmf6Zq86aOj6auf6ayv5Lm/5YGw5YGq5YGh5YGe5YGg5YGT5YGL5YGd5YGy5YGI5YGN5YGB5YGb5YGK5YGi5YCV5YGF5YGf5YGp5YGr5YGj5YGk5YGG5YGA5YGu5YGz5YGX5YGR5YeQ5Ymr5Ymt5Yms5Ymu5YuW5YuT5Yyt5Y6c5ZW15ZW25ZS85ZWN5ZWQ5ZS05ZSq5ZWR5ZWi5ZS25ZS15ZSw5ZWS5ZWFXCJdLFtcImQ0YTFcIixcIuWUjOWUsuWVpeWVjuWUueWViOWUreWUu+WVgOWVi+WciuWch+Wfu+WglOWfouWftuWfnOWftOWggOWfreWfveWgiOWfuOWgi+Wfs+Wfj+Wgh+WfruWfo+WfsuWfpeWfrOWfoeWgjuWfvOWgkOWfp+WggeWgjOWfseWfqeWfsOWgjeWghOWlnOWpoOWpmOWpleWpp+WpnuWouOWoteWpreWpkOWpn+WppeWprOWpk+WppOWpl+Wpg+WpneWpkuWphOWpm+WpiOWqjuWovuWpjeWoueWpjOWpsOWpqeWph+WpkeWpluWpguWpnOWtsuWtruWvgeWvgOWxmeW0nuW0i+W0neW0muW0oOW0jOW0qOW0jeW0puW0peW0j1wiXSxbXCJkNTQwXCIsXCLltLDltJLltKPltJ/ltK7luL7luLTlurHlurTlurnlurLlurPlvLblvLjlvpvlvpblvp/mgormgpDmgobmgr7mgrDmgrrmg5Pmg5Tmg4/mg6Tmg5nmg53mg4jmgrHmg5vmgrfmg4rmgr/mg4Pmg43mg4DmjLLmjaXmjormjoLmjb3mjr3mjp7mjq3mjp3mjpfmjqvmjo7mja/mjofmjpDmja7mjq/mjbXmjpzmja3mjq7mjbzmjqTmjLvmjp9cIl0sW1wiZDVhMVwiLFwi5o245o6F5o6B5o6R5o6N5o2w5pWT5peN5pml5pmh5pmb5pmZ5pmc5pmi5pyY5qG55qKH5qKQ5qKc5qGt5qGu5qKu5qKr5qWW5qGv5qKj5qKs5qKp5qG15qG05qKy5qKP5qG35qKS5qG85qGr5qGy5qKq5qKA5qGx5qG+5qKb5qKW5qKL5qKg5qKJ5qKk5qG45qG75qKR5qKM5qKK5qG95qy25qyz5qy35qy45q6R5q6P5q6N5q6O5q6M5rCq5reA5rar5ra05raz5rm05ras5rep5rei5ra35re25reU5riA5reI5reg5ref5reW5ra+5rel5rec5red5reb5re05reK5ra95ret5rew5ra65reV5reC5reP5reJXCJdLFtcImQ2NDBcIixcIua3kOa3sua3k+a3vea3l+a3jea3o+a2u+eDuueEjeeDt+eEl+eDtOeEjOeDsOeEhOeDs+eEkOeDvOeDv+eEhueEk+eEgOeDuOeDtueEi+eEgueEjueJvueJu+eJvOeJv+eMneeMl+eMh+eMkeeMmOeMiueMiOeLv+eMj+eMnueOiOePtuePuOePteeQhOeQgeePveeQh+eQgOePuuePvOePv+eQjOeQi+ePtOeQiOeVpOeVo+eXjueXkueXj1wiXSxbXCJkNmExXCIsXCLnl4vnl4znl5Hnl5Dnmo/nmonnm5PnnLnnnK/nnK3nnLHnnLLnnLTnnLPnnL3nnKXnnLvnnLXnoYjnoZLnoYnnoY3noYrnoYznoKbnoYXnoZDnpaTnpafnpannparnpaPnpavnpaHnprvnp7rnp7jnp7bnp7fnqo/nqpTnqpDnrLXnrYfnrLTnrKXnrLDnrKLnrKTnrLPnrJjnrKrnrJ3nrLHnrKvnrK3nrK/nrLLnrLjnrJrnrKPnspTnspjnspbnsqPntLXntL3ntLjntLbntLrntYXntKzntKnntYHntYfntL7ntL/ntYrntLvntKjnvaPnvpXnvpznvp3nvpvnv4rnv4vnv43nv5Dnv5Hnv4fnv4/nv4nogJ9cIl0sW1wiZDc0MFwiLFwi6ICe6ICb6IGH6IGD6IGI6ISY6ISl6ISZ6ISb6ISt6ISf6ISs6ISe6ISh6ISV6ISn6ISd6ISi6IiR6Ii46Iiz6Ii66Ii06Iiy6Im06I6Q6I6j6I6o6I6N6I266I2z6I6k6I206I6P6I6B6I6V6I6Z6I216I6U6I6p6I296I6D6I6M6I6d6I6b6I6q6I6L6I2+6I6l6I6v6I6I6I6X6I6w6I2/6I6m6I6H6I6u6I226I6a6JmZ6JmW6Jq/6Jq3XCJdLFtcImQ3YTFcIixcIuibguibgeibheiauuiasOibiOiaueias+iauOibjOiatOiau+iavOibg+iaveiavuihkuiiieiileiiqOiiouiiquiimuiikeiioeiin+iimOiip+iimeiim+iil+iipOiirOiijOiik+iijuimguinluinmeinleiosOiop+iorOionuiwueiwu+ixnOixneixveiypei1vei1u+i1uei2vOi3gui2uei2v+i3gei7mOi7nui7nei7nOi7l+i7oOi7oemApOmAi+mAkemAnOmAjOmAoemDr+mDqumDsOmDtOmDsumDs+mDlOmDq+mDrOmDqemFlumFmOmFmumFk+mFlemHrOmHtOmHsemHs+mHuOmHpOmHuemHqlwiXSxbXCJkODQwXCIsXCLph6vph7fph6jph67plbrplobplojpmbzpma3pmavpmbHpma/pmr/pnarpoITpo6XpppflgpvlgpXlgpTlgp7lgovlgqPlgoPlgozlgo7lgp3lgajlgpzlgpLlgoLlgoflhZ/lh5TljJLljJHljqTljqfllpHllqjllqXllq3llbflmYXllqLllpPllojllo/llrXlloHllqPllpLllqTllb3llozllqbllb/llpXllqHllo7lnIzloKnloLdcIl0sW1wiZDhhMVwiLFwi5aCZ5aCe5aCn5aCj5aCo5Z+15aGI5aCl5aCc5aCb5aCz5aC/5aC25aCu5aC55aC45aCt5aCs5aC75aWh5aqv5aqU5aqf5am65aqi5aqe5am45aqm5am85aql5aqs5aqV5aqu5ai35aqE5aqK5aqX5aqD5aqL5aqp5am75am95aqM5aqc5aqP5aqT5aqd5a+q5a+N5a+L5a+U5a+R5a+K5a+O5bCM5bCw5bS35bWD5bWr5bWB5bWL5bS/5bS15bWR5bWO5bWV5bSz5bS65bWS5bS95bSx5bWZ5bWC5bS55bWJ5bS45bS85bSy5bS25bWA5bWF5bmE5bmB5b2Y5b6m5b6l5b6r5oOJ5oK55oOM5oOi5oOO5oOE5oSUXCJdLFtcImQ5NDBcIixcIuaDsuaEiuaEluaEheaDteaEk+aDuOaDvOaDvuaDgeaEg+aEmOaEneaEkOaDv+aEhOaEi+aJiuaOlOaOseaOsOaPjuaPpeaPqOaPr+aPg+aSneaPs+aPiuaPoOaPtuaPleaPsuaPteaRoeaPn+aOvuaPneaPnOaPhOaPmOaPk+aPguaPh+aPjOaPi+aPiOaPsOaPl+aPmeaUsuaVp+aVquaVpOaVnOaVqOaVpeaWjOaWneaWnuaWruaXkOaXklwiXSxbXCJkOWExXCIsXCLmmbzmmazmmbvmmoDmmbHmmbnmmarmmbLmnIHmpIzmo5PmpITmo5zmpKrmo6zmo6rmo7HmpI/mo5bmo7fmo6vmo6Tmo7bmpJPmpJDmo7Pmo6HmpIfmo4zmpIjmpbDmorTmpJHmo6/mo4bmpJTmo7jmo5Dmo73mo7zmo6jmpIvmpIrmpJfmo47mo4jmo53mo57mo6bmo7Tmo5HmpIbmo5Tmo6nmpJXmpKXmo4fmrLnmrLvmrL/mrLzmrpTmrpfmrpnmrpXmrr3mr7Dmr7Lmr7PmsLDmt7zmuYbmuYfmuJ/muYnmuojmuLzmuL3muYXmuaLmuKvmuL/muYHmuZ3mubPmuJzmuLPmuYvmuYDmuZHmuLvmuIPmuK7muZ5cIl0sW1wiZGE0MFwiLFwi5rmo5rmc5rmh5rix5rio5rmg5rmx5rmr5ri55rii5riw5rmT5rml5rin5rm45rmk5rm35rmV5rm55rmS5rmm5ri15ri25rma54Sg54Se54Sv54O754Su54Sx54Sj54Sl54Si54Sy54Sf54So54S654Sb54mL54ma54qI54qJ54qG54qF54qL54yS54yL54yw54yi54yx54yz54yn54yy54yt54ym54yj54y154yM55Cu55Cs55Cw55Cr55CWXCJdLFtcImRhYTFcIixcIueQmueQoeeQreeQseeQpOeQo+eQneeQqeeQoOeQsueTu+eUr+eVr+eVrOeXp+eXmueXoeeXpueXneeXn+eXpOeXl+ealeeakuebmuedhuedh+edhOedjeedheediuedjuedi+edjOefnuefrOehoOehpOehpeehnOehreehseehquehruehsOehqeehqOehnuehoueltOels+elsuelsOeogueoiueog+eojOeohOeqmeerpuerpOetiuesu+ethOetiOetjOetjuetgOetmOetheeyoueynueyqOeyoee1mOe1r+e1o+e1k+e1lue1p+e1que1j+e1ree1nOe1q+e1kue1lOe1qee1kee1n+e1jue8vue8v+e9pVwiXSxbXCJkYjQwXCIsXCLnvabnvqLnvqDnvqHnv5fogZHogY/ogZDog77og5TohYPohYrohZLohY/ohYfohL3ohY3ohLroh6boh67oh7foh7joh7noiIToiLzoiL3oiL/oibXojLvoj4/oj7nokKPoj4Doj6jokJLoj6foj6Toj7zoj7bokJDoj4boj4joj6voj6Pojr/okIHoj53oj6Xoj5joj7/oj6Hoj4voj47oj5boj7Xoj4nokInokI/oj57okJHokIboj4Loj7NcIl0sW1wiZGJhMVwiLFwi6I+V6I+66I+H6I+R6I+q6JCT6I+D6I+s6I+u6I+E6I+76I+X6I+i6JCb6I+b6I++6JuY6Jui6Jum6JuT6Juj6Jua6Juq6Jud6Jur6Juc6Jus6Jup6JuX6Juo6JuR6KGI6KGW6KGV6KK66KOX6KK56KK46KOA6KK+6KK26KK86KK36KK96KKy6KSB6KOJ6KaV6KaY6KaX6Ked6Kea6Keb6KmO6KmN6Ki56KmZ6KmA6KmX6KmY6KmE6KmF6KmS6KmI6KmR6KmK6KmM6KmP6LGf6LKB6LKA6LK66LK+6LKw6LK56LK16LaE6LaA6LaJ6LeY6LeT6LeN6LeH6LeW6Lec6LeP6LeV6LeZ6LeI6LeX6LeF6Luv6Lu36Lu6XCJdLFtcImRjNDBcIixcIui7uei7pui7rui7pei7tei7p+i7qOi7tui7q+i7sei7rOi7tOi7qemAremAtOmAr+mEhumErOmEhOmDv+mDvOmEiOmDuemDu+mEgemEgOmEh+mEhemEg+mFoemFpOmFn+mFoumFoOmIgemIiumIpemIg+mImumIpumIj+mIjOmIgOmIkumHv+mHvemIhumIhOmIp+mIgumInOmIpOmImemIl+mIhemIlumVu+mWjemWjOmWkOmah+mZvumaiFwiXSxbXCJkY2ExXCIsXCLpmonpmoPpmoDpm4Lpm4jpm4Ppm7Hpm7DpnazpnbDpna7poIfpoqnpo6vps6bpu7nkuoPkuoTkurblgr3lgr/lg4blgq7lg4Tlg4rlgrTlg4jlg4LlgrDlg4HlgrrlgrHlg4vlg4nlgrblgrjlh5flibrlibjlibvlibzll4Pll5vll4zll5Dll4vll4rll53ll4Dll5Tll4Tll6nllr/ll5Lllo3ll4/ll5Xll6Lll5bll4jll7Lll43ll5nll4LlnJTloZPloajloaTloY/loY3loYnloa/loZXloY7loZ3loZnloaXloZvloL3loaPlobHlo7zlq4flq4Tlq4vlqrrlqrjlqrHlqrXlqrDlqr/lq4jlqrvlq4ZcIl0sW1wiZGQ0MFwiLFwi5aq35auA5auK5aq05aq25auN5aq55aqQ5a+W5a+Y5a+Z5bCf5bCz5bWx5bWj5bWK5bWl5bWy5bWs5bWe5bWo5bWn5bWi5bew5bmP5bmO5bmK5bmN5bmL5buF5buM5buG5buL5buH5b2A5b6v5b6t5oO35oWJ5oWK5oSr5oWF5oS25oSy5oSu5oWG5oSv5oWP5oSp5oWA5oig6YWo5oij5oil5oik5o+F5o+x5o+r5pCQ5pCS5pCJ5pCg5pCkXCJdLFtcImRkYTFcIixcIuaQs+aRg+aQn+aQleaQmOaQueaQt+aQouaQo+aQjOaQpuaQsOaQqOaRgeaQteaQr+aQiuaQmuaRgOaQpeaQp+aQi+aPp+aQm+aQruaQoeaQjuaVr+aWkuaXk+aahuaajOaaleaakOaai+aaiuaameaalOaZuOacoOalpualn+akuOaljualoualseakv+alhealquakuealguall+almealuualiOalieaktealrOaks+akvealpeajsOaluOaktOalqealgOalr+alhOaltualmOalgealtOaljOaku+ali+akt+alnOalj+alkeaksualkuakr+alu+akvOathuatheatg+atguatiOatgeaum++ojeavu+avvFwiXSxbXCJkZTQwXCIsXCLmr7nmr7fmr7jmupvmu5bmu4jmuo/mu4Dmup/mupPmupTmuqDmurHmurnmu4bmu5Lmur3mu4Hmup7mu4nmurfmurDmu43muqbmu4/murLmur7mu4Pmu5zmu5jmupnmupLmuo7muo3muqTmuqHmur/murPmu5Dmu4rmupfmuq7muqPnhYfnhZTnhZLnhaPnhaDnhYHnhZ3nhaLnhbLnhbjnharnhaHnhYLnhZjnhYPnhYvnhbDnhZ/nhZDnhZNcIl0sW1wiZGVhMVwiLFwi54WE54WN54Wa54mP54qN54qM54qR54qQ54qO54y8542C54y754y6542A542K542J55GE55GK55GL55GS55GR55GX55GA55GP55GQ55GO55GC55GG55GN55GU55Oh55O/55O+55O955Sd55W555W35qaD55ev55iP55iD55e355e+55e855e555e455iQ55e755e255et55e155e955qZ55q155ud552V552f552g552S552W552a552p552n552U552Z552t55+g56KH56Ka56KU56KP56KE56KV56KF56KG56Kh56KD56G556KZ56KA56KW56G756W856aC56W956W556iR56iY56iZ56iS56iX56iV56ii56iTXCJdLFtcImRmNDBcIixcIueom+eokOeqo+eqoueqnuerq+etpuetpOetreettOetqeetsuetpeets+etseetsOetoeetuOettueto+eysueytOeyr+e2iOe2hue2gOe2jee1v+e2hee1uue2jue1u+e2g+e1vOe2jOe2lOe2hOe1vee2kue9ree9q+e9p+e9qOe9rOe+pue+pee+p+e/m+e/nOiAoeiFpOiFoOiFt+iFnOiFqeiFm+iFouiFsuacoeiFnuiFtuiFp+iFr1wiXSxbXCJkZmExXCIsXCLohYTohaHoiJ3oiYnoiYToiYDoiYLoiYXok7HokL/okZbokbbokbnoko/oko3okaXokZHokYDokobokafokLDokY3okb3okZrokZnokbTokbPokZ3olIfokZ7okLfokLrokLTokbrokYPokbjokLLokYXokKnoj5nokYvokK/okYLokK3okZ/okbDokLnokY7okYzokZLoka/ok4Xoko7okLvokYfokLbokLPokajokb7okYTokKvokaDokZToka7okZDonIvonITom7fonIzom7rom5bom7XonY3om7jonI7onInonIHom7bonI3onIXoo5boo4voo43oo47oo57oo5voo5roo4zoo5DopoXoppvop5/op6Xop6RcIl0sW1wiZTA0MFwiLFwi6Keh6Keg6Kei6Kec6Kem6Km26KqG6Km/6Kmh6Ki/6Km36KqC6KqE6Km16KqD6KqB6Km06Km66LC86LGL6LGK6LGl6LGk6LGm6LKG6LKE6LKF6LOM6LWo6LWp6LaR6LaM6LaO6LaP6LaN6LaT6LaU6LaQ6LaS6Lew6Leg6Les6Lex6Leu6LeQ6Lep6Lej6Lei6Len6Ley6Ler6Le06LyG6Lu/6LyB6LyA6LyF6LyH6LyI6LyC6LyL6YGS6YC/XCJdLFtcImUwYTFcIixcIumBhOmBiemAvemEkOmEjemEj+mEkemElumElOmEi+mEjumFrumFr+mJiOmJkumIsOmIuumJpumIs+mJpemJnumKg+mIrumJiumJhumJremJrOmJj+mJoOmJp+mJr+mItumJoemJsOmIsemJlOmJo+mJkOmJsumJjumJk+mJjOmJlumIsumWn+mWnOmWnumWm+makumak+makemal+mbjumbuumbvembuOmbtemds+mdt+mduOmdsumgj+mgjemgjumirOmjtumjuemmr+mmsummsOmmtemqremqq+mtm+mzqumzremzp+m6gOm7veWDpuWDlOWDl+WDqOWDs+WDm+WDquWDneWDpOWDk+WDrOWDsOWDr+WDo+WDoFwiXSxbXCJlMTQwXCIsXCLlh5jlioDlioHli6nli6vljLDljqzlmKflmJXlmIzlmJLll7zlmI/lmJzlmIHlmJPlmILll7rlmJ3lmITll7/ll7nloonlobzlopDlopjlooblooHlob/lobTloovlobrlooflopHloo7lobblooLloojlobvlopTloo/lo77lpavlq5zlq67lq6Xlq5Xlq6rlq5rlq63lq6vlq7Plq6Llq6Dlq5vlq6zlq57lq53lq5nlq6jlq5/lrbflr6BcIl0sW1wiZTFhMVwiLFwi5a+j5bGj5baC5baA5bW95baG5bW65baB5bW35baK5baJ5baI5bW+5bW85baN5bW55bW/5bmY5bmZ5bmT5buY5buR5buX5buO5buc5buV5buZ5buS5buU5b2E5b2D5b2v5b625oSs5oSo5oWB5oWe5oWx5oWz5oWS5oWT5oWy5oWs5oaA5oW05oWU5oW65oWb5oWl5oS75oWq5oWh5oWW5oip5oin5oir5pCr5pGN5pGb5pGd5pG05pG25pGy5pGz5pG95pG15pGm5pKm5pGO5pKC5pGe5pGc5pGL5pGT5pGg5pGQ5pG/5pC/5pGs5pGr5pGZ5pGl5pG35pWz5pag5pqh5pqg5pqf5pyF5pyE5pyi5qax5qa25qeJXCJdLFtcImUyNDBcIixcIuamoOanjuamluamsOamrOamvOamkeammeamjuamp+amjeamqeamvuamr+amv+anhOamveampOanlOamueaniuammuanj+ams+amk+amquamoeamnuanmeaml+amkOanguamteampeanhuatiuatjeati+aunuaun+auoOavg+avhOavvua7jua7tea7sea8g+a8pea7uOa8t+a7u+a8rua8iea9jua8mea8mua8p+a8mOa8u+a8kua7rea8ilwiXSxbXCJlMmExXCIsXCLmvLbmvbPmu7nmu67mvK3mvYDmvLDmvLzmvLXmu6vmvIfmvI7mvYPmvIXmu73mu7bmvLnmvJzmu7zmvLrmvJ/mvI3mvJ7mvIjmvKHnhofnhpDnhonnhoDnhoXnhoLnho/nhbvnhobnhoHnhpfniYTniZPnipfnipXnipPnjYPnjY3njZHnjYznkaLnkbPnkbHnkbXnkbLnkafnka7nlIDnlILnlIPnlb3nlpDnmJbnmIjnmIznmJXnmJHnmIrnmJTnmrjnnoHnnbznnoXnnoLnna7nnoDnna/nnb7nnoPnorLnoqrnorTnoq3noqjnob7noqvnop7noqXnoqDnoqznoqLnoqTnppjnpornpovnppbnppXnppTnppNcIl0sW1wiZTM0MFwiLFwi56aX56aI56aS56aQ56ir56mK56iw56iv56io56im56qo56qr56qs56uu566I566c566K566R566Q566W566N566M566b566O566F566Y5YqE566Z566k566C57K757K/57K857K657an57a357eC57aj57aq57eB57eA57eF57ad57eO57eE57eG57eL57eM57av57a557aW57a857af57am57au57ap57ah57eJ572z57+i57+j57+l57+eXCJdLFtcImUzYTFcIixcIuiApOiBneiBnOiGieiGhuiGg+iGh+iGjeiGjOiGi+iIleiSl+iSpOiSoeiSn+iSuuiTjuiTguiSrOiSruiSq+iSueiStOiTgeiTjeiSquiSmuiSseiTkOiSneiSp+iSu+iSouiSlOiTh+iTjOiSm+iSqeiSr+iSqOiTluiSmOiStuiTj+iSoOiTl+iTlOiTkuiTm+iSsOiSkeiZoeics+ico+icqOidq+idgOicruicnuicoeicmeicm+idg+icrOidgeicvuidhuicoOicsuicquicreicvOickuicuuicseicteidguicpuicp+icuOicpOicmuicsOickeijt+ijp+ijseijsuijuuijvuijruijvOijtuiju1wiXSxbXCJlNDQwXCIsXCLoo7Doo6zoo6vopp3opqHopp/opp7op6nop6vop6joqqvoqpnoqovoqpLoqo/oqpbosL3osajosanos5Xos4/os5fotpbouInouILot7/ouI3ot73ouIrouIPouIfouIbouIXot77ouIDouITovJDovJHovI7ovI3phKPphJzphKDphKLphJ/phJ3phJrphKTphKHphJvphbrphbLphbnphbPpiqXpiqTpibbpipvpibrpiqDpipTpiqrpio1cIl0sW1wiZTRhMVwiLFwi6Yqm6Yqa6Yqr6Ym56YqX6Ym/6Yqj6Yuu6YqO6YqC6YqV6Yqi6Ym96YqI6Yqh6YqK6YqG6YqM6YqZ6Yqn6Ym+6YqH6Yqp6Yqd6YqL6Yit6Zqe6Zqh6Zu/6Z2Y6Z296Z266Z2+6Z6D6Z6A6Z6C6Z276Z6E6Z6B6Z2/6Z+O6Z+N6aCW6aKt6aKu6aSC6aSA6aSH6aad6aac6aeD6aa56aa76aa66aeC6aa96aeH6aqx6auj6aun6ay+6ay/6a2g6a2h6a2f6bOx6bOy6bO16bqn5YO/5YSD5YSw5YO45YSG5YSH5YO25YO+5YSL5YSM5YO95YSK5YqL5YqM5Yux5Yuv5ZmI5ZmC5ZmM5Zi15ZmB5ZmK5ZmJ5ZmG5ZmYXCJdLFtcImU1NDBcIixcIuWZmuWZgOWYs+WYveWYrOWYvuWYuOWYquWYuuWcmuWiq+WineWiseWioOWio+Wir+WirOWipeWioeWjv+Wrv+WrtOWrveWrt+WrtuWsg+WruOWsguWrueWsgeWsh+WsheWsj+Wxp+W2meW2l+W2n+W2kuW2ouW2k+W2leW2oOW2nOW2oeW2muW2nuW5qeW5neW5oOW5nOe3s+W7m+W7nuW7oeW9ieW+suaGi+aGg+aFueaGseaGsOaGouaGiVwiXSxbXCJlNWExXCIsXCLmhpvmhpPmhq/mhq3mhp/mhpLmhqrmhqHmho3mhabmhrPmiK3mka7mkbDmkpbmkqDmkoXmkpfmkpzmko/mkovmkormkozmkqPmkp/mkajmkrHmkpjmlbbmlbrmlbnmlbvmlrLmlrPmmrXmmrDmmqnmmrLmmrfmmqrmmq/mqIDmqIbmqJfmp6Xmp7jmqJXmp7Hmp6TmqKDmp7/mp6zmp6LmqJvmqJ3mp77mqKfmp7Lmp67mqJTmp7fmp6fmqYDmqIjmp6bmp7vmqI3mp7zmp6vmqInmqITmqJjmqKXmqI/mp7bmqKbmqIfmp7TmqJbmrZHmrqXmrqPmrqLmrqbmsIHmsIDmr7/msILmvYHmvKbmvb7mvofmv4bmvpJcIl0sW1wiZTY0MFwiLFwi5r6N5r6J5r6M5r2i5r2P5r6F5r2a5r6W5r225r2s5r6C5r2V5r2y5r2S5r2Q5r2X5r6U5r6T5r2d5ryA5r2h5r2r5r295r2n5r6Q5r2T5r6L5r2p5r2/5r6V5r2j5r235r2q5r2754ay54av54ab54aw54ag54aa54ap54a154ad54al54ae54ak54ah54aq54ac54an54az54qY54qa542Y542S542e542f542g542d542b542h542a542ZXCJdLFtcImU2YTFcIixcIueNoueSh+eSieeSiueShueSgeeRveeSheeSiOeRvOeRueeUiOeUh+eVvueYpeeYnueYmeeYneeYnOeYo+eYmueYqOeYm+eanOeaneeanueam+eejeeej+eeieeeiOejjeeiu+ejj+ejjOejkeejjuejlOejiOejg+ejhOejieemmuemoeemoOemnOemouemm+attueoueeqsueqtOeqs+eut+evi+euvueurOevjueur+euueeviueuteezheeziOezjOezi+e3t+e3m+e3que3p+e3l+e3oee4g+e3uue3pue3tue3see3sOe3rue3n+e9tue+rOe+sOe+ree/ree/q+e/que/rOe/pue/qOiBpOiBp+iGo+iGn1wiXSxbXCJlNzQwXCIsXCLohp7ohpXohqLohpnohpfoiJboiY/oiZPoiZLoiZDoiY7oiZHolKTolLvolI/olIDolKnolI7olInolI3olJ/olIrolKfolJzok7volKvok7rolIjolIzok7TolKrok7LolJXok7fok6vok7Pok7zolJLok6rok6nolJbok77olKjolJ3olK7olILok73olJ7ok7bolLHolKbok6fok6jok7Dok6/ok7nolJjolKDolLDolIvolJnolK/omaJcIl0sW1wiZTdhMVwiLFwi6J2W6J2j6J2k6J236J+h6J2z6J2Y6J2U6J2b6J2S6J2h6J2a6J2R6J2e6J2t6J2q6J2Q6J2O6J2f6J2d6J2v6J2s6J266J2u6J2c6J2l6J2P6J276J216J2i6J2n6J2p6KGa6KSF6KSM6KSU6KSL6KSX6KSY6KSZ6KSG6KSW6KSR6KSO6KSJ6Kai6Kak6Kaj6Ket6Kew6Kes6KuP6KuG6Kq46KuT6KuR6KuU6KuV6Kq76KuX6Kq+6KuA6KuF6KuY6KuD6Kq66Kq96KuZ6LC+6LGN6LKP6LOl6LOf6LOZ6LOo6LOa6LOd6LOn6Lag6Lac6Lah6Lab6Lig6Lij6Lil6Lik6Liu6LiV6Lib6LiW6LiR6LiZ6Lim6LinXCJdLFtcImU4NDBcIixcIui4lOi4kui4mOi4k+i4nOi4l+i4mui8rOi8pOi8mOi8mui8oOi8o+i8lui8l+mBs+mBsOmBr+mBp+mBq+mEr+mEq+mEqemEqumEsumEpumErumGhemGhumGiumGgemGgumGhOmGgOmLkOmLg+mLhOmLgOmLmemKtumLj+mLsemLn+mLmOmLqemLl+mLnemLjOmLr+mLgumLqOmLiumLiOmLjumLpumLjemLlemLiemLoOmLnumLp+mLkemLk1wiXSxbXCJlOGExXCIsXCLpirXpi6Hpi4bpirTplbzplqzplqvplq7plrDpmqTpmqLpm5PpnIXpnIjpnILpnZrpnorpno7pnojpn5Dpn4/poJ7poJ3poKbpoKnpoKjpoKDpoJvpoKfporLppIjpo7rppJHppJTppJbppJfppJXpp5zpp43pp4/pp5Ppp5Tpp47pp4npp5bpp5jpp4vpp5fpp4zpqrPpq6zpq6vpq7Ppq7Lpq7HprYbprYPprafprbTprbHprabprbbprbXprbDprajpraTprazps7zps7rps73ps7/ps7fptIfptIDps7nps7vptIjptIXptITpuoPpu5PpvI/pvJDlhJzlhJPlhJflhJrlhJHlh57ljLTlj6HlmbDlmaDlma5cIl0sW1wiZTk0MFwiLFwi5Zmz5Zmm5Zmj5Zmt5Zmy5Zme5Zm35Zyc5Zyb5aOI5aK95aOJ5aK/5aK65aOC5aK85aOG5ayX5ayZ5ayb5ayh5ayU5ayT5ayQ5ayW5ayo5aya5ayg5aye5a+v5bas5bax5bap5ban5ba15baw5bau5baq5bao5bay5bat5bav5ba05bmn5bmo5bmm5bmv5bup5bun5bum5buo5bul5b2L5b685oad5oao5oaW5oeF5oa05oeG5oeB5oeM5oa6XCJdLFtcImU5YTFcIixcIuaGv+aGuOaGjOaTl+aTluaTkOaTj+aTieaSveaSieaTg+aTm+aTs+aTmeaUs+aVv+aVvOaWouabiOaavuabgOabiuabi+abj+aaveaau+aauuabjOaco+aotOappuapieapp+aosuapqOaovuapneapreaptuapm+apkeaoqOapmuaou+aov+apgeapquappOapkOapj+aplOapr+apqeapoOaovOapnuapluapleapjeapjuaphuatleatlOatluaup+auquauq+aviOavh+awhOawg+awhua+rea/i+a+o+a/h+a+vOa/jua/iOa9nua/hOa+vea+nua/iua+qOeAhOa+pea+rua+uua+rOa+qua/j+a+v+a+uFwiXSxbXCJlYTQwXCIsXCLmvqLmv4nmvqvmv43mvq/mvrLmvrDnh4Xnh4Lnhr/nhrjnh5bnh4Dnh4Hnh4vnh5Tnh4rnh4fnh4/nhr3nh5jnhrznh4bnh5rnh5vnip3nip7njannjabnjafnjaznjaXnjavnjarnkb/nkprnkqDnkpTnkpLnkpXnkqHnlIvnloDnmK/nmK3nmLHnmL3nmLPnmLznmLXnmLLnmLDnmrvnm6bnnprnnp3nnqHnnpznnpvnnqLnnqPnnpXnnplcIl0sW1wiZWFhMVwiLFwi556X56Od56Op56Ol56Oq56Oe56Oj56Ob56Oh56Oi56Ot56Of56Og56ak56mE56mI56mH56q256q456q156qx56q356+e56+j56+n56+d56+V56+l56+a56+o56+556+U56+q56+i56+c56+r56+Y56+f57OS57OU57OX57OQ57OR57iS57ih57iX57iM57if57ig57iT57iO57ic57iV57ia57ii57iL57iP57iW57iN57iU57il57ik572D572757285726576x57+v6ICq6ICp6IGs6Iax6Iam6Iau6Ia56Ia16Iar6Iaw6Ias6Ia06Iay6Ia36Ian6Iey6ImV6ImW6ImX6JWW6JWF6JWr6JWN6JWT6JWh6JWYXCJdLFtcImViNDBcIixcIuiVgOiVhuiVpOiVgeiVouiVhOiVkeiVh+iVo+iUvuiVm+iVseiVjuiVruiVteiVleiVp+iVoOiWjOiVpuiVneiVlOiVpeiVrOiZo+iZpeiZpOiem+iej+iel+iek+iekuieiOiegeieluiemOidueieh+ieo+ieheiekOiekeieneiehOielOienOiemuieieiknuikpuiksOikreikruikp+ikseikouikqeiko+ikr+ikrOikn+inseiroFwiXSxbXCJlYmExXCIsXCLoq6Loq7Loq7Toq7Xoq53orJToq6Toq5/oq7Doq4joq57oq6Hoq6joq7/oq6/oq7vospHospLospDos7Xos67os7Hos7Dos7Potazota7otqXotqfouLPouL7ouLjouYDouYXouLbouLzouL3ouYHouLDouL/our3ovLbovK7ovLXovLLovLnovLfovLTpgbbpgbnpgbvpgobpg7rphLPphLXphLbphpPphpDphpHpho3pho/pjKfpjJ7pjIjpjJ/pjIbpjI/pjbrpjLjpjLzpjJvpjKPpjJLpjIHpjYbpjK3pjI7pjI3pi4vpjJ3pi7rpjKXpjJPpi7npi7fpjLTpjILpjKTpi7/pjKnpjLnpjLXpjKrpjJTpjIxcIl0sW1wiZWM0MFwiLFwi6YyL6Yu+6YyJ6YyA6Yu76YyW6Za86ZeN6Za+6Za56Za66Za26Za/6Za16Za96Zqp6ZuU6ZyL6ZyS6ZyQ6Z6Z6Z6X6Z6U6Z+w6Z+46aC16aCv6aCy6aSk6aSf6aSn6aSp6aae6aeu6aes6ael6aek6aew6aej6aeq6aep6aen6aq56aq/6aq06aq76au26au66au56au36ayz6a6A6a6F6a6H6a286a2+6a276a6C6a6T6a6S6a6Q6a266a6VXCJdLFtcImVjYTFcIixcIumtvemuiOm0pem0l+m0oOm0num0lOm0qem0nem0mOm0oum0kOm0mem0n+m6iOm6hum6h+m6rum6rem7lem7lum7uum8kum8veWEpuWEpeWEouWEpOWEoOWEqeWLtOWak+WajOWajeWahuWahOWag+WZvuWaguWZv+WageWjluWjlOWjj+WjkuWsreWspeWssuWso+WsrOWsp+WspuWsr+WsruWtu+WvseWvsuW2t+W5rOW5quW+vuW+u+aHg+aGteaGvOaHp+aHoOaHpeaHpOaHqOaHnuaTr+aTqeaTo+aTq+aTpOaTqOaWgeaWgOaWtuaXmuabkuaqjeaqluaqgeaqpeaqieaqn+aqm+aqoeaqnuaqh+aqk+aqjlwiXSxbXCJlZDQwXCIsXCLmqpXmqoPmqqjmqqTmqpHmqb/mqqbmqprmqoXmqozmqpLmrZvmrq3msInmv4zmvqnmv7Tmv5Tmv6Pmv5zmv63mv6fmv6bmv57mv7Lmv53mv6Lmv6jnh6Hnh7Hnh6jnh7Lnh6Tnh7Dnh6LnjbPnja7nja/nkpfnkrLnkqvnkpDnkqrnkq3nkrHnkqXnkq/nlJDnlJHnlJLnlI/nloTnmYPnmYjnmYnnmYfnmqTnm6nnnrXnnqvnnrLnnrfnnrZcIl0sW1wiZWRhMVwiLFwi5560556x556o55+w56Oz56O956SC56O756O856Oy56SF56O556O+56SE56ar56ao56mc56mb56mW56mY56mU56ma56q+56uA56uB57CF57CP56+y57CA56+/56+757CO56+057CL56+z57CC57CJ57CD57CB56+456+957CG56+w56+x57CQ57CK57Oo57it57i857mC57iz6aGI57i457iq57mJ57mA57mH57ip57mM57iw57i757i257mE57i6572F572/572+572957+057+y6ICs6Ia76IeE6IeM6IeK6IeF6IeH6Ia86Iep6Imb6Ima6Imc6JaD6JaA6JaP6Jan6JaV6Jag6JaL6Jaj6JW76Jak6Jaa6JaeXCJdLFtcImVlNDBcIixcIuiVt+iVvOiWieiWoeiVuuiVuOiVl+iWjuiWluiWhuiWjeiWmeiWneiWgeiWouiWguiWiOiWheiVueiVtuiWmOiWkOiWn+iZqOievuiequiereifheiesOierOieueieteievOieruifieifg+ifguifjOiet+ier+ifhOifiuietOietuiev+ieuOieveifnuiesuikteiks+ikvOikvuilgeilkuikt+ilguimreimr+imruinsuins+isnlwiXSxbXCJlZWExXCIsXCLorJjorJborJHorIXorIvorKLorI/orJLorJXorIforI3orIjorIborJzorJPorJrosY/osbDosbLosbHosa/ospXospTos7nota/ouY7ouY3ouZPouZDouYzouYfovYPovYDpgoXpgb7phLjphprphqLphpvphpnphp/phqHphp3phqDpjqHpjoPpjq/pjaTpjZbpjYfpjbzpjZjpjZzpjbbpjYnpjZDpjZHpjaDpja3pjo/pjYzpjarpjbnpjZfpjZXpjZLpjY/pjbHpjbfpjbvpjaHpjZ7pjaPpjafpjoDpjY7pjZnpl4fpl4Dpl4npl4Ppl4Xplrfpmq7pmrDpmqzpnKDpnJ/pnJjpnJ3pnJnpnprpnqHpnpxcIl0sW1wiZWY0MFwiLFwi6Z6e6Z6d6Z+V6Z+U6Z+x6aGB6aGE6aGK6aGJ6aGF6aGD6aSl6aSr6aSs6aSq6aSz6aSy6aSv6aSt6aSx6aSw6aaY6aaj6aah6aiC6ae66ae06ae36ae56ae46ae26ae76ae96ae+6ae86aiD6aq+6au+6au96ayB6au86a2I6a6a6a6o6a6e6a6b6a6m6a6h6a6l6a6k6a6G6a6i6a6g6a6v6bSz6bWB6bWn6bS26bSu6bSv6bSx6bS46bSwXCJdLFtcImVmYTFcIixcIum1hem1gum1g+m0vum0t+m1gOm0vee/tem0rem6ium6iem6jem6sOm7iOm7mum7u+m7v+m8pOm8o+m8oum9lOm+oOWEseWEreWEruWamOWanOWal+WamuWaneWameWlsOWsvOWxqeWxquW3gOW5reW5ruaHmOaHn+aHreaHruaHseaHquaHsOaHq+aHluaHqeaTv+aUhOaTveaTuOaUgeaUg+aTvOaWlOaXm+abmuabm+abmOarheaqueaqvearoearhuaquuaqtuaqt+arh+aqtOaqreatnuavieawi+eAh+eAjOeAjeeAgeeAheeAlOeAjua/v+eAgOa/u+eApua/vOa/t+eAiueIgeeHv+eHueeIg+eHveeNtlwiXSxbXCJmMDQwXCIsXCLnkrjnk4DnkrXnk4Hnkr7nkrbnkrvnk4LnlJTnlJPnmZznmaTnmZnnmZDnmZPnmZfnmZrnmqbnmr3nm6znn4Lnnrrno7/npIznpJPnpJTnpInnpJDnpJLnpJHnpq3npqznqZ/nsJznsKnnsJnnsKDnsJ/nsK3nsJ3nsKbnsKjnsKLnsKXnsLDnuZznuZDnuZbnuaPnuZjnuaLnuZ/nuZHnuaDnuZfnuZPnvrXnvrPnv7fnv7jogbXoh5Hoh5JcIl0sW1wiZjBhMVwiLFwi6IeQ6Imf6Ime6Ja06JeG6JeA6JeD6JeC6Jaz6Ja16Ja96JeH6JeE6Ja/6JeL6JeO6JeI6JeF6Jax6Ja26JeS6Jik6Ja46Ja36Ja+6Jmp6J+n6J+m6J+i6J+b6J+r6J+q6J+l6J+f6J+z6J+k6J+U6J+c6J+T6J+t6J+Y6J+j6J6k6J+X6J+Z6KCB6J+06J+o6J+d6KWT6KWL6KWP6KWM6KWG6KWQ6KWR6KWJ6Kyq6Kyn6Kyj6Kyz6Kyw6Ky16K2H6Kyv6Ky86Ky+6Kyx6Kyl6Ky36Kym6Ky26Kyu6Kyk6Ky76Ky96Ky66LGC6LG16LKZ6LKY6LKX6LO+6LSE6LSC6LSA6Lmc6Lmi6Lmg6LmX6LmW6Lme6Lml6LmnXCJdLFtcImYxNDBcIixcIui5m+i5mui5oei5nei5qei5lOi9hui9h+i9iOi9i+mEqOmEuumEu+mEvumGqOmGpemGp+mGr+mGqumOtemOjOmOkumOt+mOm+mOnemOiemOp+mOjumOqumOnumOpumOlemOiOmOmemOn+mOjemOsemOkemOsumOpOmOqOmOtOmOo+mOpemXkumXk+mXkemas+mbl+mbmuW3gumbn+mbmOmbnemco+mcoumcpemerOmerumeqOmeq+mepOmeqlwiXSxbXCJmMWExXCIsXCLpnqLpnqXpn5fpn5npn5bpn5jpn7rpoZDpoZHpoZLporjppYHppLzppLrpqI/pqIvpqInpqI3pqITpqJHpqIrpqIXpqIfpqIbpq4Dpq5zprIjprITprIXprKnprLXprYrprYzprYvpr4fpr4bpr4Pprr/pr4HprrXprrjpr5Pprrbpr4Tprrnprr3ptZzptZPptY/ptYrptZvptYvptZnptZbptYzptZfptZLptZTptZ/ptZjptZrpuo7puozpu5/pvIHpvIDpvJbpvKXpvKvpvKrpvKnpvKjpvYzpvZXlhLTlhLXlipbli7fljrTlmqvlmq3lmqblmqflmqrlmqzlo5rlo53lo5vlpJLlrL3lrL7lrL/lt4PlubBcIl0sW1wiZjI0MFwiLFwi5b6/5oe75pSH5pSQ5pSN5pSJ5pSM5pSO5paE5pee5ped5pue5qun5qug5quM5quR5quZ5quL5quf5quc5quQ5qur5quP5quN5que5q2g5q6w5rCM54CZ54Cn54Cg54CW54Cr54Ch54Ci54Cj54Cp54CX54Ck54Cc54Cq54iM54iK54iH54iC54iF54ql54qm54qk54qj54qh55OL55OF55K355OD55SW55mg55+J55+K55+E55+x56Sd56SbXCJdLFtcImYyYTFcIixcIuekoeeknOekl+eknuemsOepp+epqOews+ewvOewueewrOewu+ezrOezque5tue5tee5uOe5sOe5t+e5r+e5uue5sue5tOe5qOe9i+e9iue+g+e+hue+t+e/vee/vuiBuOiHl+iHleiJpOiJoeiJo+iXq+iXseiXreiXmeiXoeiXqOiXmuiXl+iXrOiXsuiXuOiXmOiXn+iXo+iXnOiXkeiXsOiXpuiXr+iXnuiXouiggOifuuigg+iftuift+igieigjOigi+ighuifvOigiOifv+igiuigguilouilmuilm+ill+iloeilnOilmOilneilmeimiOimt+imtuintuitkOitiOitiuitgOitk+itluitlOiti+itlVwiXSxbXCJmMzQwXCIsXCLorZHorYLorZLorZfosYPosbfosbbosprotIbotIfotInotqzotqrotq3otqvoua3oubjoubPouaroua/oubvou4LovZLovZHovY/ovZDovZPovrTphYDphL/phrDphq3pj57pj4fpj4/pj4Lpj5rpj5Dpj7npj6zpj4zpj5npjqnpj6bpj4rpj5Tpj67pj6Ppj5Xpj4Tpj47pj4Dpj5Lpj6fplb3pl5rpl5vpm6HpnKnpnKvpnKzpnKjpnKZcIl0sW1wiZjNhMVwiLFwi6Z6z6Z636Z626Z+d6Z+e6Z+f6aGc6aGZ6aGd6aGX6aK/6aK96aK76aK+6aWI6aWH6aWD6aam6aan6aia6aiV6ail6aid6aik6aib6aii6aig6ain6aij6aie6aic6aiU6auC6ayL6ayK6ayO6ayM6ay36a+q6a+r6a+g6a+e6a+k6a+m6a+i6a+w6a+U6a+X6a+s6a+c6a+Z6a+l6a+V6a+h6a+a6bW36baB6baK6baE6baI6bWx6baA6bW46baG6baL6baM6bW96bWr6bW06bW16bWw6bWp6baF6bWz6bW76baC6bWv6bW56bW/6baH6bWo6bqU6bqR6buA6bu86byt6b2A6b2B6b2N6b2W6b2X6b2Y5Yy35ZqyXCJdLFtcImY0NDBcIixcIuWateWas+Wjo+WtheW3huW3h+W7ruW7r+W/gOW/geaHueaUl+aUluaUleaUk+aXn+abqOabo+abpOars+arsOarquarqOaruearsearruarr+eAvOeAteeAr+eAt+eAtOeAseeBgueAuOeAv+eAuueAueeBgOeAu+eAs+eBgeeIk+eIlOeKqOeNveeNvOeSuueaq+eaqueavuebreefjOefjuefj+efjeefsuekpeeko+ekp+ekqOekpOekqVwiXSxbXCJmNGExXCIsXCLnprLnqa7nqaznqa3nq7fnsYnnsYjnsYrnsYfnsYXns67nubvnub7nuoHnuoDnvrrnv7/ogbnoh5voh5noiIvoiajoianomKLol7/omIHol77omJvomIDol7bomITomInomIXomIzol73ooJnooJDooJHooJfooJPooJbopaPopaboprnop7foraDorarorZ3orajoraPoraXorafora3otq7ouobouojouoTovZnovZbovZfovZXovZjovZrpgo3phYPphYHphrfphrXphrLphrPpkIvpkJPpj7vpkKDpkI/pkJTpj77pkJXpkJDpkKjpkJnpkI3pj7XpkIDpj7fpkIfpkI7pkJbpkJLpj7rpkInpj7jpkIrpj79cIl0sW1wiZjU0MFwiLFwi6Y+86ZCM6Y+26ZCR6ZCG6Zee6Zeg6Zef6Zyu6Zyv6Z656Z676Z+96Z++6aGg6aGi6aGj6aGf6aOB6aOC6aWQ6aWO6aWZ6aWM6aWL6aWT6aiy6ai06aix6ais6aiq6ai26aip6aiu6ai46ait6auH6auK6auG6ayQ6ayS6ayR6bCL6bCI6a+36bCF6bCS6a+46bGA6bCH6bCO6bCG6bCX6bCU6bCJ6baf6baZ6bak6bad6baS6baY6baQ6babXCJdLFtcImY1YTFcIixcIum2oOm2lOm2nOm2qum2l+m2oem2mum2oum2qOm2num2o+m2v+m2qem2lum2pum2p+m6mem6m+m6mum7pem7pOm7p+m7pum8sOm8rum9m+m9oOm9num9nem9mem+keWEuuWEueWKmOWKl+Wbg+WaveWavuWtiOWth+W3i+W3j+W7seaHveaUm+asguarvOasg+aruOasgOeBg+eBhOeBiueBiOeBieeBheeBhueIneeImueImeeNvueUl+eZquefkOekreekseekr+exlOexk+ezsue6iue6h+e6iOe6i+e6hue6jee9jee+u+iAsOiHneiYmOiYquiYpuiYn+iYo+iYnOiYmeiYp+iYruiYoeiYoOiYqeiYnuiYpVwiXSxbXCJmNjQwXCIsXCLooKnooJ3ooJvooKDooKTooJzooKvooYropa3opanopa7opavop7rorbnorbjorYXorbrorbvotJDotJTotq/ouo7ouozovZ7ovZvovZ3phYbphYTphYXphrnpkL/pkLvpkLbpkKnpkL3pkLzpkLDpkLnpkKrpkLfpkKzpkYDpkLHpl6Xpl6Tpl6PpnLXpnLrpnr/pn6HpoaTpo4npo4bpo4DppZjppZbpqLnpqL3pqYbpqYTpqYLpqYHpqLpcIl0sW1wiZjZhMVwiLFwi6ai/6auN6ayV6ayX6ayY6ayW6ay66a2S6bCr6bCd6bCc6bCs6bCj6bCo6bCp6bCk6bCh6ba36ba26ba86beB6beH6beK6beP6ba+6beF6beD6ba76ba16beO6ba56ba66bas6beI6bax6bat6beM6baz6beN6bay6bm66bqc6bur6buu6but6byb6byY6bya6byx6b2O6b2l6b2k6b6S5Lq55ZuG5ZuF5ZuL5aWx5a2L5a2M5beV5beR5buy5pSh5pSg5pSm5pSi5qyL5qyI5qyJ5rCN54GV54GW54GX54GS54ie54if54qp542/55OY55OV55OZ55OX55mt55qt56S156a056mw56mx57GX57Gc57GZ57Gb57GaXCJdLFtcImY3NDBcIixcIueztOezsee6kee9j+e+h+iHnuiJq+iYtOiYteiYs+iYrOiYsuiYtuigrOigqOigpuigquigpeilseimv+imvuinu+itvuiuhOiuguiuhuiuheitv+i0lei6lei6lOi6mui6kui6kOi6lui6l+i9oOi9oumFh+mRjOmRkOmRiumRi+mRj+mRh+mRhemRiOmRiemRhumcv+mfo+mhqumhqemji+mllOmlm+mpjumpk+mplOmpjOmpj+mpiOmpilwiXSxbXCJmN2ExXCIsXCLpqYnpqZLpqZDpq5DprJnprKvprLvprZbprZXpsYbpsYjpsL/psYTpsLnpsLPpsYHpsLzpsLfpsLTpsLLpsL3psLbpt5vpt5Lpt57pt5rpt4vpt5Dpt5zpt5Hpt5/pt6npt5npt5jpt5bpt7Xpt5Xpt53purbpu7DpvLXpvLPpvLLpvYLpvavpvpXpvqLlhL3lipnlo6jlo6flpbLlrY3lt5jooK/lvY/miIHmiIPmiITmlKnmlKXmlpbmm6vmrJHmrJLmrI/mr4rngZvngZrniKLnjoLnjoHnjoPnmbDnn5TnsafnsabnupXoiazomLromYDomLnomLzomLHomLvomL7ooLDooLLooK7ooLPopbbopbTopbPop75cIl0sW1wiZjg0MFwiLFwi6K6M6K6O6K6L6K6I6LGF6LSZ6LqY6L2k6L2j6Ya86ZGi6ZGV6ZGd6ZGX6ZGe6Z+E6Z+F6aCA6amW6amZ6aye6ayf6ayg6bGS6bGY6bGQ6bGK6bGN6bGL6bGV6bGZ6bGM6bGO6be76be36bev6bej6ber6be46bek6be26beh6beu6bem6bey6bew6bei6bes6be06bez6beo6bet6buC6buQ6buy6buz6byG6byc6by46by36by26b2D6b2PXCJdLFtcImY4YTFcIixcIum9sem9sOm9rum9r+Wbk+WbjeWtjuWxreaUreabreabruask+eBn+eBoeeBneeBoOeIo+eTm+eTpeefleekuOemt+emtuexque6l+e+ieiJreiZg+iguOigt+igteihi+iulOiulei6nui6n+i6oOi6nemGvumGvemHgumRq+mRqOmRqembpemdhumdg+mdh+mfh+mfpempnumrlemtmemxo+mxp+mxpumxoumxnumxoOm4gum3vum4h+m4g+m4hum4hem4gOm4gem4iem3v+m3vem4hOm6oOm8num9hum9tOm9tem9tuWblOaUruaWuOasmOasmeasl+asmueBoueIpueKquefmOefmeekueexqeexq+eztue6mlwiXSxbXCJmOTQwXCIsXCLnupjnupvnupnoh6Doh6HomYbomYfomYjopbnopbropbzopbvop7/orpjorpnouqXouqTouqPpka7pka3pka/pkbHpkbPpnYnpobLppZ/psajpsa7psa3puIvpuI3puJDpuI/puJLpuJHpuqHpu7XpvInpvYfpvbjpvbvpvbrpvbnlnJ7ngabnsa/ooLzotrLouqbph4PpkbTpkbjpkbbpkbXpqaDpsbTpsbPpsbHpsbXpuJTpuJPpu7bpvIpcIl0sW1wiZjlhMVwiLFwi6b6k54Go54Gl57O36Jmq6KC+6KC96KC/6K6e6LKc6Lqp6LuJ6Z2L6aGz6aG06aOM6aWh6aar6amk6amm6amn6ayk6biV6biX6b2I5oiH5qye54in6JmM6Lqo6ZKC6ZKA6ZKB6amp6amo6ayu6biZ54ip6JmL6K6f6ZKD6bG56bq355m16amr6bG66bid54Gp54Gq6bqk6b2+6b2J6b6Y56KB6Yq56KOP5aK75oGS57Kn5au64pWU4pWm4pWX4pWg4pWs4pWj4pWa4pWp4pWd4pWS4pWk4pWV4pWe4pWq4pWh4pWY4pWn4pWb4pWT4pWl4pWW4pWf4pWr4pWi4pWZ4pWo4pWc4pWR4pWQ4pWt4pWu4pWw4pWv4paTXCJdXVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvY3A5NTAuanNvblxuLy8gbW9kdWxlIGlkID0gODFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiB1bnBpcGVcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVucGlwZVxuXG4vKipcbiAqIERldGVybWluZSBpZiB0aGVyZSBhcmUgTm9kZS5qcyBwaXBlLWxpa2UgZGF0YSBsaXN0ZW5lcnMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGhhc1BpcGVEYXRhTGlzdGVuZXJzKHN0cmVhbSkge1xuICB2YXIgbGlzdGVuZXJzID0gc3RyZWFtLmxpc3RlbmVycygnZGF0YScpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobGlzdGVuZXJzW2ldLm5hbWUgPT09ICdvbmRhdGEnKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIFVucGlwZSBhIHN0cmVhbSBmcm9tIGFsbCBkZXN0aW5hdGlvbnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0cmVhbVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHVucGlwZShzdHJlYW0pIHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBzdHJlYW0gaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0udW5waXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gbmV3LXN0eWxlXG4gICAgc3RyZWFtLnVucGlwZSgpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBOb2RlLmpzIDAuOCBoYWNrXG4gIGlmICghaGFzUGlwZURhdGFMaXN0ZW5lcnMoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGxpc3RlbmVyXG4gIHZhciBsaXN0ZW5lcnMgPSBzdHJlYW0ubGlzdGVuZXJzKCdjbG9zZScpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXVxuXG4gICAgaWYgKGxpc3RlbmVyLm5hbWUgIT09ICdjbGVhbnVwJyAmJiBsaXN0ZW5lci5uYW1lICE9PSAnb25jbG9zZScpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gaW52b2tlIHRoZSBsaXN0ZW5lclxuICAgIGxpc3RlbmVyLmNhbGwoc3RyZWFtKVxuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvdW5waXBlL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIG1pbWUtdHlwZXNcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkYiA9IHJlcXVpcmUoJ21pbWUtZGInKVxudmFyIGV4dG5hbWUgPSByZXF1aXJlKCdwYXRoJykuZXh0bmFtZVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBFWFRSQUNUX1RZUEVfUkVHRVhQID0gL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpL1xudmFyIFRFWFRfVFlQRV9SRUdFWFAgPSAvXnRleHRcXC8vaVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY2hhcnNldCA9IGNoYXJzZXRcbmV4cG9ydHMuY2hhcnNldHMgPSB7IGxvb2t1cDogY2hhcnNldCB9XG5leHBvcnRzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbmV4cG9ydHMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uXG5leHBvcnRzLmV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cFxuZXhwb3J0cy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLy8gUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMvdHlwZXMgbWFwc1xucG9wdWxhdGVNYXBzKGV4cG9ydHMuZXh0ZW5zaW9ucywgZXhwb3J0cy50eXBlcylcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNoYXJzZXQgKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuICB2YXIgbWltZSA9IG1hdGNoICYmIGRiW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKG1pbWUgJiYgbWltZS5jaGFyc2V0KSB7XG4gICAgcmV0dXJuIG1pbWUuY2hhcnNldFxuICB9XG5cbiAgLy8gZGVmYXVsdCB0ZXh0LyogdG8gdXRmLThcbiAgaWYgKG1hdGNoICYmIFRFWFRfVFlQRV9SRUdFWFAudGVzdChtYXRjaFsxXSkpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBDb250ZW50LVR5cGUgaGVhZGVyIGdpdmVuIGEgTUlNRSB0eXBlIG9yIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50VHlwZSAoc3RyKSB7XG4gIC8vIFRPRE86IHNob3VsZCB0aGlzIGV2ZW4gYmUgaW4gdGhpcyBtb2R1bGU/XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgbWltZSA9IHN0ci5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBleHBvcnRzLmxvb2t1cChzdHIpXG4gICAgOiBzdHJcblxuICBpZiAoIW1pbWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBjb250ZW50LXR5cGUgb3Igb3RoZXIgbW9kdWxlXG4gIGlmIChtaW1lLmluZGV4T2YoJ2NoYXJzZXQnKSA9PT0gLTEpIHtcbiAgICB2YXIgY2hhcnNldCA9IGV4cG9ydHMuY2hhcnNldChtaW1lKVxuICAgIGlmIChjaGFyc2V0KSBtaW1lICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIG1pbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5zaW9uICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcblxuICAvLyBnZXQgZXh0ZW5zaW9uc1xuICB2YXIgZXh0cyA9IG1hdGNoICYmIGV4cG9ydHMuZXh0ZW5zaW9uc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHRzWzBdXG59XG5cbi8qKlxuICogTG9va3VwIHRoZSBNSU1FIHR5cGUgZm9yIGEgZmlsZSBwYXRoL2V4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gbG9va3VwIChwYXRoKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgZXh0ZW5zaW9uIChcImV4dFwiIG9yIFwiLmV4dFwiIG9yIGZ1bGwgcGF0aClcbiAgdmFyIGV4dGVuc2lvbiA9IGV4dG5hbWUoJ3guJyArIHBhdGgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3Vic3RyKDEpXG5cbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLnR5cGVzW2V4dGVuc2lvbl0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucyBhbmQgdHlwZXMgbWFwcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9wdWxhdGVNYXBzIChleHRlbnNpb25zLCB0eXBlcykge1xuICAvLyBzb3VyY2UgcHJlZmVyZW5jZSAobGVhc3QgLT4gbW9zdClcbiAgdmFyIHByZWZlcmVuY2UgPSBbJ25naW54JywgJ2FwYWNoZScsIHVuZGVmaW5lZCwgJ2lhbmEnXVxuXG4gIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hNaW1lVHlwZSAodHlwZSkge1xuICAgIHZhciBtaW1lID0gZGJbdHlwZV1cbiAgICB2YXIgZXh0cyA9IG1pbWUuZXh0ZW5zaW9uc1xuXG4gICAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gbWltZSAtPiBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNcblxuICAgIC8vIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0c1tpXVxuXG4gICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSkge1xuICAgICAgICB2YXIgZnJvbSA9IHByZWZlcmVuY2UuaW5kZXhPZihkYlt0eXBlc1tleHRlbnNpb25dXS5zb3VyY2UpXG4gICAgICAgIHZhciB0byA9IHByZWZlcmVuY2UuaW5kZXhPZihtaW1lLnNvdXJjZSlcblxuICAgICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgJiZcbiAgICAgICAgICAoZnJvbSA+IHRvIHx8IChmcm9tID09PSB0byAmJiB0eXBlc1tleHRlbnNpb25dLnN1YnN0cigwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nKSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoZSByZW1hcHBpbmdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB0aGUgZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICAgIHR5cGVzW2V4dGVuc2lvbl0gPSB0eXBlXG4gICAgfVxuICB9KVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDgzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBoZXhUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICBhcnJheS5wdXNoKCclJyArICgoaSA8IDE2ID8gJzAnIDogJycpICsgaS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn0oKSk7XG5cbnZhciBjb21wYWN0UXVldWUgPSBmdW5jdGlvbiBjb21wYWN0UXVldWUocXVldWUpIHtcbiAgICB2YXIgb2JqO1xuXG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlLnBvcCgpO1xuICAgICAgICBvYmogPSBpdGVtLm9ialtpdGVtLnByb3BdO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHZhciBjb21wYWN0ZWQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvYmoubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ialtqXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGFjdGVkLnB1c2gob2JqW2pdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0ub2JqW2l0ZW0ucHJvcF0gPSBjb21wYWN0ZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxuZXhwb3J0cy5hcnJheVRvT2JqZWN0ID0gZnVuY3Rpb24gYXJyYXlUb09iamVjdChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0gb3B0aW9ucyAmJiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9ialtpXSA9IHNvdXJjZVtpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnRzLm1lcmdlID0gZnVuY3Rpb24gbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICB0YXJnZXQucHVzaChzb3VyY2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wbGFpbk9iamVjdHMgfHwgb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMgfHwgIWhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbc291cmNlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBbdGFyZ2V0XS5jb25jYXQoc291cmNlKTtcbiAgICB9XG5cbiAgICB2YXIgbWVyZ2VUYXJnZXQgPSB0YXJnZXQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIG1lcmdlVGFyZ2V0ID0gZXhwb3J0cy5hcnJheVRvT2JqZWN0KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFtpXSAmJiB0eXBlb2YgdGFyZ2V0W2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBleHBvcnRzLm1lcmdlKHRhcmdldFtpXSwgaXRlbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuXG4gICAgICAgIGlmIChoYXMuY2FsbChhY2MsIGtleSkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gZXhwb3J0cy5tZXJnZShhY2Nba2V5XSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG1lcmdlVGFyZ2V0KTtcbn07XG5cbmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gYXNzaWduU2luZ2xlU291cmNlKHRhcmdldCwgc291cmNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICBhY2Nba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHRhcmdldCk7XG59O1xuXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0ci5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyaWFuIFdoaXRlIChtc2NkZXgpIGZvciB0aGUgaW8uanMgY29yZSBxdWVyeXN0cmluZyBsaWJyYXJ5LlxuICAgIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBzdHIgOiBTdHJpbmcoc3RyKTtcblxuICAgIHZhciBvdXQgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgYyA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGMgPT09IDB4MkQgLy8gLVxuICAgICAgICAgICAgfHwgYyA9PT0gMHgyRSAvLyAuXG4gICAgICAgICAgICB8fCBjID09PSAweDVGIC8vIF9cbiAgICAgICAgICAgIHx8IGMgPT09IDB4N0UgLy8gflxuICAgICAgICAgICAgfHwgKGMgPj0gMHgzMCAmJiBjIDw9IDB4MzkpIC8vIDAtOVxuICAgICAgICAgICAgfHwgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEpIC8vIGEtelxuICAgICAgICAgICAgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpIC8vIEEtWlxuICAgICAgICApIHtcbiAgICAgICAgICAgIG91dCArPSBzdHJpbmcuY2hhckF0KGkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIGhleFRhYmxlW2NdO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyAoaGV4VGFibGVbMHhDMCB8IChjID4+IDYpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPj0gMHhFMDAwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyAoaGV4VGFibGVbMHhFMCB8IChjID4+IDEyKV0gKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaSArPSAxO1xuICAgICAgICBjID0gMHgxMDAwMCArICgoKGMgJiAweDNGRikgPDwgMTApIHwgKHN0cmluZy5jaGFyQ29kZUF0KGkpICYgMHgzRkYpKTtcbiAgICAgICAgb3V0ICs9IGhleFRhYmxlWzB4RjAgfCAoYyA+PiAxOCldXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gMTIpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV1cbiAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG5leHBvcnRzLmNvbXBhY3QgPSBmdW5jdGlvbiBjb21wYWN0KHZhbHVlKSB7XG4gICAgdmFyIHF1ZXVlID0gW3sgb2JqOiB7IG86IHZhbHVlIH0sIHByb3A6ICdvJyB9XTtcbiAgICB2YXIgcmVmcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlW2ldO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbal07XG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmIHJlZnMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goeyBvYmo6IG9iaiwgcHJvcDoga2V5IH0pO1xuICAgICAgICAgICAgICAgIHJlZnMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhY3RRdWV1ZShxdWV1ZSk7XG59O1xuXG5leHBvcnRzLmlzUmVnRXhwID0gZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBSZWdFeHBdJztcbn07XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlcihvYmopIHtcbiAgICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gISEob2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi91dGlscy5qc1xuLy8gbW9kdWxlIGlkID0gODRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciBwZXJjZW50VHdlbnRpZXMgPSAvJTIwL2c7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgICdkZWZhdWx0JzogJ1JGQzM5ODYnLFxuICAgIGZvcm1hdHRlcnM6IHtcbiAgICAgICAgUkZDMTczODogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZS5jYWxsKHZhbHVlLCBwZXJjZW50VHdlbnRpZXMsICcrJyk7XG4gICAgICAgIH0sXG4gICAgICAgIFJGQzM5ODY6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBSRkMxNzM4OiAnUkZDMTczOCcsXG4gICAgUkZDMzk4NjogJ1JGQzM5ODYnXG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9mb3JtYXRzLmpzXG4vLyBtb2R1bGUgaWQgPSA4NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJxdWVyeXN0cmluZ1wiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInF1ZXJ5c3RyaW5nXCJcbi8vIG1vZHVsZSBpZCA9IDg2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVybFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInVybFwiXG4vLyBtb2R1bGUgaWQgPSA4N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGV4cHJlc3NcbiAqIENvcHlyaWdodChjKSAyMDA5LTIwMTMgVEogSG9sb3dheWNodWtcbiAqIENvcHlyaWdodChjKSAyMDEzIFJvbWFuIFNodHlsbWFuXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIFJvdXRlID0gcmVxdWlyZSgnLi9yb3V0ZScpO1xudmFyIExheWVyID0gcmVxdWlyZSgnLi9sYXllcicpO1xudmFyIG1ldGhvZHMgPSByZXF1aXJlKCdtZXRob2RzJyk7XG52YXIgbWl4aW4gPSByZXF1aXJlKCd1dGlscy1tZXJnZScpO1xudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZXhwcmVzczpyb3V0ZXInKTtcbnZhciBkZXByZWNhdGUgPSByZXF1aXJlKCdkZXBkJykoJ2V4cHJlc3MnKTtcbnZhciBmbGF0dGVuID0gcmVxdWlyZSgnYXJyYXktZmxhdHRlbicpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgncGFyc2V1cmwnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJ3NldHByb3RvdHlwZW9mJylcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgb2JqZWN0UmVnRXhwID0gL15cXFtvYmplY3QgKFxcUyspXFxdJC87XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJvdXRlcmAgd2l0aCB0aGUgZ2l2ZW4gYG9wdGlvbnNgLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtSb3V0ZXJ9IHdoaWNoIGlzIGFuIGNhbGxhYmxlIGZ1bmN0aW9uXG4gKiBAcHVibGljXG4gKi9cblxudmFyIHByb3RvID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHZhciBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICBmdW5jdGlvbiByb3V0ZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICByb3V0ZXIuaGFuZGxlKHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIC8vIG1peGluIFJvdXRlciBjbGFzcyBmdW5jdGlvbnNcbiAgc2V0UHJvdG90eXBlT2Yocm91dGVyLCBwcm90bylcblxuICByb3V0ZXIucGFyYW1zID0ge307XG4gIHJvdXRlci5fcGFyYW1zID0gW107XG4gIHJvdXRlci5jYXNlU2Vuc2l0aXZlID0gb3B0cy5jYXNlU2Vuc2l0aXZlO1xuICByb3V0ZXIubWVyZ2VQYXJhbXMgPSBvcHRzLm1lcmdlUGFyYW1zO1xuICByb3V0ZXIuc3RyaWN0ID0gb3B0cy5zdHJpY3Q7XG4gIHJvdXRlci5zdGFjayA9IFtdO1xuXG4gIHJldHVybiByb3V0ZXI7XG59O1xuXG4vKipcbiAqIE1hcCB0aGUgZ2l2ZW4gcGFyYW0gcGxhY2Vob2xkZXIgYG5hbWVgKHMpIHRvIHRoZSBnaXZlbiBjYWxsYmFjay5cbiAqXG4gKiBQYXJhbWV0ZXIgbWFwcGluZyBpcyB1c2VkIHRvIHByb3ZpZGUgcHJlLWNvbmRpdGlvbnMgdG8gcm91dGVzXG4gKiB3aGljaCB1c2Ugbm9ybWFsaXplZCBwbGFjZWhvbGRlcnMuIEZvciBleGFtcGxlIGEgXzp1c2VyX2lkXyBwYXJhbWV0ZXJcbiAqIGNvdWxkIGF1dG9tYXRpY2FsbHkgbG9hZCBhIHVzZXIncyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkYXRhYmFzZSB3aXRob3V0XG4gKiBhbnkgYWRkaXRpb25hbCBjb2RlLFxuICpcbiAqIFRoZSBjYWxsYmFjayB1c2VzIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyBtaWRkbGV3YXJlLCB0aGUgb25seSBkaWZmZXJlbmNlXG4gKiBiZWluZyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgcGxhY2Vob2xkZXIgaXMgcGFzc2VkLCBpbiB0aGlzIGNhc2UgdGhlIF9pZF9cbiAqIG9mIHRoZSB1c2VyLiBPbmNlIHRoZSBgbmV4dCgpYCBmdW5jdGlvbiBpcyBpbnZva2VkLCBqdXN0IGxpa2UgbWlkZGxld2FyZVxuICogaXQgd2lsbCBjb250aW51ZSBvbiB0byBleGVjdXRlIHRoZSByb3V0ZSwgb3Igc3Vic2VxdWVudCBwYXJhbWV0ZXIgZnVuY3Rpb25zLlxuICpcbiAqIEp1c3QgbGlrZSBpbiBtaWRkbGV3YXJlLCB5b3UgbXVzdCBlaXRoZXIgcmVzcG9uZCB0byB0aGUgcmVxdWVzdCBvciBjYWxsIG5leHRcbiAqIHRvIGF2b2lkIHN0YWxsaW5nIHRoZSByZXF1ZXN0LlxuICpcbiAqICBhcHAucGFyYW0oJ3VzZXJfaWQnLCBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCwgaWQpe1xuICogICAgVXNlci5maW5kKGlkLCBmdW5jdGlvbihlcnIsIHVzZXIpe1xuICogICAgICBpZiAoZXJyKSB7XG4gKiAgICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAqICAgICAgfSBlbHNlIGlmICghdXNlcikge1xuICogICAgICAgIHJldHVybiBuZXh0KG5ldyBFcnJvcignZmFpbGVkIHRvIGxvYWQgdXNlcicpKTtcbiAqICAgICAgfVxuICogICAgICByZXEudXNlciA9IHVzZXI7XG4gKiAgICAgIG5leHQoKTtcbiAqICAgIH0pO1xuICogIH0pO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7YXBwfSBmb3IgY2hhaW5pbmdcbiAqIEBwdWJsaWNcbiAqL1xuXG5wcm90by5wYXJhbSA9IGZ1bmN0aW9uIHBhcmFtKG5hbWUsIGZuKSB7XG4gIC8vIHBhcmFtIGxvZ2ljXG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRlcHJlY2F0ZSgncm91dGVyLnBhcmFtKGZuKTogUmVmYWN0b3IgdG8gdXNlIHBhdGggcGFyYW1zJyk7XG4gICAgdGhpcy5fcGFyYW1zLnB1c2gobmFtZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gYXBwbHkgcGFyYW0gZnVuY3Rpb25zXG4gIHZhciBwYXJhbXMgPSB0aGlzLl9wYXJhbXM7XG4gIHZhciBsZW4gPSBwYXJhbXMubGVuZ3RoO1xuICB2YXIgcmV0O1xuXG4gIGlmIChuYW1lWzBdID09PSAnOicpIHtcbiAgICBkZXByZWNhdGUoJ3JvdXRlci5wYXJhbSgnICsgSlNPTi5zdHJpbmdpZnkobmFtZSkgKyAnLCBmbik6IFVzZSByb3V0ZXIucGFyYW0oJyArIEpTT04uc3RyaW5naWZ5KG5hbWUuc3Vic3RyKDEpKSArICcsIGZuKSBpbnN0ZWFkJyk7XG4gICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEpO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChyZXQgPSBwYXJhbXNbaV0obmFtZSwgZm4pKSB7XG4gICAgICBmbiA9IHJldDtcbiAgICB9XG4gIH1cblxuICAvLyBlbnN1cmUgd2UgZW5kIHVwIHdpdGggYVxuICAvLyBtaWRkbGV3YXJlIGZ1bmN0aW9uXG4gIGlmICgnZnVuY3Rpb24nICE9PSB0eXBlb2YgZm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGFyYW0oKSBjYWxsIGZvciAnICsgbmFtZSArICcsIGdvdCAnICsgZm4pO1xuICB9XG5cbiAgKHRoaXMucGFyYW1zW25hbWVdID0gdGhpcy5wYXJhbXNbbmFtZV0gfHwgW10pLnB1c2goZm4pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXEsIHJlcyBpbnRvIHRoZSByb3V0ZXIuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnByb3RvLmhhbmRsZSA9IGZ1bmN0aW9uIGhhbmRsZShyZXEsIHJlcywgb3V0KSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBkZWJ1ZygnZGlzcGF0Y2hpbmcgJXMgJXMnLCByZXEubWV0aG9kLCByZXEudXJsKTtcblxuICB2YXIgaWR4ID0gMDtcbiAgdmFyIHByb3RvaG9zdCA9IGdldFByb3RvaG9zdChyZXEudXJsKSB8fCAnJ1xuICB2YXIgcmVtb3ZlZCA9ICcnO1xuICB2YXIgc2xhc2hBZGRlZCA9IGZhbHNlO1xuICB2YXIgcGFyYW1jYWxsZWQgPSB7fTtcblxuICAvLyBzdG9yZSBvcHRpb25zIGZvciBPUFRJT05TIHJlcXVlc3RcbiAgLy8gb25seSB1c2VkIGlmIE9QVElPTlMgcmVxdWVzdFxuICB2YXIgb3B0aW9ucyA9IFtdO1xuXG4gIC8vIG1pZGRsZXdhcmUgYW5kIHJvdXRlc1xuICB2YXIgc3RhY2sgPSBzZWxmLnN0YWNrO1xuXG4gIC8vIG1hbmFnZSBpbnRlci1yb3V0ZXIgdmFyaWFibGVzXG4gIHZhciBwYXJlbnRQYXJhbXMgPSByZXEucGFyYW1zO1xuICB2YXIgcGFyZW50VXJsID0gcmVxLmJhc2VVcmwgfHwgJyc7XG4gIHZhciBkb25lID0gcmVzdG9yZShvdXQsIHJlcSwgJ2Jhc2VVcmwnLCAnbmV4dCcsICdwYXJhbXMnKTtcblxuICAvLyBzZXR1cCBuZXh0IGxheWVyXG4gIHJlcS5uZXh0ID0gbmV4dDtcblxuICAvLyBmb3Igb3B0aW9ucyByZXF1ZXN0cywgcmVzcG9uZCB3aXRoIGEgZGVmYXVsdCBpZiBub3RoaW5nIGVsc2UgcmVzcG9uZHNcbiAgaWYgKHJlcS5tZXRob2QgPT09ICdPUFRJT05TJykge1xuICAgIGRvbmUgPSB3cmFwKGRvbmUsIGZ1bmN0aW9uKG9sZCwgZXJyKSB7XG4gICAgICBpZiAoZXJyIHx8IG9wdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gb2xkKGVycik7XG4gICAgICBzZW5kT3B0aW9uc1Jlc3BvbnNlKHJlcywgb3B0aW9ucywgb2xkKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldHVwIGJhc2ljIHJlcSB2YWx1ZXNcbiAgcmVxLmJhc2VVcmwgPSBwYXJlbnRVcmw7XG4gIHJlcS5vcmlnaW5hbFVybCA9IHJlcS5vcmlnaW5hbFVybCB8fCByZXEudXJsO1xuXG4gIG5leHQoKTtcblxuICBmdW5jdGlvbiBuZXh0KGVycikge1xuICAgIHZhciBsYXllckVycm9yID0gZXJyID09PSAncm91dGUnXG4gICAgICA/IG51bGxcbiAgICAgIDogZXJyO1xuXG4gICAgLy8gcmVtb3ZlIGFkZGVkIHNsYXNoXG4gICAgaWYgKHNsYXNoQWRkZWQpIHtcbiAgICAgIHJlcS51cmwgPSByZXEudXJsLnN1YnN0cigxKTtcbiAgICAgIHNsYXNoQWRkZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIGFsdGVyZWQgcmVxLnVybFxuICAgIGlmIChyZW1vdmVkLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcmVxLmJhc2VVcmwgPSBwYXJlbnRVcmw7XG4gICAgICByZXEudXJsID0gcHJvdG9ob3N0ICsgcmVtb3ZlZCArIHJlcS51cmwuc3Vic3RyKHByb3RvaG9zdC5sZW5ndGgpO1xuICAgICAgcmVtb3ZlZCA9ICcnO1xuICAgIH1cblxuICAgIC8vIHNpZ25hbCB0byBleGl0IHJvdXRlclxuICAgIGlmIChsYXllckVycm9yID09PSAncm91dGVyJykge1xuICAgICAgc2V0SW1tZWRpYXRlKGRvbmUsIG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBubyBtb3JlIG1hdGNoaW5nIGxheWVyc1xuICAgIGlmIChpZHggPj0gc3RhY2subGVuZ3RoKSB7XG4gICAgICBzZXRJbW1lZGlhdGUoZG9uZSwgbGF5ZXJFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IHBhdGhuYW1lIG9mIHJlcXVlc3RcbiAgICB2YXIgcGF0aCA9IGdldFBhdGhuYW1lKHJlcSk7XG5cbiAgICBpZiAocGF0aCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZG9uZShsYXllckVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBmaW5kIG5leHQgbWF0Y2hpbmcgbGF5ZXJcbiAgICB2YXIgbGF5ZXI7XG4gICAgdmFyIG1hdGNoO1xuICAgIHZhciByb3V0ZTtcblxuICAgIHdoaWxlIChtYXRjaCAhPT0gdHJ1ZSAmJiBpZHggPCBzdGFjay5sZW5ndGgpIHtcbiAgICAgIGxheWVyID0gc3RhY2tbaWR4KytdO1xuICAgICAgbWF0Y2ggPSBtYXRjaExheWVyKGxheWVyLCBwYXRoKTtcbiAgICAgIHJvdXRlID0gbGF5ZXIucm91dGU7XG5cbiAgICAgIGlmICh0eXBlb2YgbWF0Y2ggIT09ICdib29sZWFuJykge1xuICAgICAgICAvLyBob2xkIG9uIHRvIGxheWVyRXJyb3JcbiAgICAgICAgbGF5ZXJFcnJvciA9IGxheWVyRXJyb3IgfHwgbWF0Y2g7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaCAhPT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyb3V0ZSkge1xuICAgICAgICAvLyBwcm9jZXNzIG5vbi1yb3V0ZSBoYW5kbGVycyBub3JtYWxseVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxheWVyRXJyb3IpIHtcbiAgICAgICAgLy8gcm91dGVzIGRvIG5vdCBtYXRjaCB3aXRoIGEgcGVuZGluZyBlcnJvclxuICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gICAgICB2YXIgaGFzX21ldGhvZCA9IHJvdXRlLl9oYW5kbGVzX21ldGhvZChtZXRob2QpO1xuXG4gICAgICAvLyBidWlsZCB1cCBhdXRvbWF0aWMgb3B0aW9ucyByZXNwb25zZVxuICAgICAgaWYgKCFoYXNfbWV0aG9kICYmIG1ldGhvZCA9PT0gJ09QVElPTlMnKSB7XG4gICAgICAgIGFwcGVuZE1ldGhvZHMob3B0aW9ucywgcm91dGUuX29wdGlvbnMoKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRvbid0IGV2ZW4gYm90aGVyIG1hdGNoaW5nIHJvdXRlXG4gICAgICBpZiAoIWhhc19tZXRob2QgJiYgbWV0aG9kICE9PSAnSEVBRCcpIHtcbiAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gbWF0Y2hcbiAgICBpZiAobWF0Y2ggIT09IHRydWUpIHtcbiAgICAgIHJldHVybiBkb25lKGxheWVyRXJyb3IpO1xuICAgIH1cblxuICAgIC8vIHN0b3JlIHJvdXRlIGZvciBkaXNwYXRjaCBvbiBjaGFuZ2VcbiAgICBpZiAocm91dGUpIHtcbiAgICAgIHJlcS5yb3V0ZSA9IHJvdXRlO1xuICAgIH1cblxuICAgIC8vIENhcHR1cmUgb25lLXRpbWUgbGF5ZXIgdmFsdWVzXG4gICAgcmVxLnBhcmFtcyA9IHNlbGYubWVyZ2VQYXJhbXNcbiAgICAgID8gbWVyZ2VQYXJhbXMobGF5ZXIucGFyYW1zLCBwYXJlbnRQYXJhbXMpXG4gICAgICA6IGxheWVyLnBhcmFtcztcbiAgICB2YXIgbGF5ZXJQYXRoID0gbGF5ZXIucGF0aDtcblxuICAgIC8vIHRoaXMgc2hvdWxkIGJlIGRvbmUgZm9yIHRoZSBsYXllclxuICAgIHNlbGYucHJvY2Vzc19wYXJhbXMobGF5ZXIsIHBhcmFtY2FsbGVkLCByZXEsIHJlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gbmV4dChsYXllckVycm9yIHx8IGVycik7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICByZXR1cm4gbGF5ZXIuaGFuZGxlX3JlcXVlc3QocmVxLCByZXMsIG5leHQpO1xuICAgICAgfVxuXG4gICAgICB0cmltX3ByZWZpeChsYXllciwgbGF5ZXJFcnJvciwgbGF5ZXJQYXRoLCBwYXRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaW1fcHJlZml4KGxheWVyLCBsYXllckVycm9yLCBsYXllclBhdGgsIHBhdGgpIHtcbiAgICBpZiAobGF5ZXJQYXRoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBicmVha3Mgb24gYSBwYXRoIHNlcGFyYXRvclxuICAgICAgdmFyIGMgPSBwYXRoW2xheWVyUGF0aC5sZW5ndGhdXG4gICAgICBpZiAoYyAmJiBjICE9PSAnLycgJiYgYyAhPT0gJy4nKSByZXR1cm4gbmV4dChsYXllckVycm9yKVxuXG4gICAgICAvLyBUcmltIG9mZiB0aGUgcGFydCBvZiB0aGUgdXJsIHRoYXQgbWF0Y2hlcyB0aGUgcm91dGVcbiAgICAgIC8vIG1pZGRsZXdhcmUgKC51c2Ugc3R1ZmYpIG5lZWRzIHRvIGhhdmUgdGhlIHBhdGggc3RyaXBwZWRcbiAgICAgIGRlYnVnKCd0cmltIHByZWZpeCAoJXMpIGZyb20gdXJsICVzJywgbGF5ZXJQYXRoLCByZXEudXJsKTtcbiAgICAgIHJlbW92ZWQgPSBsYXllclBhdGg7XG4gICAgICByZXEudXJsID0gcHJvdG9ob3N0ICsgcmVxLnVybC5zdWJzdHIocHJvdG9ob3N0Lmxlbmd0aCArIHJlbW92ZWQubGVuZ3RoKTtcblxuICAgICAgLy8gRW5zdXJlIGxlYWRpbmcgc2xhc2hcbiAgICAgIGlmICghcHJvdG9ob3N0ICYmIHJlcS51cmxbMF0gIT09ICcvJykge1xuICAgICAgICByZXEudXJsID0gJy8nICsgcmVxLnVybDtcbiAgICAgICAgc2xhc2hBZGRlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldHVwIGJhc2UgVVJMIChubyB0cmFpbGluZyBzbGFzaClcbiAgICAgIHJlcS5iYXNlVXJsID0gcGFyZW50VXJsICsgKHJlbW92ZWRbcmVtb3ZlZC5sZW5ndGggLSAxXSA9PT0gJy8nXG4gICAgICAgID8gcmVtb3ZlZC5zdWJzdHJpbmcoMCwgcmVtb3ZlZC5sZW5ndGggLSAxKVxuICAgICAgICA6IHJlbW92ZWQpO1xuICAgIH1cblxuICAgIGRlYnVnKCclcyAlcyA6ICVzJywgbGF5ZXIubmFtZSwgbGF5ZXJQYXRoLCByZXEub3JpZ2luYWxVcmwpO1xuXG4gICAgaWYgKGxheWVyRXJyb3IpIHtcbiAgICAgIGxheWVyLmhhbmRsZV9lcnJvcihsYXllckVycm9yLCByZXEsIHJlcywgbmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxheWVyLmhhbmRsZV9yZXF1ZXN0KHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogUHJvY2VzcyBhbnkgcGFyYW1ldGVycyBmb3IgdGhlIGxheWVyLlxuICogQHByaXZhdGVcbiAqL1xuXG5wcm90by5wcm9jZXNzX3BhcmFtcyA9IGZ1bmN0aW9uIHByb2Nlc3NfcGFyYW1zKGxheWVyLCBjYWxsZWQsIHJlcSwgcmVzLCBkb25lKSB7XG4gIHZhciBwYXJhbXMgPSB0aGlzLnBhcmFtcztcblxuICAvLyBjYXB0dXJlZCBwYXJhbWV0ZXJzIGZyb20gdGhlIGxheWVyLCBrZXlzIGFuZCB2YWx1ZXNcbiAgdmFyIGtleXMgPSBsYXllci5rZXlzO1xuXG4gIC8vIGZhc3QgdHJhY2tcbiAgaWYgKCFrZXlzIHx8IGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGRvbmUoKTtcbiAgfVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIG5hbWU7XG4gIHZhciBwYXJhbUluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgdmFyIHBhcmFtVmFsO1xuICB2YXIgcGFyYW1DYWxsYmFja3M7XG4gIHZhciBwYXJhbUNhbGxlZDtcblxuICAvLyBwcm9jZXNzIHBhcmFtcyBpbiBvcmRlclxuICAvLyBwYXJhbSBjYWxsYmFja3MgY2FuIGJlIGFzeW5jXG4gIGZ1bmN0aW9uIHBhcmFtKGVycikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBkb25lKGVycik7XG4gICAgfVxuXG4gICAgaWYgKGkgPj0ga2V5cy5sZW5ndGggKSB7XG4gICAgICByZXR1cm4gZG9uZSgpO1xuICAgIH1cblxuICAgIHBhcmFtSW5kZXggPSAwO1xuICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICBuYW1lID0ga2V5Lm5hbWU7XG4gICAgcGFyYW1WYWwgPSByZXEucGFyYW1zW25hbWVdO1xuICAgIHBhcmFtQ2FsbGJhY2tzID0gcGFyYW1zW25hbWVdO1xuICAgIHBhcmFtQ2FsbGVkID0gY2FsbGVkW25hbWVdO1xuXG4gICAgaWYgKHBhcmFtVmFsID09PSB1bmRlZmluZWQgfHwgIXBhcmFtQ2FsbGJhY2tzKSB7XG4gICAgICByZXR1cm4gcGFyYW0oKTtcbiAgICB9XG5cbiAgICAvLyBwYXJhbSBwcmV2aW91c2x5IGNhbGxlZCB3aXRoIHNhbWUgdmFsdWUgb3IgZXJyb3Igb2NjdXJyZWRcbiAgICBpZiAocGFyYW1DYWxsZWQgJiYgKHBhcmFtQ2FsbGVkLm1hdGNoID09PSBwYXJhbVZhbFxuICAgICAgfHwgKHBhcmFtQ2FsbGVkLmVycm9yICYmIHBhcmFtQ2FsbGVkLmVycm9yICE9PSAncm91dGUnKSkpIHtcbiAgICAgIC8vIHJlc3RvcmUgdmFsdWVcbiAgICAgIHJlcS5wYXJhbXNbbmFtZV0gPSBwYXJhbUNhbGxlZC52YWx1ZTtcblxuICAgICAgLy8gbmV4dCBwYXJhbVxuICAgICAgcmV0dXJuIHBhcmFtKHBhcmFtQ2FsbGVkLmVycm9yKTtcbiAgICB9XG5cbiAgICBjYWxsZWRbbmFtZV0gPSBwYXJhbUNhbGxlZCA9IHtcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgbWF0Y2g6IHBhcmFtVmFsLFxuICAgICAgdmFsdWU6IHBhcmFtVmFsXG4gICAgfTtcblxuICAgIHBhcmFtQ2FsbGJhY2soKTtcbiAgfVxuXG4gIC8vIHNpbmdsZSBwYXJhbSBjYWxsYmFja3NcbiAgZnVuY3Rpb24gcGFyYW1DYWxsYmFjayhlcnIpIHtcbiAgICB2YXIgZm4gPSBwYXJhbUNhbGxiYWNrc1twYXJhbUluZGV4KytdO1xuXG4gICAgLy8gc3RvcmUgdXBkYXRlZCB2YWx1ZVxuICAgIHBhcmFtQ2FsbGVkLnZhbHVlID0gcmVxLnBhcmFtc1trZXkubmFtZV07XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICAvLyBzdG9yZSBlcnJvclxuICAgICAgcGFyYW1DYWxsZWQuZXJyb3IgPSBlcnI7XG4gICAgICBwYXJhbShlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZm4pIHJldHVybiBwYXJhbSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZuKHJlcSwgcmVzLCBwYXJhbUNhbGxiYWNrLCBwYXJhbVZhbCwga2V5Lm5hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHBhcmFtQ2FsbGJhY2soZSk7XG4gICAgfVxuICB9XG5cbiAgcGFyYW0oKTtcbn07XG5cbi8qKlxuICogVXNlIHRoZSBnaXZlbiBtaWRkbGV3YXJlIGZ1bmN0aW9uLCB3aXRoIG9wdGlvbmFsIHBhdGgsIGRlZmF1bHRpbmcgdG8gXCIvXCIuXG4gKlxuICogVXNlIChsaWtlIGAuYWxsYCkgd2lsbCBydW4gZm9yIGFueSBodHRwIE1FVEhPRCwgYnV0IGl0IHdpbGwgbm90IGFkZFxuICogaGFuZGxlcnMgZm9yIHRob3NlIG1ldGhvZHMgc28gT1BUSU9OUyByZXF1ZXN0cyB3aWxsIG5vdCBjb25zaWRlciBgLnVzZWBcbiAqIGZ1bmN0aW9ucyBldmVuIGlmIHRoZXkgY291bGQgcmVzcG9uZC5cbiAqXG4gKiBUaGUgb3RoZXIgZGlmZmVyZW5jZSBpcyB0aGF0IF9yb3V0ZV8gcGF0aCBpcyBzdHJpcHBlZCBhbmQgbm90IHZpc2libGVcbiAqIHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLiBUaGUgbWFpbiBlZmZlY3Qgb2YgdGhpcyBmZWF0dXJlIGlzIHRoYXQgbW91bnRlZFxuICogaGFuZGxlcnMgY2FuIG9wZXJhdGUgd2l0aG91dCBhbnkgY29kZSBjaGFuZ2VzIHJlZ2FyZGxlc3Mgb2YgdGhlIFwicHJlZml4XCJcbiAqIHBhdGhuYW1lLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuXG5wcm90by51c2UgPSBmdW5jdGlvbiB1c2UoZm4pIHtcbiAgdmFyIG9mZnNldCA9IDA7XG4gIHZhciBwYXRoID0gJy8nO1xuXG4gIC8vIGRlZmF1bHQgcGF0aCB0byAnLydcbiAgLy8gZGlzYW1iaWd1YXRlIHJvdXRlci51c2UoW2ZuXSlcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBhcmcgPSBmbjtcblxuICAgIHdoaWxlIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCAhPT0gMCkge1xuICAgICAgYXJnID0gYXJnWzBdO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IGFyZyBpcyB0aGUgcGF0aFxuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvZmZzZXQgPSAxO1xuICAgICAgcGF0aCA9IGZuO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjYWxsYmFja3MgPSBmbGF0dGVuKHNsaWNlLmNhbGwoYXJndW1lbnRzLCBvZmZzZXQpKTtcblxuICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JvdXRlci51c2UoKSByZXF1aXJlcyBhIG1pZGRsZXdhcmUgZnVuY3Rpb24nKVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZm4gPSBjYWxsYmFja3NbaV07XG5cbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSb3V0ZXIudXNlKCkgcmVxdWlyZXMgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIGJ1dCBnb3QgYSAnICsgZ2V0dHlwZShmbikpXG4gICAgfVxuXG4gICAgLy8gYWRkIHRoZSBtaWRkbGV3YXJlXG4gICAgZGVidWcoJ3VzZSAlbyAlcycsIHBhdGgsIGZuLm5hbWUgfHwgJzxhbm9ueW1vdXM+JylcblxuICAgIHZhciBsYXllciA9IG5ldyBMYXllcihwYXRoLCB7XG4gICAgICBzZW5zaXRpdmU6IHRoaXMuY2FzZVNlbnNpdGl2ZSxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgICBlbmQ6IGZhbHNlXG4gICAgfSwgZm4pO1xuXG4gICAgbGF5ZXIucm91dGUgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnN0YWNrLnB1c2gobGF5ZXIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBSb3V0ZSBmb3IgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogRWFjaCByb3V0ZSBjb250YWlucyBhIHNlcGFyYXRlIG1pZGRsZXdhcmUgc3RhY2sgYW5kIFZFUkIgaGFuZGxlcnMuXG4gKlxuICogU2VlIHRoZSBSb3V0ZSBhcGkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBvbiBhZGRpbmcgaGFuZGxlcnNcbiAqIGFuZCBtaWRkbGV3YXJlIHRvIHJvdXRlcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Um91dGV9XG4gKiBAcHVibGljXG4gKi9cblxucHJvdG8ucm91dGUgPSBmdW5jdGlvbiByb3V0ZShwYXRoKSB7XG4gIHZhciByb3V0ZSA9IG5ldyBSb3V0ZShwYXRoKTtcblxuICB2YXIgbGF5ZXIgPSBuZXcgTGF5ZXIocGF0aCwge1xuICAgIHNlbnNpdGl2ZTogdGhpcy5jYXNlU2Vuc2l0aXZlLFxuICAgIHN0cmljdDogdGhpcy5zdHJpY3QsXG4gICAgZW5kOiB0cnVlXG4gIH0sIHJvdXRlLmRpc3BhdGNoLmJpbmQocm91dGUpKTtcblxuICBsYXllci5yb3V0ZSA9IHJvdXRlO1xuXG4gIHRoaXMuc3RhY2sucHVzaChsYXllcik7XG4gIHJldHVybiByb3V0ZTtcbn07XG5cbi8vIGNyZWF0ZSBSb3V0ZXIjVkVSQiBmdW5jdGlvbnNcbm1ldGhvZHMuY29uY2F0KCdhbGwnKS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCl7XG4gIHByb3RvW21ldGhvZF0gPSBmdW5jdGlvbihwYXRoKXtcbiAgICB2YXIgcm91dGUgPSB0aGlzLnJvdXRlKHBhdGgpXG4gICAgcm91dGVbbWV0aG9kXS5hcHBseShyb3V0ZSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn0pO1xuXG4vLyBhcHBlbmQgbWV0aG9kcyB0byBhIGxpc3Qgb2YgbWV0aG9kc1xuZnVuY3Rpb24gYXBwZW5kTWV0aG9kcyhsaXN0LCBhZGRpdGlvbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZGl0aW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1ldGhvZCA9IGFkZGl0aW9uW2ldO1xuICAgIGlmIChsaXN0LmluZGV4T2YobWV0aG9kKSA9PT0gLTEpIHtcbiAgICAgIGxpc3QucHVzaChtZXRob2QpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBnZXQgcGF0aG5hbWUgb2YgcmVxdWVzdFxuZnVuY3Rpb24gZ2V0UGF0aG5hbWUocmVxKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlVXJsKHJlcSkucGF0aG5hbWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLy8gR2V0IGdldCBwcm90b2NvbCArIGhvc3QgZm9yIGEgVVJMXG5mdW5jdGlvbiBnZXRQcm90b2hvc3QodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyB8fCB1cmwubGVuZ3RoID09PSAwIHx8IHVybFswXSA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgdmFyIHNlYXJjaEluZGV4ID0gdXJsLmluZGV4T2YoJz8nKVxuICB2YXIgcGF0aExlbmd0aCA9IHNlYXJjaEluZGV4ICE9PSAtMVxuICAgID8gc2VhcmNoSW5kZXhcbiAgICA6IHVybC5sZW5ndGhcbiAgdmFyIGZxZG5JbmRleCA9IHVybC5zdWJzdHIoMCwgcGF0aExlbmd0aCkuaW5kZXhPZignOi8vJylcblxuICByZXR1cm4gZnFkbkluZGV4ICE9PSAtMVxuICAgID8gdXJsLnN1YnN0cigwLCB1cmwuaW5kZXhPZignLycsIDMgKyBmcWRuSW5kZXgpKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbi8vIGdldCB0eXBlIGZvciBlcnJvciBtZXNzYWdlXG5mdW5jdGlvbiBnZXR0eXBlKG9iaikge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG5cbiAgaWYgKHR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvLyBpbnNwZWN0IFtbQ2xhc3NdXSBmb3Igb2JqZWN0c1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopXG4gICAgLnJlcGxhY2Uob2JqZWN0UmVnRXhwLCAnJDEnKTtcbn1cblxuLyoqXG4gKiBNYXRjaCBwYXRoIHRvIGEgbGF5ZXIuXG4gKlxuICogQHBhcmFtIHtMYXllcn0gbGF5ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG1hdGNoTGF5ZXIobGF5ZXIsIHBhdGgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbGF5ZXIubWF0Y2gocGF0aCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBlcnI7XG4gIH1cbn1cblxuLy8gbWVyZ2UgcGFyYW1zIHdpdGggcGFyZW50IHBhcmFtc1xuZnVuY3Rpb24gbWVyZ2VQYXJhbXMocGFyYW1zLCBwYXJlbnQpIHtcbiAgaWYgKHR5cGVvZiBwYXJlbnQgIT09ICdvYmplY3QnIHx8ICFwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgLy8gbWFrZSBjb3B5IG9mIHBhcmVudCBmb3IgYmFzZVxuICB2YXIgb2JqID0gbWl4aW4oe30sIHBhcmVudCk7XG5cbiAgLy8gc2ltcGxlIG5vbi1udW1lcmljIG1lcmdpbmdcbiAgaWYgKCEoMCBpbiBwYXJhbXMpIHx8ICEoMCBpbiBwYXJlbnQpKSB7XG4gICAgcmV0dXJuIG1peGluKG9iaiwgcGFyYW1zKTtcbiAgfVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIG8gPSAwO1xuXG4gIC8vIGRldGVybWluZSBudW1lcmljIGdhcHNcbiAgd2hpbGUgKGkgaW4gcGFyYW1zKSB7XG4gICAgaSsrO1xuICB9XG5cbiAgd2hpbGUgKG8gaW4gcGFyZW50KSB7XG4gICAgbysrO1xuICB9XG5cbiAgLy8gb2Zmc2V0IG51bWVyaWMgaW5kaWNlcyBpbiBwYXJhbXMgYmVmb3JlIG1lcmdlXG4gIGZvciAoaS0tOyBpID49IDA7IGktLSkge1xuICAgIHBhcmFtc1tpICsgb10gPSBwYXJhbXNbaV07XG5cbiAgICAvLyBjcmVhdGUgaG9sZXMgZm9yIHRoZSBtZXJnZSB3aGVuIG5lY2Vzc2FyeVxuICAgIGlmIChpIDwgbykge1xuICAgICAgZGVsZXRlIHBhcmFtc1tpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWl4aW4ob2JqLCBwYXJhbXMpO1xufVxuXG4vLyByZXN0b3JlIG9iaiBwcm9wcyBhZnRlciBmdW5jdGlvblxuZnVuY3Rpb24gcmVzdG9yZShmbiwgb2JqKSB7XG4gIHZhciBwcm9wcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMik7XG4gIHZhciB2YWxzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAyKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgcHJvcHNbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIHZhbHNbaV0gPSBvYmpbcHJvcHNbaV1dO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAvLyByZXN0b3JlIHZhbHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmpbcHJvcHNbaV1dID0gdmFsc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLy8gc2VuZCBhbiBPUFRJT05TIHJlc3BvbnNlXG5mdW5jdGlvbiBzZW5kT3B0aW9uc1Jlc3BvbnNlKHJlcywgb3B0aW9ucywgbmV4dCkge1xuICB0cnkge1xuICAgIHZhciBib2R5ID0gb3B0aW9ucy5qb2luKCcsJyk7XG4gICAgcmVzLnNldCgnQWxsb3cnLCBib2R5KTtcbiAgICByZXMuc2VuZChib2R5KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbmV4dChlcnIpO1xuICB9XG59XG5cbi8vIHdyYXAgYSBmdW5jdGlvblxuZnVuY3Rpb24gd3JhcChvbGQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcm94eSgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoICsgMSk7XG5cbiAgICBhcmdzWzBdID0gb2xkO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSArIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9O1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2V4cHJlc3MvbGliL3JvdXRlci9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gODhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBleHByZXNzXG4gKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEzIFRKIEhvbG93YXljaHVrXG4gKiBDb3B5cmlnaHQoYykgMjAxMyBSb21hbiBTaHR5bG1hblxuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ2V4cHJlc3M6cm91dGVyOnJvdXRlJyk7XG52YXIgZmxhdHRlbiA9IHJlcXVpcmUoJ2FycmF5LWZsYXR0ZW4nKTtcbnZhciBMYXllciA9IHJlcXVpcmUoJy4vbGF5ZXInKTtcbnZhciBtZXRob2RzID0gcmVxdWlyZSgnbWV0aG9kcycpO1xuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBSb3V0ZTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGBSb3V0ZWAgd2l0aCB0aGUgZ2l2ZW4gYHBhdGhgLFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gUm91dGUocGF0aCkge1xuICB0aGlzLnBhdGggPSBwYXRoO1xuICB0aGlzLnN0YWNrID0gW107XG5cbiAgZGVidWcoJ25ldyAlbycsIHBhdGgpXG5cbiAgLy8gcm91dGUgaGFuZGxlcnMgZm9yIHZhcmlvdXMgaHR0cCBtZXRob2RzXG4gIHRoaXMubWV0aG9kcyA9IHt9O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB0aGUgcm91dGUgaGFuZGxlcyBhIGdpdmVuIG1ldGhvZC5cbiAqIEBwcml2YXRlXG4gKi9cblxuUm91dGUucHJvdG90eXBlLl9oYW5kbGVzX21ldGhvZCA9IGZ1bmN0aW9uIF9oYW5kbGVzX21ldGhvZChtZXRob2QpIHtcbiAgaWYgKHRoaXMubWV0aG9kcy5fYWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbmFtZSA9IG1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChuYW1lID09PSAnaGVhZCcgJiYgIXRoaXMubWV0aG9kc1snaGVhZCddKSB7XG4gICAgbmFtZSA9ICdnZXQnO1xuICB9XG5cbiAgcmV0dXJuIEJvb2xlYW4odGhpcy5tZXRob2RzW25hbWVdKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB7QXJyYXl9IHN1cHBvcnRlZCBIVFRQIG1ldGhvZHNcbiAqIEBwcml2YXRlXG4gKi9cblxuUm91dGUucHJvdG90eXBlLl9vcHRpb25zID0gZnVuY3Rpb24gX29wdGlvbnMoKSB7XG4gIHZhciBtZXRob2RzID0gT2JqZWN0LmtleXModGhpcy5tZXRob2RzKTtcblxuICAvLyBhcHBlbmQgYXV0b21hdGljIGhlYWRcbiAgaWYgKHRoaXMubWV0aG9kcy5nZXQgJiYgIXRoaXMubWV0aG9kcy5oZWFkKSB7XG4gICAgbWV0aG9kcy5wdXNoKCdoZWFkJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBtYWtlIHVwcGVyIGNhc2VcbiAgICBtZXRob2RzW2ldID0gbWV0aG9kc1tpXS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuXG4vKipcbiAqIGRpc3BhdGNoIHJlcSwgcmVzIGludG8gdGhpcyByb3V0ZVxuICogQHByaXZhdGVcbiAqL1xuXG5Sb3V0ZS5wcm90b3R5cGUuZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChyZXEsIHJlcywgZG9uZSkge1xuICB2YXIgaWR4ID0gMDtcbiAgdmFyIHN0YWNrID0gdGhpcy5zdGFjaztcbiAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkb25lKCk7XG4gIH1cblxuICB2YXIgbWV0aG9kID0gcmVxLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICBpZiAobWV0aG9kID09PSAnaGVhZCcgJiYgIXRoaXMubWV0aG9kc1snaGVhZCddKSB7XG4gICAgbWV0aG9kID0gJ2dldCc7XG4gIH1cblxuICByZXEucm91dGUgPSB0aGlzO1xuXG4gIG5leHQoKTtcblxuICBmdW5jdGlvbiBuZXh0KGVycikge1xuICAgIC8vIHNpZ25hbCB0byBleGl0IHJvdXRlXG4gICAgaWYgKGVyciAmJiBlcnIgPT09ICdyb3V0ZScpIHtcbiAgICAgIHJldHVybiBkb25lKCk7XG4gICAgfVxuXG4gICAgLy8gc2lnbmFsIHRvIGV4aXQgcm91dGVyXG4gICAgaWYgKGVyciAmJiBlcnIgPT09ICdyb3V0ZXInKSB7XG4gICAgICByZXR1cm4gZG9uZShlcnIpXG4gICAgfVxuXG4gICAgdmFyIGxheWVyID0gc3RhY2tbaWR4KytdO1xuICAgIGlmICghbGF5ZXIpIHtcbiAgICAgIHJldHVybiBkb25lKGVycik7XG4gICAgfVxuXG4gICAgaWYgKGxheWVyLm1ldGhvZCAmJiBsYXllci5tZXRob2QgIT09IG1ldGhvZCkge1xuICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBsYXllci5oYW5kbGVfZXJyb3IoZXJyLCByZXEsIHJlcywgbmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxheWVyLmhhbmRsZV9yZXF1ZXN0KHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQWRkIGEgaGFuZGxlciBmb3IgYWxsIEhUVFAgdmVyYnMgdG8gdGhpcyByb3V0ZS5cbiAqXG4gKiBCZWhhdmVzIGp1c3QgbGlrZSBtaWRkbGV3YXJlIGFuZCBjYW4gcmVzcG9uZCBvciBjYWxsIGBuZXh0YFxuICogdG8gY29udGludWUgcHJvY2Vzc2luZy5cbiAqXG4gKiBZb3UgY2FuIHVzZSBtdWx0aXBsZSBgLmFsbGAgY2FsbCB0byBhZGQgbXVsdGlwbGUgaGFuZGxlcnMuXG4gKlxuICogICBmdW5jdGlvbiBjaGVja19zb21ldGhpbmcocmVxLCByZXMsIG5leHQpe1xuICogICAgIG5leHQoKTtcbiAqICAgfTtcbiAqXG4gKiAgIGZ1bmN0aW9uIHZhbGlkYXRlX3VzZXIocmVxLCByZXMsIG5leHQpe1xuICogICAgIG5leHQoKTtcbiAqICAgfTtcbiAqXG4gKiAgIHJvdXRlXG4gKiAgIC5hbGwodmFsaWRhdGVfdXNlcilcbiAqICAgLmFsbChjaGVja19zb21ldGhpbmcpXG4gKiAgIC5nZXQoZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpe1xuICogICAgIHJlcy5zZW5kKCdoZWxsbyB3b3JsZCcpO1xuICogICB9KTtcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBoYW5kbGVyXG4gKiBAcmV0dXJuIHtSb3V0ZX0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJvdXRlLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiBhbGwoKSB7XG4gIHZhciBoYW5kbGVzID0gZmxhdHRlbihzbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBoYW5kbGUgPSBoYW5kbGVzW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0eXBlID0gdG9TdHJpbmcuY2FsbChoYW5kbGUpO1xuICAgICAgdmFyIG1zZyA9ICdSb3V0ZS5hbGwoKSByZXF1aXJlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGJ1dCBnb3QgYSAnICsgdHlwZVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihtc2cpO1xuICAgIH1cblxuICAgIHZhciBsYXllciA9IExheWVyKCcvJywge30sIGhhbmRsZSk7XG4gICAgbGF5ZXIubWV0aG9kID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5tZXRob2RzLl9hbGwgPSB0cnVlO1xuICAgIHRoaXMuc3RhY2sucHVzaChsYXllcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbm1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihtZXRob2Qpe1xuICBSb3V0ZS5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIGhhbmRsZXMgPSBmbGF0dGVuKHNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoYW5kbGUgPSBoYW5kbGVzW2ldO1xuXG4gICAgICBpZiAodHlwZW9mIGhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgdHlwZSA9IHRvU3RyaW5nLmNhbGwoaGFuZGxlKTtcbiAgICAgICAgdmFyIG1zZyA9ICdSb3V0ZS4nICsgbWV0aG9kICsgJygpIHJlcXVpcmVzIGEgY2FsbGJhY2sgZnVuY3Rpb24gYnV0IGdvdCBhICcgKyB0eXBlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuXG4gICAgICBkZWJ1ZygnJXMgJW8nLCBtZXRob2QsIHRoaXMucGF0aClcblxuICAgICAgdmFyIGxheWVyID0gTGF5ZXIoJy8nLCB7fSwgaGFuZGxlKTtcbiAgICAgIGxheWVyLm1ldGhvZCA9IG1ldGhvZDtcblxuICAgICAgdGhpcy5tZXRob2RzW21ldGhvZF0gPSB0cnVlO1xuICAgICAgdGhpcy5zdGFjay5wdXNoKGxheWVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2V4cHJlc3MvbGliL3JvdXRlci9yb3V0ZS5qc1xuLy8gbW9kdWxlIGlkID0gODlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBleHByZXNzXG4gKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEzIFRKIEhvbG93YXljaHVrXG4gKiBDb3B5cmlnaHQoYykgMjAxMyBSb21hbiBTaHR5bG1hblxuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBwYXRoUmVnZXhwID0gcmVxdWlyZSgncGF0aC10by1yZWdleHAnKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ2V4cHJlc3M6cm91dGVyOmxheWVyJyk7XG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IExheWVyO1xuXG5mdW5jdGlvbiBMYXllcihwYXRoLCBvcHRpb25zLCBmbikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTGF5ZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBMYXllcihwYXRoLCBvcHRpb25zLCBmbik7XG4gIH1cblxuICBkZWJ1ZygnbmV3ICVvJywgcGF0aClcbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuaGFuZGxlID0gZm47XG4gIHRoaXMubmFtZSA9IGZuLm5hbWUgfHwgJzxhbm9ueW1vdXM+JztcbiAgdGhpcy5wYXJhbXMgPSB1bmRlZmluZWQ7XG4gIHRoaXMucGF0aCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5yZWdleHAgPSBwYXRoUmVnZXhwKHBhdGgsIHRoaXMua2V5cyA9IFtdLCBvcHRzKTtcblxuICAvLyBzZXQgZmFzdCBwYXRoIGZsYWdzXG4gIHRoaXMucmVnZXhwLmZhc3Rfc3RhciA9IHBhdGggPT09ICcqJ1xuICB0aGlzLnJlZ2V4cC5mYXN0X3NsYXNoID0gcGF0aCA9PT0gJy8nICYmIG9wdHMuZW5kID09PSBmYWxzZVxufVxuXG4vKipcbiAqIEhhbmRsZSB0aGUgZXJyb3IgZm9yIHRoZSBsYXllci5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvclxuICogQHBhcmFtIHtSZXF1ZXN0fSByZXFcbiAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gbmV4dFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTGF5ZXIucHJvdG90eXBlLmhhbmRsZV9lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZV9lcnJvcihlcnJvciwgcmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIGZuID0gdGhpcy5oYW5kbGU7XG5cbiAgaWYgKGZuLmxlbmd0aCAhPT0gNCkge1xuICAgIC8vIG5vdCBhIHN0YW5kYXJkIGVycm9yIGhhbmRsZXJcbiAgICByZXR1cm4gbmV4dChlcnJvcik7XG4gIH1cblxuICB0cnkge1xuICAgIGZuKGVycm9yLCByZXEsIHJlcywgbmV4dCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG5leHQoZXJyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYW5kbGUgdGhlIHJlcXVlc3QgZm9yIHRoZSBsYXllci5cbiAqXG4gKiBAcGFyYW0ge1JlcXVlc3R9IHJlcVxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBuZXh0XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5MYXllci5wcm90b3R5cGUuaGFuZGxlX3JlcXVlc3QgPSBmdW5jdGlvbiBoYW5kbGUocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIGZuID0gdGhpcy5oYW5kbGU7XG5cbiAgaWYgKGZuLmxlbmd0aCA+IDMpIHtcbiAgICAvLyBub3QgYSBzdGFuZGFyZCByZXF1ZXN0IGhhbmRsZXJcbiAgICByZXR1cm4gbmV4dCgpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBmbihyZXEsIHJlcywgbmV4dCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG5leHQoZXJyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGlzIHJvdXRlIG1hdGNoZXMgYHBhdGhgLCBpZiBzb1xuICogcG9wdWxhdGUgYC5wYXJhbXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuTGF5ZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gbWF0Y2gocGF0aCkge1xuICB2YXIgbWF0Y2hcblxuICBpZiAocGF0aCAhPSBudWxsKSB7XG4gICAgLy8gZmFzdCBwYXRoIG5vbi1lbmRpbmcgbWF0Y2ggZm9yIC8gKGFueSBwYXRoIG1hdGNoZXMpXG4gICAgaWYgKHRoaXMucmVnZXhwLmZhc3Rfc2xhc2gpIHtcbiAgICAgIHRoaXMucGFyYW1zID0ge31cbiAgICAgIHRoaXMucGF0aCA9ICcnXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIGZhc3QgcGF0aCBmb3IgKiAoZXZlcnl0aGluZyBtYXRjaGVkIGluIGEgcGFyYW0pXG4gICAgaWYgKHRoaXMucmVnZXhwLmZhc3Rfc3Rhcikge1xuICAgICAgdGhpcy5wYXJhbXMgPSB7JzAnOiBkZWNvZGVfcGFyYW0ocGF0aCl9XG4gICAgICB0aGlzLnBhdGggPSBwYXRoXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIG1hdGNoIHRoZSBwYXRoXG4gICAgbWF0Y2ggPSB0aGlzLnJlZ2V4cC5leGVjKHBhdGgpXG4gIH1cblxuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhpcy5wYXJhbXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXRoID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHN0b3JlIHZhbHVlc1xuICB0aGlzLnBhcmFtcyA9IHt9O1xuICB0aGlzLnBhdGggPSBtYXRjaFswXVxuXG4gIHZhciBrZXlzID0gdGhpcy5rZXlzO1xuICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXM7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2kgLSAxXTtcbiAgICB2YXIgcHJvcCA9IGtleS5uYW1lO1xuICAgIHZhciB2YWwgPSBkZWNvZGVfcGFyYW0obWF0Y2hbaV0pXG5cbiAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgfHwgIShoYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtcywgcHJvcCkpKSB7XG4gICAgICBwYXJhbXNbcHJvcF0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlY29kZSBwYXJhbSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGRlY29kZV9wYXJhbSh2YWwpIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnIHx8IHZhbC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVUklFcnJvcikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSAnRmFpbGVkIHRvIGRlY29kZSBwYXJhbSBcXCcnICsgdmFsICsgJ1xcJyc7XG4gICAgICBlcnIuc3RhdHVzID0gZXJyLnN0YXR1c0NvZGUgPSA0MDA7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZXhwcmVzcy9saWIvcm91dGVyL2xheWVyLmpzXG4vLyBtb2R1bGUgaWQgPSA5MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGV4cHJlc3NcbiAqIENvcHlyaWdodChjKSAyMDA5LTIwMTMgVEogSG9sb3dheWNodWtcbiAqIENvcHlyaWdodChjKSAyMDEzIFJvbWFuIFNodHlsbWFuXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgbWVyZ2UgPSByZXF1aXJlKCd1dGlscy1tZXJnZScpXG52YXIgcGFyc2VVcmwgPSByZXF1aXJlKCdwYXJzZXVybCcpO1xudmFyIHFzID0gcmVxdWlyZSgncXMnKTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcXVlcnkob3B0aW9ucykge1xuICB2YXIgb3B0cyA9IG1lcmdlKHt9LCBvcHRpb25zKVxuICB2YXIgcXVlcnlwYXJzZSA9IHFzLnBhcnNlO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHF1ZXJ5cGFyc2UgPSBvcHRpb25zO1xuICAgIG9wdHMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkICYmIG9wdHMuYWxsb3dQcm90b3R5cGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBiYWNrLWNvbXBhdCBmb3IgcXMgbW9kdWxlXG4gICAgb3B0cy5hbGxvd1Byb3RvdHlwZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHF1ZXJ5KHJlcSwgcmVzLCBuZXh0KXtcbiAgICBpZiAoIXJlcS5xdWVyeSkge1xuICAgICAgdmFyIHZhbCA9IHBhcnNlVXJsKHJlcSkucXVlcnk7XG4gICAgICByZXEucXVlcnkgPSBxdWVyeXBhcnNlKHZhbCwgb3B0cyk7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9leHByZXNzL2xpYi9taWRkbGV3YXJlL3F1ZXJ5LmpzXG4vLyBtb2R1bGUgaWQgPSA5MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA5MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGNvbnRlbnQtZGlzcG9zaXRpb25cbiAqIENvcHlyaWdodChjKSAyMDE0IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnREaXNwb3NpdGlvblxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZVxuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIGJhc2VuYW1lID0gcmVxdWlyZSgncGF0aCcpLmJhc2VuYW1lXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIG5vbiBhdHRyLWNoYXIsICphZnRlciogZW5jb2RlVVJJQ29tcG9uZW50IChpLmUuIG5vdCBpbmNsdWRpbmcgXCIlXCIpXG4gKi9cblxudmFyIEVOQ09ERV9VUkxfQVRUUl9DSEFSX1JFR0VYUCA9IC9bXFx4MDAtXFx4MjBcIicoKSosLzo7PD0+P0BbXFxcXFxcXXt9XFx4N2ZdL2cgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHBlcmNlbnQgZW5jb2RpbmcgZXNjYXBlLlxuICovXG5cbnZhciBIRVhfRVNDQVBFX1JFR0VYUCA9IC8lWzAtOUEtRmEtZl17Mn0vXG52YXIgSEVYX0VTQ0FQRV9SRVBMQUNFX1JFR0VYUCA9IC8lKFswLTlBLUZhLWZdezJ9KS9nXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIG5vbi1sYXRpbjEgY2hhcmFjdGVycy5cbiAqL1xuXG52YXIgTk9OX0xBVElOMV9SRUdFWFAgPSAvW15cXHgyMC1cXHg3ZVxceGEwLVxceGZmXS9nXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHF1b3RlZC1wYWlyIGluIFJGQyAyNjE2XG4gKlxuICogcXVvdGVkLXBhaXIgPSBcIlxcXCIgQ0hBUlxuICogQ0hBUiAgICAgICAgPSA8YW55IFVTLUFTQ0lJIGNoYXJhY3RlciAob2N0ZXRzIDAgLSAxMjcpPlxuICovXG5cbnZhciBRRVNDX1JFR0VYUCA9IC9cXFxcKFtcXHUwMDAwLVxcdTAwN2ZdKS9nXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIGNoYXJzIHRoYXQgbXVzdCBiZSBxdW90ZWQtcGFpciBpbiBSRkMgMjYxNlxuICovXG5cbnZhciBRVU9URV9SRUdFWFAgPSAvKFtcXFxcXCJdKS9nXG5cbi8qKlxuICogUmVnRXhwIGZvciB2YXJpb3VzIFJGQyAyNjE2IGdyYW1tYXJcbiAqXG4gKiBwYXJhbWV0ZXIgICAgID0gdG9rZW4gXCI9XCIgKCB0b2tlbiB8IHF1b3RlZC1zdHJpbmcgKVxuICogdG9rZW4gICAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gKiBzZXBhcmF0b3JzICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICogICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAqICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gKiAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIHF1b3RlZC1zdHJpbmcgPSAoIDxcIj4gKihxZHRleHQgfCBxdW90ZWQtcGFpciApIDxcIj4gKVxuICogcWR0ZXh0ICAgICAgICA9IDxhbnkgVEVYVCBleGNlcHQgPFwiPj5cbiAqIHF1b3RlZC1wYWlyICAgPSBcIlxcXCIgQ0hBUlxuICogQ0hBUiAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gKiBURVhUICAgICAgICAgID0gPGFueSBPQ1RFVCBleGNlcHQgQ1RMcywgYnV0IGluY2x1ZGluZyBMV1M+XG4gKiBMV1MgICAgICAgICAgID0gW0NSTEZdIDEqKCBTUCB8IEhUIClcbiAqIENSTEYgICAgICAgICAgPSBDUiBMRlxuICogQ1IgICAgICAgICAgICA9IDxVUy1BU0NJSSBDUiwgY2FycmlhZ2UgcmV0dXJuICgxMyk+XG4gKiBMRiAgICAgICAgICAgID0gPFVTLUFTQ0lJIExGLCBsaW5lZmVlZCAoMTApPlxuICogU1AgICAgICAgICAgICA9IDxVUy1BU0NJSSBTUCwgc3BhY2UgKDMyKT5cbiAqIEhUICAgICAgICAgICAgPSA8VVMtQVNDSUkgSFQsIGhvcml6b250YWwtdGFiICg5KT5cbiAqIENUTCAgICAgICAgICAgPSA8YW55IFVTLUFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyIChvY3RldHMgMCAtIDMxKSBhbmQgREVMICgxMjcpPlxuICogT0NURVQgICAgICAgICA9IDxhbnkgOC1iaXQgc2VxdWVuY2Ugb2YgZGF0YT5cbiAqL1xuXG52YXIgUEFSQU1fUkVHRVhQID0gLztbXFx4MDlcXHgyMF0qKFshIyQlJicqKy4wLTlBLVpeX2BhLXp8fi1dKylbXFx4MDlcXHgyMF0qPVtcXHgwOVxceDIwXSooXCIoPzpbXFx4MjAhXFx4MjMtXFx4NWJcXHg1ZC1cXHg3ZVxceDgwLVxceGZmXXxcXFxcW1xceDIwLVxceDdlXSkqXCJ8WyEjJCUmJyorLjAtOUEtWl5fYGEtenx+LV0rKVtcXHgwOVxceDIwXSovZyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbnZhciBURVhUX1JFR0VYUCA9IC9eW1xceDIwLVxceDdlXFx4ODAtXFx4ZmZdKyQvXG52YXIgVE9LRU5fUkVHRVhQID0gL15bISMkJSYnKisuMC05QS1aXl9gYS16fH4tXSskL1xuXG4vKipcbiAqIFJlZ0V4cCBmb3IgdmFyaW91cyBSRkMgNTk4NyBncmFtbWFyXG4gKlxuICogZXh0LXZhbHVlICAgICA9IGNoYXJzZXQgIFwiJ1wiIFsgbGFuZ3VhZ2UgXSBcIidcIiB2YWx1ZS1jaGFyc1xuICogY2hhcnNldCAgICAgICA9IFwiVVRGLThcIiAvIFwiSVNPLTg4NTktMVwiIC8gbWltZS1jaGFyc2V0XG4gKiBtaW1lLWNoYXJzZXQgID0gMSptaW1lLWNoYXJzZXRjXG4gKiBtaW1lLWNoYXJzZXRjID0gQUxQSEEgLyBESUdJVFxuICogICAgICAgICAgICAgICAvIFwiIVwiIC8gXCIjXCIgLyBcIiRcIiAvIFwiJVwiIC8gXCImXCJcbiAqICAgICAgICAgICAgICAgLyBcIitcIiAvIFwiLVwiIC8gXCJeXCIgLyBcIl9cIiAvIFwiYFwiXG4gKiAgICAgICAgICAgICAgIC8gXCJ7XCIgLyBcIn1cIiAvIFwiflwiXG4gKiBsYW5ndWFnZSAgICAgID0gKCAyKjNBTFBIQSBbIGV4dGxhbmcgXSApXG4gKiAgICAgICAgICAgICAgIC8gNEFMUEhBXG4gKiAgICAgICAgICAgICAgIC8gNSo4QUxQSEFcbiAqIGV4dGxhbmcgICAgICAgPSAqMyggXCItXCIgM0FMUEhBIClcbiAqIHZhbHVlLWNoYXJzICAgPSAqKCBwY3QtZW5jb2RlZCAvIGF0dHItY2hhciApXG4gKiBwY3QtZW5jb2RlZCAgID0gXCIlXCIgSEVYRElHIEhFWERJR1xuICogYXR0ci1jaGFyICAgICA9IEFMUEhBIC8gRElHSVRcbiAqICAgICAgICAgICAgICAgLyBcIiFcIiAvIFwiI1wiIC8gXCIkXCIgLyBcIiZcIiAvIFwiK1wiIC8gXCItXCIgLyBcIi5cIlxuICogICAgICAgICAgICAgICAvIFwiXlwiIC8gXCJfXCIgLyBcImBcIiAvIFwifFwiIC8gXCJ+XCJcbiAqL1xuXG52YXIgRVhUX1ZBTFVFX1JFR0VYUCA9IC9eKFtBLVphLXowLTkhIyQlJitcXC1eX2B7fX5dKyknKD86W0EtWmEtel17MiwzfSg/Oi1bQS1aYS16XXszfSl7MCwzfXxbQS1aYS16XXs0LDh9fCknKCg/OiVbMC05QS1GYS1mXXsyfXxbQS1aYS16MC05ISMkJisuXl9gfH4tXSkrKSQvXG5cbi8qKlxuICogUmVnRXhwIGZvciB2YXJpb3VzIFJGQyA2MjY2IGdyYW1tYXJcbiAqXG4gKiBkaXNwb3NpdGlvbi10eXBlID0gXCJpbmxpbmVcIiB8IFwiYXR0YWNobWVudFwiIHwgZGlzcC1leHQtdHlwZVxuICogZGlzcC1leHQtdHlwZSAgICA9IHRva2VuXG4gKiBkaXNwb3NpdGlvbi1wYXJtID0gZmlsZW5hbWUtcGFybSB8IGRpc3AtZXh0LXBhcm1cbiAqIGZpbGVuYW1lLXBhcm0gICAgPSBcImZpbGVuYW1lXCIgXCI9XCIgdmFsdWVcbiAqICAgICAgICAgICAgICAgICAgfCBcImZpbGVuYW1lKlwiIFwiPVwiIGV4dC12YWx1ZVxuICogZGlzcC1leHQtcGFybSAgICA9IHRva2VuIFwiPVwiIHZhbHVlXG4gKiAgICAgICAgICAgICAgICAgIHwgZXh0LXRva2VuIFwiPVwiIGV4dC12YWx1ZVxuICogZXh0LXRva2VuICAgICAgICA9IDx0aGUgY2hhcmFjdGVycyBpbiB0b2tlbiwgZm9sbG93ZWQgYnkgXCIqXCI+XG4gKi9cblxudmFyIERJU1BPU0lUSU9OX1RZUEVfUkVHRVhQID0gL14oWyEjJCUmJyorLjAtOUEtWl5fYGEtenx+LV0rKVtcXHgwOVxceDIwXSooPzokfDspLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuLyoqXG4gKiBDcmVhdGUgYW4gYXR0YWNobWVudCBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZpbGVuYW1lXVxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnR5cGU9YXR0YWNobWVudF1cbiAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IFtvcHRpb25zLmZhbGxiYWNrPXRydWVdXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGNvbnRlbnREaXNwb3NpdGlvbiAoZmlsZW5hbWUsIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9XG5cbiAgLy8gZ2V0IHR5cGVcbiAgdmFyIHR5cGUgPSBvcHRzLnR5cGUgfHwgJ2F0dGFjaG1lbnQnXG5cbiAgLy8gZ2V0IHBhcmFtZXRlcnNcbiAgdmFyIHBhcmFtcyA9IGNyZWF0ZXBhcmFtcyhmaWxlbmFtZSwgb3B0cy5mYWxsYmFjaylcblxuICAvLyBmb3JtYXQgaW50byBzdHJpbmdcbiAgcmV0dXJuIGZvcm1hdChuZXcgQ29udGVudERpc3Bvc2l0aW9uKHR5cGUsIHBhcmFtcykpXG59XG5cbi8qKlxuICogQ3JlYXRlIHBhcmFtZXRlcnMgb2JqZWN0IGZyb20gZmlsZW5hbWUgYW5kIGZhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmlsZW5hbWVdXG4gKiBAcGFyYW0ge3N0cmluZ3xib29sZWFufSBbZmFsbGJhY2s9dHJ1ZV1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZXBhcmFtcyAoZmlsZW5hbWUsIGZhbGxiYWNrKSB7XG4gIGlmIChmaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgcGFyYW1zID0ge31cblxuICBpZiAodHlwZW9mIGZpbGVuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZpbGVuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICB9XG5cbiAgLy8gZmFsbGJhY2sgZGVmYXVsdHMgdG8gdHJ1ZVxuICBpZiAoZmFsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGZhbGxiYWNrID0gdHJ1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBmYWxsYmFjayAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIGZhbGxiYWNrICE9PSAnYm9vbGVhbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmYWxsYmFjayBtdXN0IGJlIGEgc3RyaW5nIG9yIGJvb2xlYW4nKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBmYWxsYmFjayA9PT0gJ3N0cmluZycgJiYgTk9OX0xBVElOMV9SRUdFWFAudGVzdChmYWxsYmFjaykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmYWxsYmFjayBtdXN0IGJlIElTTy04ODU5LTEgc3RyaW5nJylcbiAgfVxuXG4gIC8vIHJlc3RyaWN0IHRvIGZpbGUgYmFzZSBuYW1lXG4gIHZhciBuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpXG5cbiAgLy8gZGV0ZXJtaW5lIGlmIG5hbWUgaXMgc3VpdGFibGUgZm9yIHF1b3RlZCBzdHJpbmdcbiAgdmFyIGlzUXVvdGVkU3RyaW5nID0gVEVYVF9SRUdFWFAudGVzdChuYW1lKVxuXG4gIC8vIGdlbmVyYXRlIGZhbGxiYWNrIG5hbWVcbiAgdmFyIGZhbGxiYWNrTmFtZSA9IHR5cGVvZiBmYWxsYmFjayAhPT0gJ3N0cmluZydcbiAgICA/IGZhbGxiYWNrICYmIGdldGxhdGluMShuYW1lKVxuICAgIDogYmFzZW5hbWUoZmFsbGJhY2spXG4gIHZhciBoYXNGYWxsYmFjayA9IHR5cGVvZiBmYWxsYmFja05hbWUgPT09ICdzdHJpbmcnICYmIGZhbGxiYWNrTmFtZSAhPT0gbmFtZVxuXG4gIC8vIHNldCBleHRlbmRlZCBmaWxlbmFtZSBwYXJhbWV0ZXJcbiAgaWYgKGhhc0ZhbGxiYWNrIHx8ICFpc1F1b3RlZFN0cmluZyB8fCBIRVhfRVNDQVBFX1JFR0VYUC50ZXN0KG5hbWUpKSB7XG4gICAgcGFyYW1zWydmaWxlbmFtZSonXSA9IG5hbWVcbiAgfVxuXG4gIC8vIHNldCBmaWxlbmFtZSBwYXJhbWV0ZXJcbiAgaWYgKGlzUXVvdGVkU3RyaW5nIHx8IGhhc0ZhbGxiYWNrKSB7XG4gICAgcGFyYW1zLmZpbGVuYW1lID0gaGFzRmFsbGJhY2tcbiAgICAgID8gZmFsbGJhY2tOYW1lXG4gICAgICA6IG5hbWVcbiAgfVxuXG4gIHJldHVybiBwYXJhbXNcbn1cblxuLyoqXG4gKiBGb3JtYXQgb2JqZWN0IHRvIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvYmoudHlwZVxuICogQHBhcmFtIHtvYmplY3R9IFtvYmoucGFyYW1ldGVyc11cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZvcm1hdCAob2JqKSB7XG4gIHZhciBwYXJhbWV0ZXJzID0gb2JqLnBhcmFtZXRlcnNcbiAgdmFyIHR5cGUgPSBvYmoudHlwZVxuXG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycgfHwgIVRPS0VOX1JFR0VYUC50ZXN0KHR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCB0eXBlJylcbiAgfVxuXG4gIC8vIHN0YXJ0IHdpdGggbm9ybWFsaXplZCB0eXBlXG4gIHZhciBzdHJpbmcgPSBTdHJpbmcodHlwZSkudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGFwcGVuZCBwYXJhbWV0ZXJzXG4gIGlmIChwYXJhbWV0ZXJzICYmIHR5cGVvZiBwYXJhbWV0ZXJzID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBwYXJhbVxuICAgIHZhciBwYXJhbXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KClcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYXJhbSA9IHBhcmFtc1tpXVxuXG4gICAgICB2YXIgdmFsID0gcGFyYW0uc3Vic3RyKC0xKSA9PT0gJyonXG4gICAgICAgID8gdXN0cmluZyhwYXJhbWV0ZXJzW3BhcmFtXSlcbiAgICAgICAgOiBxc3RyaW5nKHBhcmFtZXRlcnNbcGFyYW1dKVxuXG4gICAgICBzdHJpbmcgKz0gJzsgJyArIHBhcmFtICsgJz0nICsgdmFsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1xufVxuXG4vKipcbiAqIERlY29kZSBhIFJGQyA2OTg3IGZpZWxkIHZhbHVlIChncmFjZWZ1bGx5KS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBkZWNvZGVmaWVsZCAoc3RyKSB7XG4gIHZhciBtYXRjaCA9IEVYVF9WQUxVRV9SRUdFWFAuZXhlYyhzdHIpXG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgZXh0ZW5kZWQgZmllbGQgdmFsdWUnKVxuICB9XG5cbiAgdmFyIGNoYXJzZXQgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpXG4gIHZhciBlbmNvZGVkID0gbWF0Y2hbMl1cbiAgdmFyIHZhbHVlXG5cbiAgLy8gdG8gYmluYXJ5IHN0cmluZ1xuICB2YXIgYmluYXJ5ID0gZW5jb2RlZC5yZXBsYWNlKEhFWF9FU0NBUEVfUkVQTEFDRV9SRUdFWFAsIHBkZWNvZGUpXG5cbiAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgY2FzZSAnaXNvLTg4NTktMSc6XG4gICAgICB2YWx1ZSA9IGdldGxhdGluMShiaW5hcnkpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIHZhbHVlID0gbmV3IEJ1ZmZlcihiaW5hcnksICdiaW5hcnknKS50b1N0cmluZygndXRmOCcpXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnN1cHBvcnRlZCBjaGFyc2V0IGluIGV4dGVuZGVkIGZpZWxkJylcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEdldCBJU08tODg1OS0xIHZlcnNpb24gb2Ygc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldGxhdGluMSAodmFsKSB7XG4gIC8vIHNpbXBsZSBVbmljb2RlIC0+IElTTy04ODU5LTEgdHJhbnNmb3JtYXRpb25cbiAgcmV0dXJuIFN0cmluZyh2YWwpLnJlcGxhY2UoTk9OX0xBVElOMV9SRUdFWFAsICc/Jylcbn1cblxuLyoqXG4gKiBQYXJzZSBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRlciBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7b2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2UgKHN0cmluZykge1xuICBpZiAoIXN0cmluZyB8fCB0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHN0cmluZyBpcyByZXF1aXJlZCcpXG4gIH1cblxuICB2YXIgbWF0Y2ggPSBESVNQT1NJVElPTl9UWVBFX1JFR0VYUC5leGVjKHN0cmluZylcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCB0eXBlIGZvcm1hdCcpXG4gIH1cblxuICAvLyBub3JtYWxpemUgdHlwZVxuICB2YXIgaW5kZXggPSBtYXRjaFswXS5sZW5ndGhcbiAgdmFyIHR5cGUgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpXG5cbiAgdmFyIGtleVxuICB2YXIgbmFtZXMgPSBbXVxuICB2YXIgcGFyYW1zID0ge31cbiAgdmFyIHZhbHVlXG5cbiAgLy8gY2FsY3VsYXRlIGluZGV4IHRvIHN0YXJ0IGF0XG4gIGluZGV4ID0gUEFSQU1fUkVHRVhQLmxhc3RJbmRleCA9IG1hdGNoWzBdLnN1YnN0cigtMSkgPT09ICc7J1xuICAgID8gaW5kZXggLSAxXG4gICAgOiBpbmRleFxuXG4gIC8vIG1hdGNoIHBhcmFtZXRlcnNcbiAgd2hpbGUgKChtYXRjaCA9IFBBUkFNX1JFR0VYUC5leGVjKHN0cmluZykpKSB7XG4gICAgaWYgKG1hdGNoLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXJhbWV0ZXIgZm9ybWF0JylcbiAgICB9XG5cbiAgICBpbmRleCArPSBtYXRjaFswXS5sZW5ndGhcbiAgICBrZXkgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpXG4gICAgdmFsdWUgPSBtYXRjaFsyXVxuXG4gICAgaWYgKG5hbWVzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgZHVwbGljYXRlIHBhcmFtZXRlcicpXG4gICAgfVxuXG4gICAgbmFtZXMucHVzaChrZXkpXG5cbiAgICBpZiAoa2V5LmluZGV4T2YoJyonKSArIDEgPT09IGtleS5sZW5ndGgpIHtcbiAgICAgIC8vIGRlY29kZSBleHRlbmRlZCB2YWx1ZVxuICAgICAga2V5ID0ga2V5LnNsaWNlKDAsIC0xKVxuICAgICAgdmFsdWUgPSBkZWNvZGVmaWVsZCh2YWx1ZSlcblxuICAgICAgLy8gb3ZlcndyaXRlIGV4aXN0aW5nIHZhbHVlXG4gICAgICBwYXJhbXNba2V5XSA9IHZhbHVlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcGFyYW1zW2tleV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgLy8gcmVtb3ZlIHF1b3RlcyBhbmQgZXNjYXBlc1xuICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAuc3Vic3RyKDEsIHZhbHVlLmxlbmd0aCAtIDIpXG4gICAgICAgIC5yZXBsYWNlKFFFU0NfUkVHRVhQLCAnJDEnKVxuICAgIH1cblxuICAgIHBhcmFtc1trZXldID0gdmFsdWVcbiAgfVxuXG4gIGlmIChpbmRleCAhPT0gLTEgJiYgaW5kZXggIT09IHN0cmluZy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhcmFtZXRlciBmb3JtYXQnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBDb250ZW50RGlzcG9zaXRpb24odHlwZSwgcGFyYW1zKVxufVxuXG4vKipcbiAqIFBlcmNlbnQgZGVjb2RlIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwZGVjb2RlIChzdHIsIGhleCkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChoZXgsIDE2KSlcbn1cblxuLyoqXG4gKiBQZXJjZW50IGVuY29kZSBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBlbmNvZGUgKGNoYXIpIHtcbiAgdmFyIGhleCA9IFN0cmluZyhjaGFyKVxuICAgIC5jaGFyQ29kZUF0KDApXG4gICAgLnRvU3RyaW5nKDE2KVxuICAgIC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBoZXgubGVuZ3RoID09PSAxXG4gICAgPyAnJTAnICsgaGV4XG4gICAgOiAnJScgKyBoZXhcbn1cblxuLyoqXG4gKiBRdW90ZSBhIHN0cmluZyBmb3IgSFRUUC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBxc3RyaW5nICh2YWwpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyh2YWwpXG5cbiAgcmV0dXJuICdcIicgKyBzdHIucmVwbGFjZShRVU9URV9SRUdFWFAsICdcXFxcJDEnKSArICdcIidcbn1cblxuLyoqXG4gKiBFbmNvZGUgYSBVbmljb2RlIHN0cmluZyBmb3IgSFRUUCAoUkZDIDU5ODcpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHVzdHJpbmcgKHZhbCkge1xuICB2YXIgc3RyID0gU3RyaW5nKHZhbClcblxuICAvLyBwZXJjZW50IGVuY29kZSBhcyBVVEYtOFxuICB2YXIgZW5jb2RlZCA9IGVuY29kZVVSSUNvbXBvbmVudChzdHIpXG4gICAgLnJlcGxhY2UoRU5DT0RFX1VSTF9BVFRSX0NIQVJfUkVHRVhQLCBwZW5jb2RlKVxuXG4gIHJldHVybiAnVVRGLThcXCdcXCcnICsgZW5jb2RlZFxufVxuXG4vKipcbiAqIENsYXNzIGZvciBwYXJzZWQgQ29udGVudC1EaXNwb3NpdGlvbiBoZWFkZXIgZm9yIHY4IG9wdGltaXphdGlvblxuICovXG5cbmZ1bmN0aW9uIENvbnRlbnREaXNwb3NpdGlvbiAodHlwZSwgcGFyYW1ldGVycykge1xuICB0aGlzLnR5cGUgPSB0eXBlXG4gIHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnNcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb250ZW50LWRpc3Bvc2l0aW9uL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA5M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGV0YWdcbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTYgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZXRhZ1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxudmFyIFN0YXRzID0gcmVxdWlyZSgnZnMnKS5TdGF0c1xuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBlbnRpdHkgdGFnLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gZW50aXR5XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGVudGl0eXRhZyAoZW50aXR5KSB7XG4gIGlmIChlbnRpdHkubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gZmFzdC1wYXRoIGVtcHR5XG4gICAgcmV0dXJuICdcIjAtMmptajdsNXJTdzB5VmIvdmxXQVlrSy9ZQndrXCInXG4gIH1cblxuICAvLyBjb21wdXRlIGhhc2ggb2YgZW50aXR5XG4gIHZhciBoYXNoID0gY3J5cHRvXG4gICAgLmNyZWF0ZUhhc2goJ3NoYTEnKVxuICAgIC51cGRhdGUoZW50aXR5LCAndXRmOCcpXG4gICAgLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAuc3Vic3RyaW5nKDAsIDI3KVxuXG4gIC8vIGNvbXB1dGUgbGVuZ3RoIG9mIGVudGl0eVxuICB2YXIgbGVuID0gdHlwZW9mIGVudGl0eSA9PT0gJ3N0cmluZydcbiAgICA/IEJ1ZmZlci5ieXRlTGVuZ3RoKGVudGl0eSwgJ3V0ZjgnKVxuICAgIDogZW50aXR5Lmxlbmd0aFxuXG4gIHJldHVybiAnXCInICsgbGVuLnRvU3RyaW5nKDE2KSArICctJyArIGhhc2ggKyAnXCInXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc2ltcGxlIEVUYWcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfFN0YXRzfSBlbnRpdHlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMud2Vha11cbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBldGFnIChlbnRpdHksIG9wdGlvbnMpIHtcbiAgaWYgKGVudGl0eSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgZW50aXR5IGlzIHJlcXVpcmVkJylcbiAgfVxuXG4gIC8vIHN1cHBvcnQgZnMuU3RhdHMgb2JqZWN0XG4gIHZhciBpc1N0YXRzID0gaXNzdGF0cyhlbnRpdHkpXG4gIHZhciB3ZWFrID0gb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy53ZWFrID09PSAnYm9vbGVhbidcbiAgICA/IG9wdGlvbnMud2Vha1xuICAgIDogaXNTdGF0c1xuXG4gIC8vIHZhbGlkYXRlIGFyZ3VtZW50XG4gIGlmICghaXNTdGF0cyAmJiB0eXBlb2YgZW50aXR5ICE9PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzQnVmZmVyKGVudGl0eSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBlbnRpdHkgbXVzdCBiZSBzdHJpbmcsIEJ1ZmZlciwgb3IgZnMuU3RhdHMnKVxuICB9XG5cbiAgLy8gZ2VuZXJhdGUgZW50aXR5IHRhZ1xuICB2YXIgdGFnID0gaXNTdGF0c1xuICAgID8gc3RhdHRhZyhlbnRpdHkpXG4gICAgOiBlbnRpdHl0YWcoZW50aXR5KVxuXG4gIHJldHVybiB3ZWFrXG4gICAgPyAnVy8nICsgdGFnXG4gICAgOiB0YWdcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgb2JqZWN0IGlzIGEgU3RhdHMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc3N0YXRzIChvYmopIHtcbiAgLy8gZ2VudWluZSBmcy5TdGF0c1xuICBpZiAodHlwZW9mIFN0YXRzID09PSAnZnVuY3Rpb24nICYmIG9iaiBpbnN0YW5jZW9mIFN0YXRzKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIHF1YWNrIHF1YWNrXG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiZcbiAgICAnY3RpbWUnIGluIG9iaiAmJiB0b1N0cmluZy5jYWxsKG9iai5jdGltZSkgPT09ICdbb2JqZWN0IERhdGVdJyAmJlxuICAgICdtdGltZScgaW4gb2JqICYmIHRvU3RyaW5nLmNhbGwob2JqLm10aW1lKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmXG4gICAgJ2lubycgaW4gb2JqICYmIHR5cGVvZiBvYmouaW5vID09PSAnbnVtYmVyJyAmJlxuICAgICdzaXplJyBpbiBvYmogJiYgdHlwZW9mIG9iai5zaXplID09PSAnbnVtYmVyJ1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgdGFnIGZvciBhIHN0YXQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3RhdHRhZyAoc3RhdCkge1xuICB2YXIgbXRpbWUgPSBzdGF0Lm10aW1lLmdldFRpbWUoKS50b1N0cmluZygxNilcbiAgdmFyIHNpemUgPSBzdGF0LnNpemUudG9TdHJpbmcoMTYpXG5cbiAgcmV0dXJuICdcIicgKyBzaXplICsgJy0nICsgbXRpbWUgKyAnXCInXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZXRhZy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gOTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBmcmVzaFxuICogQ29weXJpZ2h0KGMpIDIwMTIgVEogSG9sb3dheWNodWtcbiAqIENvcHlyaWdodChjKSAyMDE2LTIwMTcgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIFJlZ0V4cCB0byBjaGVjayBmb3Igbm8tY2FjaGUgdG9rZW4gaW4gQ2FjaGUtQ29udHJvbC5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIENBQ0hFX0NPTlRST0xfTk9fQ0FDSEVfUkVHRVhQID0gLyg/Ol58LClcXHMqP25vLWNhY2hlXFxzKj8oPzosfCQpL1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnJlc2hcblxuLyoqXG4gKiBDaGVjayBmcmVzaG5lc3Mgb2YgdGhlIHJlc3BvbnNlIHVzaW5nIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGhlYWRlcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlcUhlYWRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNIZWFkZXJzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZyZXNoIChyZXFIZWFkZXJzLCByZXNIZWFkZXJzKSB7XG4gIC8vIGZpZWxkc1xuICB2YXIgbW9kaWZpZWRTaW5jZSA9IHJlcUhlYWRlcnNbJ2lmLW1vZGlmaWVkLXNpbmNlJ11cbiAgdmFyIG5vbmVNYXRjaCA9IHJlcUhlYWRlcnNbJ2lmLW5vbmUtbWF0Y2gnXVxuXG4gIC8vIHVuY29uZGl0aW9uYWwgcmVxdWVzdFxuICBpZiAoIW1vZGlmaWVkU2luY2UgJiYgIW5vbmVNYXRjaCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gQWx3YXlzIHJldHVybiBzdGFsZSB3aGVuIENhY2hlLUNvbnRyb2w6IG5vLWNhY2hlXG4gIC8vIHRvIHN1cHBvcnQgZW5kLXRvLWVuZCByZWxvYWQgcmVxdWVzdHNcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI2MTYjc2VjdGlvbi0xNC45LjRcbiAgdmFyIGNhY2hlQ29udHJvbCA9IHJlcUhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXVxuICBpZiAoY2FjaGVDb250cm9sICYmIENBQ0hFX0NPTlRST0xfTk9fQ0FDSEVfUkVHRVhQLnRlc3QoY2FjaGVDb250cm9sKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gaWYtbm9uZS1tYXRjaFxuICBpZiAobm9uZU1hdGNoICYmIG5vbmVNYXRjaCAhPT0gJyonKSB7XG4gICAgdmFyIGV0YWcgPSByZXNIZWFkZXJzWydldGFnJ11cblxuICAgIGlmICghZXRhZykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdmFyIGV0YWdTdGFsZSA9IHRydWVcbiAgICB2YXIgbWF0Y2hlcyA9IHBhcnNlVG9rZW5MaXN0KG5vbmVNYXRjaClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBtYXRjaCA9IG1hdGNoZXNbaV1cbiAgICAgIGlmIChtYXRjaCA9PT0gZXRhZyB8fCBtYXRjaCA9PT0gJ1cvJyArIGV0YWcgfHwgJ1cvJyArIG1hdGNoID09PSBldGFnKSB7XG4gICAgICAgIGV0YWdTdGFsZSA9IGZhbHNlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV0YWdTdGFsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gaWYtbW9kaWZpZWQtc2luY2VcbiAgaWYgKG1vZGlmaWVkU2luY2UpIHtcbiAgICB2YXIgbGFzdE1vZGlmaWVkID0gcmVzSGVhZGVyc1snbGFzdC1tb2RpZmllZCddXG4gICAgdmFyIG1vZGlmaWVkU3RhbGUgPSAhbGFzdE1vZGlmaWVkIHx8ICEocGFyc2VIdHRwRGF0ZShsYXN0TW9kaWZpZWQpIDw9IHBhcnNlSHR0cERhdGUobW9kaWZpZWRTaW5jZSkpXG5cbiAgICBpZiAobW9kaWZpZWRTdGFsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBIVFRQIERhdGUgaW50byBhIG51bWJlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0ZVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZUh0dHBEYXRlIChkYXRlKSB7XG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlICYmIERhdGUucGFyc2UoZGF0ZSlcblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ3VhcmQgYWdhaW5zdCBkYXRlLmpzIERhdGUucGFyc2UgcGF0Y2hpbmdcbiAgcmV0dXJuIHR5cGVvZiB0aW1lc3RhbXAgPT09ICdudW1iZXInXG4gICAgPyB0aW1lc3RhbXBcbiAgICA6IE5hTlxufVxuXG4vKipcbiAqIFBhcnNlIGEgSFRUUCB0b2tlbiBsaXN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2VUb2tlbkxpc3QgKHN0cikge1xuICB2YXIgZW5kID0gMFxuICB2YXIgbGlzdCA9IFtdXG4gIHZhciBzdGFydCA9IDBcblxuICAvLyBnYXRoZXIgdG9rZW5zXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzd2l0Y2ggKHN0ci5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MjA6IC8qICAgKi9cbiAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICAgICAgICBzdGFydCA9IGVuZCA9IGkgKyAxXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMHgyYzogLyogLCAqL1xuICAgICAgICBsaXN0LnB1c2goc3RyLnN1YnN0cmluZyhzdGFydCwgZW5kKSlcbiAgICAgICAgc3RhcnQgPSBlbmQgPSBpICsgMVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZW5kID0gaSArIDFcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyBmaW5hbCB0b2tlblxuICBsaXN0LnB1c2goc3RyLnN1YnN0cmluZyhzdGFydCwgZW5kKSlcblxuICByZXR1cm4gbGlzdFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ZyZXNoL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA5NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIHJhbmdlLXBhcnNlclxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBUSiBIb2xvd2F5Y2h1a1xuICogQ29weXJpZ2h0KGMpIDIwMTUtMjAxNiBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByYW5nZVBhcnNlclxuXG4vKipcbiAqIFBhcnNlIFwiUmFuZ2VcIiBoZWFkZXIgYHN0cmAgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIGZpbGUgYHNpemVgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBzaXplXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiByYW5nZVBhcnNlciAoc2l6ZSwgc3RyLCBvcHRpb25zKSB7XG4gIHZhciBpbmRleCA9IHN0ci5pbmRleE9mKCc9JylcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIC0yXG4gIH1cblxuICAvLyBzcGxpdCB0aGUgcmFuZ2Ugc3RyaW5nXG4gIHZhciBhcnIgPSBzdHIuc2xpY2UoaW5kZXggKyAxKS5zcGxpdCgnLCcpXG4gIHZhciByYW5nZXMgPSBbXVxuXG4gIC8vIGFkZCByYW5nZXMgdHlwZVxuICByYW5nZXMudHlwZSA9IHN0ci5zbGljZSgwLCBpbmRleClcblxuICAvLyBwYXJzZSBhbGwgcmFuZ2VzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJhbmdlID0gYXJyW2ldLnNwbGl0KCctJylcbiAgICB2YXIgc3RhcnQgPSBwYXJzZUludChyYW5nZVswXSwgMTApXG4gICAgdmFyIGVuZCA9IHBhcnNlSW50KHJhbmdlWzFdLCAxMClcblxuICAgIC8vIC1ubm5cbiAgICBpZiAoaXNOYU4oc3RhcnQpKSB7XG4gICAgICBzdGFydCA9IHNpemUgLSBlbmRcbiAgICAgIGVuZCA9IHNpemUgLSAxXG4gICAgLy8gbm5uLVxuICAgIH0gZWxzZSBpZiAoaXNOYU4oZW5kKSkge1xuICAgICAgZW5kID0gc2l6ZSAtIDFcbiAgICB9XG5cbiAgICAvLyBsaW1pdCBsYXN0LWJ5dGUtcG9zIHRvIGN1cnJlbnQgbGVuZ3RoXG4gICAgaWYgKGVuZCA+IHNpemUgLSAxKSB7XG4gICAgICBlbmQgPSBzaXplIC0gMVxuICAgIH1cblxuICAgIC8vIGludmFsaWQgb3IgdW5zYXRpc2lmaWFibGVcbiAgICBpZiAoaXNOYU4oc3RhcnQpIHx8IGlzTmFOKGVuZCkgfHwgc3RhcnQgPiBlbmQgfHwgc3RhcnQgPCAwKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIGFkZCByYW5nZVxuICAgIHJhbmdlcy5wdXNoKHtcbiAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgIGVuZDogZW5kXG4gICAgfSlcbiAgfVxuXG4gIGlmIChyYW5nZXMubGVuZ3RoIDwgMSkge1xuICAgIC8vIHVuc2F0aXNpZmlhYmxlXG4gICAgcmV0dXJuIC0xXG4gIH1cblxuICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmNvbWJpbmVcbiAgICA/IGNvbWJpbmVSYW5nZXMocmFuZ2VzKVxuICAgIDogcmFuZ2VzXG59XG5cbi8qKlxuICogQ29tYmluZSBvdmVybGFwcGluZyAmIGFkamFjZW50IHJhbmdlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29tYmluZVJhbmdlcyAocmFuZ2VzKSB7XG4gIHZhciBvcmRlcmVkID0gcmFuZ2VzLm1hcChtYXBXaXRoSW5kZXgpLnNvcnQoc29ydEJ5UmFuZ2VTdGFydClcblxuICBmb3IgKHZhciBqID0gMCwgaSA9IDE7IGkgPCBvcmRlcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJhbmdlID0gb3JkZXJlZFtpXVxuICAgIHZhciBjdXJyZW50ID0gb3JkZXJlZFtqXVxuXG4gICAgaWYgKHJhbmdlLnN0YXJ0ID4gY3VycmVudC5lbmQgKyAxKSB7XG4gICAgICAvLyBuZXh0IHJhbmdlXG4gICAgICBvcmRlcmVkWysral0gPSByYW5nZVxuICAgIH0gZWxzZSBpZiAocmFuZ2UuZW5kID4gY3VycmVudC5lbmQpIHtcbiAgICAgIC8vIGV4dGVuZCByYW5nZVxuICAgICAgY3VycmVudC5lbmQgPSByYW5nZS5lbmRcbiAgICAgIGN1cnJlbnQuaW5kZXggPSBNYXRoLm1pbihjdXJyZW50LmluZGV4LCByYW5nZS5pbmRleClcbiAgICB9XG4gIH1cblxuICAvLyB0cmltIG9yZGVyZWQgYXJyYXlcbiAgb3JkZXJlZC5sZW5ndGggPSBqICsgMVxuXG4gIC8vIGdlbmVyYXRlIGNvbWJpbmVkIHJhbmdlXG4gIHZhciBjb21iaW5lZCA9IG9yZGVyZWQuc29ydChzb3J0QnlSYW5nZUluZGV4KS5tYXAobWFwV2l0aG91dEluZGV4KVxuXG4gIC8vIGNvcHkgcmFuZ2VzIHR5cGVcbiAgY29tYmluZWQudHlwZSA9IHJhbmdlcy50eXBlXG5cbiAgcmV0dXJuIGNvbWJpbmVkXG59XG5cbi8qKlxuICogTWFwIGZ1bmN0aW9uIHRvIGFkZCBpbmRleCB2YWx1ZSB0byByYW5nZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG1hcFdpdGhJbmRleCAocmFuZ2UsIGluZGV4KSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LFxuICAgIGVuZDogcmFuZ2UuZW5kLFxuICAgIGluZGV4OiBpbmRleFxuICB9XG59XG5cbi8qKlxuICogTWFwIGZ1bmN0aW9uIHRvIHJlbW92ZSBpbmRleCB2YWx1ZSBmcm9tIHJhbmdlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbWFwV2l0aG91dEluZGV4IChyYW5nZSkge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0OiByYW5nZS5zdGFydCxcbiAgICBlbmQ6IHJhbmdlLmVuZFxuICB9XG59XG5cbi8qKlxuICogU29ydCBmdW5jdGlvbiB0byBzb3J0IHJhbmdlcyBieSBpbmRleC5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc29ydEJ5UmFuZ2VJbmRleCAoYSwgYikge1xuICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXhcbn1cblxuLyoqXG4gKiBTb3J0IGZ1bmN0aW9uIHRvIHNvcnQgcmFuZ2VzIGJ5IHN0YXJ0IHBvc2l0aW9uLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzb3J0QnlSYW5nZVN0YXJ0IChhLCBiKSB7XG4gIHJldHVybiBhLnN0YXJ0IC0gYi5zdGFydFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3JhbmdlLXBhcnNlci9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gOTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBwcm94eS1hZGRyXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE2IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3h5YWRkclxubW9kdWxlLmV4cG9ydHMuYWxsID0gYWxsYWRkcnNcbm1vZHVsZS5leHBvcnRzLmNvbXBpbGUgPSBjb21waWxlXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGZvcndhcmRlZCA9IHJlcXVpcmUoJ2ZvcndhcmRlZCcpXG52YXIgaXBhZGRyID0gcmVxdWlyZSgnaXBhZGRyLmpzJylcblxuLyoqXG4gKiBWYXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBESUdJVF9SRUdFWFAgPSAvXlswLTldKyQvXG52YXIgaXNpcCA9IGlwYWRkci5pc1ZhbGlkXG52YXIgcGFyc2VpcCA9IGlwYWRkci5wYXJzZVxuXG4vKipcbiAqIFByZS1kZWZpbmVkIElQIHJhbmdlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIElQX1JBTkdFUyA9IHtcbiAgbGlua2xvY2FsOiBbJzE2OS4yNTQuMC4wLzE2JywgJ2ZlODA6Oi8xMCddLFxuICBsb29wYmFjazogWycxMjcuMC4wLjEvOCcsICc6OjEvMTI4J10sXG4gIHVuaXF1ZWxvY2FsOiBbJzEwLjAuMC4wLzgnLCAnMTcyLjE2LjAuMC8xMicsICcxOTIuMTY4LjAuMC8xNicsICdmYzAwOjovNyddXG59XG5cbi8qKlxuICogR2V0IGFsbCBhZGRyZXNzZXMgaW4gdGhlIHJlcXVlc3QsIG9wdGlvbmFsbHkgc3RvcHBpbmdcbiAqIGF0IHRoZSBmaXJzdCB1bnRydXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3RcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl8U3RyaW5nfSBbdHJ1c3RdXG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gYWxsYWRkcnMgKHJlcSwgdHJ1c3QpIHtcbiAgLy8gZ2V0IGFkZHJlc3Nlc1xuICB2YXIgYWRkcnMgPSBmb3J3YXJkZWQocmVxKVxuXG4gIGlmICghdHJ1c3QpIHtcbiAgICAvLyBSZXR1cm4gYWxsIGFkZHJlc3Nlc1xuICAgIHJldHVybiBhZGRyc1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0cnVzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRydXN0ID0gY29tcGlsZSh0cnVzdClcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkcnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgaWYgKHRydXN0KGFkZHJzW2ldLCBpKSkgY29udGludWVcblxuICAgIGFkZHJzLmxlbmd0aCA9IGkgKyAxXG4gIH1cblxuICByZXR1cm4gYWRkcnNcbn1cblxuLyoqXG4gKiBDb21waWxlIGFyZ3VtZW50IGludG8gdHJ1c3QgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheXxTdHJpbmd9IHZhbFxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb21waWxlICh2YWwpIHtcbiAgaWYgKCF2YWwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBpcyByZXF1aXJlZCcpXG4gIH1cblxuICB2YXIgdHJ1c3RcblxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnVzdCA9IFt2YWxdXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgdHJ1c3QgPSB2YWwuc2xpY2UoKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Vuc3VwcG9ydGVkIHRydXN0IGFyZ3VtZW50JylcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJ1c3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YWwgPSB0cnVzdFtpXVxuXG4gICAgaWYgKCFJUF9SQU5HRVMuaGFzT3duUHJvcGVydHkodmFsKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyBTcGxpY2UgaW4gcHJlLWRlZmluZWQgcmFuZ2VcbiAgICB2YWwgPSBJUF9SQU5HRVNbdmFsXVxuICAgIHRydXN0LnNwbGljZS5hcHBseSh0cnVzdCwgW2ksIDFdLmNvbmNhdCh2YWwpKVxuICAgIGkgKz0gdmFsLmxlbmd0aCAtIDFcbiAgfVxuXG4gIHJldHVybiBjb21waWxlVHJ1c3QoY29tcGlsZVJhbmdlU3VibmV0cyh0cnVzdCkpXG59XG5cbi8qKlxuICogQ29tcGlsZSBgYXJyYCBlbGVtZW50cyBpbnRvIHJhbmdlIHN1Ym5ldHMuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbXBpbGVSYW5nZVN1Ym5ldHMgKGFycikge1xuICB2YXIgcmFuZ2VTdWJuZXRzID0gbmV3IEFycmF5KGFyci5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICByYW5nZVN1Ym5ldHNbaV0gPSBwYXJzZWlwTm90YXRpb24oYXJyW2ldKVxuICB9XG5cbiAgcmV0dXJuIHJhbmdlU3VibmV0c1xufVxuXG4vKipcbiAqIENvbXBpbGUgcmFuZ2Ugc3VibmV0IGFycmF5IGludG8gdHJ1c3QgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcmFuZ2VTdWJuZXRzXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbXBpbGVUcnVzdCAocmFuZ2VTdWJuZXRzKSB7XG4gIC8vIFJldHVybiBvcHRpbWl6ZWQgZnVuY3Rpb24gYmFzZWQgb24gbGVuZ3RoXG4gIHZhciBsZW4gPSByYW5nZVN1Ym5ldHMubGVuZ3RoXG4gIHJldHVybiBsZW4gPT09IDBcbiAgICA/IHRydXN0Tm9uZVxuICAgIDogbGVuID09PSAxXG4gICAgICA/IHRydXN0U2luZ2xlKHJhbmdlU3VibmV0c1swXSlcbiAgICAgIDogdHJ1c3RNdWx0aShyYW5nZVN1Ym5ldHMpXG59XG5cbi8qKlxuICogUGFyc2UgSVAgbm90YXRpb24gc3RyaW5nIGludG8gcmFuZ2Ugc3VibmV0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBub3RlXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlaXBOb3RhdGlvbiAobm90ZSkge1xuICB2YXIgcG9zID0gbm90ZS5sYXN0SW5kZXhPZignLycpXG4gIHZhciBzdHIgPSBwb3MgIT09IC0xXG4gICAgPyBub3RlLnN1YnN0cmluZygwLCBwb3MpXG4gICAgOiBub3RlXG5cbiAgaWYgKCFpc2lwKHN0cikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIElQIGFkZHJlc3M6ICcgKyBzdHIpXG4gIH1cblxuICB2YXIgaXAgPSBwYXJzZWlwKHN0cilcblxuICBpZiAocG9zID09PSAtMSAmJiBpcC5raW5kKCkgPT09ICdpcHY2JyAmJiBpcC5pc0lQdjRNYXBwZWRBZGRyZXNzKCkpIHtcbiAgICAvLyBTdG9yZSBhcyBJUHY0XG4gICAgaXAgPSBpcC50b0lQdjRBZGRyZXNzKClcbiAgfVxuXG4gIHZhciBtYXggPSBpcC5raW5kKCkgPT09ICdpcHY2J1xuICAgID8gMTI4XG4gICAgOiAzMlxuXG4gIHZhciByYW5nZSA9IHBvcyAhPT0gLTFcbiAgICA/IG5vdGUuc3Vic3RyaW5nKHBvcyArIDEsIG5vdGUubGVuZ3RoKVxuICAgIDogbnVsbFxuXG4gIGlmIChyYW5nZSA9PT0gbnVsbCkge1xuICAgIHJhbmdlID0gbWF4XG4gIH0gZWxzZSBpZiAoRElHSVRfUkVHRVhQLnRlc3QocmFuZ2UpKSB7XG4gICAgcmFuZ2UgPSBwYXJzZUludChyYW5nZSwgMTApXG4gIH0gZWxzZSBpZiAoaXAua2luZCgpID09PSAnaXB2NCcgJiYgaXNpcChyYW5nZSkpIHtcbiAgICByYW5nZSA9IHBhcnNlTmV0bWFzayhyYW5nZSlcbiAgfSBlbHNlIHtcbiAgICByYW5nZSA9IG51bGxcbiAgfVxuXG4gIGlmIChyYW5nZSA8PSAwIHx8IHJhbmdlID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCByYW5nZSBvbiBhZGRyZXNzOiAnICsgbm90ZSlcbiAgfVxuXG4gIHJldHVybiBbaXAsIHJhbmdlXVxufVxuXG4vKipcbiAqIFBhcnNlIG5ldG1hc2sgc3RyaW5nIGludG8gQ0lEUiByYW5nZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmV0bWFza1xuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZU5ldG1hc2sgKG5ldG1hc2spIHtcbiAgdmFyIGlwID0gcGFyc2VpcChuZXRtYXNrKVxuICB2YXIga2luZCA9IGlwLmtpbmQoKVxuXG4gIHJldHVybiBraW5kID09PSAnaXB2NCdcbiAgICA/IGlwLnByZWZpeExlbmd0aEZyb21TdWJuZXRNYXNrKClcbiAgICA6IG51bGxcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgYWRkcmVzcyBvZiBwcm94aWVkIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3RcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl8U3RyaW5nfSB0cnVzdFxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHByb3h5YWRkciAocmVxLCB0cnVzdCkge1xuICBpZiAoIXJlcSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcSBhcmd1bWVudCBpcyByZXF1aXJlZCcpXG4gIH1cblxuICBpZiAoIXRydXN0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndHJ1c3QgYXJndW1lbnQgaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgdmFyIGFkZHJzID0gYWxsYWRkcnMocmVxLCB0cnVzdClcbiAgdmFyIGFkZHIgPSBhZGRyc1thZGRycy5sZW5ndGggLSAxXVxuXG4gIHJldHVybiBhZGRyXG59XG5cbi8qKlxuICogU3RhdGljIHRydXN0IGZ1bmN0aW9uIHRvIHRydXN0IG5vdGhpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB0cnVzdE5vbmUgKCkge1xuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDb21waWxlIHRydXN0IGZ1bmN0aW9uIGZvciBtdWx0aXBsZSBzdWJuZXRzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHN1Ym5ldHNcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gdHJ1c3RNdWx0aSAoc3VibmV0cykge1xuICByZXR1cm4gZnVuY3Rpb24gdHJ1c3QgKGFkZHIpIHtcbiAgICBpZiAoIWlzaXAoYWRkcikpIHJldHVybiBmYWxzZVxuXG4gICAgdmFyIGlwID0gcGFyc2VpcChhZGRyKVxuICAgIHZhciBpcGNvbnZcbiAgICB2YXIga2luZCA9IGlwLmtpbmQoKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJuZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3VibmV0ID0gc3VibmV0c1tpXVxuICAgICAgdmFyIHN1Ym5ldGlwID0gc3VibmV0WzBdXG4gICAgICB2YXIgc3VibmV0a2luZCA9IHN1Ym5ldGlwLmtpbmQoKVxuICAgICAgdmFyIHN1Ym5ldHJhbmdlID0gc3VibmV0WzFdXG4gICAgICB2YXIgdHJ1c3RlZCA9IGlwXG5cbiAgICAgIGlmIChraW5kICE9PSBzdWJuZXRraW5kKSB7XG4gICAgICAgIGlmIChzdWJuZXRraW5kID09PSAnaXB2NCcgJiYgIWlwLmlzSVB2NE1hcHBlZEFkZHJlc3MoKSkge1xuICAgICAgICAgIC8vIEluY29tcGF0aWJsZSBJUCBhZGRyZXNzZXNcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpcGNvbnYpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IElQIHRvIG1hdGNoIHN1Ym5ldCBJUCBraW5kXG4gICAgICAgICAgaXBjb252ID0gc3VibmV0a2luZCA9PT0gJ2lwdjQnXG4gICAgICAgICAgICA/IGlwLnRvSVB2NEFkZHJlc3MoKVxuICAgICAgICAgICAgOiBpcC50b0lQdjRNYXBwZWRBZGRyZXNzKClcbiAgICAgICAgfVxuXG4gICAgICAgIHRydXN0ZWQgPSBpcGNvbnZcbiAgICAgIH1cblxuICAgICAgaWYgKHRydXN0ZWQubWF0Y2goc3VibmV0aXAsIHN1Ym5ldHJhbmdlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQ29tcGlsZSB0cnVzdCBmdW5jdGlvbiBmb3Igc2luZ2xlIHN1Ym5ldC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3VibmV0XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHRydXN0U2luZ2xlIChzdWJuZXQpIHtcbiAgdmFyIHN1Ym5ldGlwID0gc3VibmV0WzBdXG4gIHZhciBzdWJuZXRraW5kID0gc3VibmV0aXAua2luZCgpXG4gIHZhciBzdWJuZXRpc2lwdjQgPSBzdWJuZXRraW5kID09PSAnaXB2NCdcbiAgdmFyIHN1Ym5ldHJhbmdlID0gc3VibmV0WzFdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHRydXN0IChhZGRyKSB7XG4gICAgaWYgKCFpc2lwKGFkZHIpKSByZXR1cm4gZmFsc2VcblxuICAgIHZhciBpcCA9IHBhcnNlaXAoYWRkcilcbiAgICB2YXIga2luZCA9IGlwLmtpbmQoKVxuXG4gICAgaWYgKGtpbmQgIT09IHN1Ym5ldGtpbmQpIHtcbiAgICAgIGlmIChzdWJuZXRpc2lwdjQgJiYgIWlwLmlzSVB2NE1hcHBlZEFkZHJlc3MoKSkge1xuICAgICAgICAvLyBJbmNvbXBhdGlibGUgSVAgYWRkcmVzc2VzXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBDb252ZXJ0IElQIHRvIG1hdGNoIHN1Ym5ldCBJUCBraW5kXG4gICAgICBpcCA9IHN1Ym5ldGlzaXB2NFxuICAgICAgICA/IGlwLnRvSVB2NEFkZHJlc3MoKVxuICAgICAgICA6IGlwLnRvSVB2NE1hcHBlZEFkZHJlc3MoKVxuICAgIH1cblxuICAgIHJldHVybiBpcC5tYXRjaChzdWJuZXRpcCwgc3VibmV0cmFuZ2UpXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9wcm94eS1hZGRyL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA5N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzXG4vLyBtb2R1bGUgaWQgPSA5OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1jcmVhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAxMDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE4IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qc1xuLy8gbW9kdWxlIGlkID0gMTAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qc1xuLy8gbW9kdWxlIGlkID0gMTA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDEwNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1zdGVwLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190YXNrLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcGVyZm9ybS5qc1xuLy8gbW9kdWxlIGlkID0gMTEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qc1xuLy8gbW9kdWxlIGlkID0gMTExXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSB0eXBlb2YgY29yZVtLRVldID09ICdmdW5jdGlvbicgPyBjb3JlW0tFWV0gOiBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtc3BlY2llcy5qc1xuLy8gbW9kdWxlIGlkID0gMTEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBnZXRKc29uRGF0YVN5bmMsIHdyaXRlSnNvbkRhdGFTeW5jIH0gIGZyb20gJy4vanNvbic7XG5pbXBvcnQgeyBNRVRSSUNTX1BBVEggfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmZ1bmN0aW9uIHNhdmVUYXJnZXRzKHRhcmdldHMpIHtcbiAgbGV0IG1ldHJpY3MgPSBbXTtcbiAgZm9yIChsZXQgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICBtZXRyaWNzLnB1c2goc2F2ZVRhcmdldCh0YXJnZXQpKTtcbiAgfVxuICByZXR1cm4gbWV0cmljcztcbn1cblxuZnVuY3Rpb24gc2F2ZVRhcmdldCh0YXJnZXQpIHtcbiAgLy9jb25zdCBtZDUgPSBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JylcbiAgY29uc3QgdGFyZ2V0SWQgPSBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKEpTT04uc3RyaW5naWZ5KHRhcmdldCkpLmRpZ2VzdCgnaGV4Jyk7XG4gIGxldCBmaWxlbmFtZSA9IHBhdGguam9pbihNRVRSSUNTX1BBVEgsIGAke3RhcmdldElkfS5qc29uYCk7XG4gIHdyaXRlSnNvbkRhdGFTeW5jKGZpbGVuYW1lLCB0YXJnZXQpO1xuICByZXR1cm4gdGFyZ2V0SWQ7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXRJZCkge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oTUVUUklDU19QQVRILCBgJHt0YXJnZXRJZH0uanNvbmApO1xuICByZXR1cm4gZ2V0SnNvbkRhdGFTeW5jKGZpbGVuYW1lKTtcbn1cblxuZXhwb3J0IHsgc2F2ZVRhcmdldHMsIGdldFRhcmdldCB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2aWNlcy9tZXRyaWNzLnRzIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoXCJzdHJlYW1cIilcbnZhciB3cml0ZU1ldGhvZHMgPSBbXCJ3cml0ZVwiLCBcImVuZFwiLCBcImRlc3Ryb3lcIl1cbnZhciByZWFkTWV0aG9kcyA9IFtcInJlc3VtZVwiLCBcInBhdXNlXCJdXG52YXIgcmVhZEV2ZW50cyA9IFtcImRhdGFcIiwgXCJjbG9zZVwiXVxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG5cbm1vZHVsZS5leHBvcnRzID0gZHVwbGV4XG5cbmZ1bmN0aW9uIGZvckVhY2ggKGFyciwgZm4pIHtcbiAgICBpZiAoYXJyLmZvckVhY2gpIHtcbiAgICAgICAgcmV0dXJuIGFyci5mb3JFYWNoKGZuKVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZuKGFycltpXSwgaSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGR1cGxleCh3cml0ZXIsIHJlYWRlcikge1xuICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyZWFtKClcbiAgICB2YXIgZW5kZWQgPSBmYWxzZVxuXG4gICAgZm9yRWFjaCh3cml0ZU1ldGhvZHMsIHByb3h5V3JpdGVyKVxuXG4gICAgZm9yRWFjaChyZWFkTWV0aG9kcywgcHJveHlSZWFkZXIpXG5cbiAgICBmb3JFYWNoKHJlYWRFdmVudHMsIHByb3h5U3RyZWFtKVxuXG4gICAgcmVhZGVyLm9uKFwiZW5kXCIsIGhhbmRsZUVuZClcblxuICAgIHdyaXRlci5vbihcImRyYWluXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgc3RyZWFtLmVtaXQoXCJkcmFpblwiKVxuICAgIH0pXG5cbiAgICB3cml0ZXIub24oXCJlcnJvclwiLCByZWVtaXQpXG4gICAgcmVhZGVyLm9uKFwiZXJyb3JcIiwgcmVlbWl0KVxuXG4gICAgc3RyZWFtLndyaXRhYmxlID0gd3JpdGVyLndyaXRhYmxlXG4gICAgc3RyZWFtLnJlYWRhYmxlID0gcmVhZGVyLnJlYWRhYmxlXG5cbiAgICByZXR1cm4gc3RyZWFtXG5cbiAgICBmdW5jdGlvbiBwcm94eVdyaXRlcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHN0cmVhbVttZXRob2ROYW1lXSA9IG1ldGhvZFxuXG4gICAgICAgIGZ1bmN0aW9uIG1ldGhvZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB3cml0ZXJbbWV0aG9kTmFtZV0uYXBwbHkod3JpdGVyLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm94eVJlYWRlcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHN0cmVhbVttZXRob2ROYW1lXSA9IG1ldGhvZFxuXG4gICAgICAgIGZ1bmN0aW9uIG1ldGhvZCgpIHtcbiAgICAgICAgICAgIHN0cmVhbS5lbWl0KG1ldGhvZE5hbWUpXG4gICAgICAgICAgICB2YXIgZnVuYyA9IHJlYWRlclttZXRob2ROYW1lXVxuICAgICAgICAgICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShyZWFkZXIsIGFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRlci5lbWl0KG1ldGhvZE5hbWUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm94eVN0cmVhbShtZXRob2ROYW1lKSB7XG4gICAgICAgIHJlYWRlci5vbihtZXRob2ROYW1lLCByZWVtaXQpXG5cbiAgICAgICAgZnVuY3Rpb24gcmVlbWl0KCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgICAgICAgICAgIGFyZ3MudW5zaGlmdChtZXRob2ROYW1lKVxuICAgICAgICAgICAgc3RyZWFtLmVtaXQuYXBwbHkoc3RyZWFtLCBhcmdzKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlRW5kKCkge1xuICAgICAgICBpZiAoZW5kZWQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGVuZGVkID0gdHJ1ZVxuICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgICAgICBhcmdzLnVuc2hpZnQoXCJlbmRcIilcbiAgICAgICAgc3RyZWFtLmVtaXQuYXBwbHkoc3RyZWFtLCBhcmdzKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZW1pdChlcnIpIHtcbiAgICAgICAgc3RyZWFtLmVtaXQoXCJlcnJvclwiLCBlcnIpXG4gICAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2R1cGxleGVyL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxMTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19tZXRhLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qc1xuLy8gbW9kdWxlIGlkID0gMTE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vaW1wb3J0ICogYXMgVGVsZWdyYWYgZnJvbSAndGVsZWdyYWYnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgREFUQV9QQVRIIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGdldEpzb25EYXRhU3luYywgd3JpdGVKc29uRGF0YVN5bmMgfSBmcm9tICcuL2pzb24nO1xuaW1wb3J0IHsgQW5vbWFseUlkIH0gZnJvbSAnLi9hbm9tYWx5VHlwZSc7XG5cblxudHlwZSBTdWJzY3JpYmVySWQgPSBzdHJpbmc7XG50eXBlIFN1YnNjcmliZXJzTWFwID0gTWFwPCBBbm9tYWx5SWQsIFN1YnNjcmliZXJJZFtdID47XG5cbnR5cGUgQm90Q29uZmlnID0ge1xuICB0b2tlbjogc3RyaW5nLFxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpYmVyc01hcFxufTtcblxuZnVuY3Rpb24gc2VuZE5vdGlmaWNhdGlvbihhbm9tYWx5TmFtZSwgYWN0aXZlKSB7XG4gIGNvbnNvbGUubG9nKCdOb3RpZmljYXRpb24gJyArIGFub21hbHlOYW1lKTtcbiAgaWYoYW5vbWFseU5hbWUgaW4gYm90Q29uZmlnLnN1YnNjcmlwdGlvbnMpIHtcbiAgICBsZXQgbm90aWZpY2F0aW9uTWVzc2FnZTtcbiAgICBpZihhY3RpdmUpIHtcbiAgICAgIG5vdGlmaWNhdGlvbk1lc3NhZ2UgPSAnQWxlcnQhIEFub21hbHkgdHlwZSAnICsgYW5vbWFseU5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvbk1lc3NhZ2UgPSAnT2shIEFub21hbHkgdHlwZSAnICsgYW5vbWFseU5hbWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgU3Vic2NyaWJlcklkIG9mIGJvdENvbmZpZy5zdWJzY3JpcHRpb25zW2Fub21hbHlOYW1lXSkge1xuICAgICAgYm90LnRlbGVncmFtLnNlbmRNZXNzYWdlKFN1YnNjcmliZXJJZCwgbm90aWZpY2F0aW9uTWVzc2FnZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRCb3RDb25maWcoKSA6IEJvdENvbmZpZyB7XG4gIGxldCBmaWxlbmFtZSA9IHBhdGguam9pbihEQVRBX1BBVEgsIGBib3RfY29uZmlnLmpzb25gKTtcbiAgbGV0IGpzb25EYXRhO1xuICB0cnkge1xuICAgIGpzb25EYXRhID0gZ2V0SnNvbkRhdGFTeW5jKGZpbGVuYW1lKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpO1xuICAgIGpzb25EYXRhID0gW107XG4gIH1cbiAgcmV0dXJuIGpzb25EYXRhO1xufVxuXG5mdW5jdGlvbiBzYXZlQm90Q29uZmlnKGJvdENvbmZpZzogQm90Q29uZmlnKSB7XG4gIGxldCBmaWxlbmFtZSA9IHBhdGguam9pbihEQVRBX1BBVEgsIGBib3RfY29uZmlnLmpzb25gKTtcbiAgdHJ5IHtcbiAgICB3cml0ZUpzb25EYXRhU3luYyhmaWxlbmFtZSwgYm90Q29uZmlnKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpO1xuICB9XG59XG5cbmNvbnN0IGNvbW1hbmRBcmdzID0gKGN0eCwgbmV4dCkgPT4ge1xuICB0cnkge1xuICAgIGlmKGN0eC51cGRhdGVUeXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBjdHgudXBkYXRlLm1lc3NhZ2UudGV4dDtcbiAgICAgIGlmKHRleHQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0LnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2goL15cXC8oW15cXHNdKylcXHM/KC4rKT8vKTtcbiAgICAgICAgbGV0IGFyZ3MgPSBbXTtcbiAgICAgICAgbGV0IGNvbW1hbmQ7XG4gICAgICAgIGlmKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYobWF0Y2hbMV0pIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBtYXRjaFsxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgIGFyZ3MgPSBtYXRjaFsyXS5zcGxpdCgnICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdHguc3RhdGUuY29tbWFuZCA9IHtcbiAgICAgICAgICByYXc6IHRleHQsXG4gICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICBhcmdzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dChjdHgpO1xuICB9IGNhdGNoIChlKSB7XG5cbiAgfVxufTtcblxuZnVuY3Rpb24gYWRkTm90aWZpY2F0aW9uKGN0eCkge1xuICBjb25zb2xlLmxvZygnYWRkTm90aWZpY2F0aW9uJylcbiAgbGV0IGNvbW1hbmQgPSBjdHguc3RhdGUuY29tbWFuZDtcbiAgbGV0IGNoYXRJZCA9IGN0eC5jaGF0LmlkO1xuICBpZihjb21tYW5kLmFyZ3MubGVuZ3RoID4gMCkge1xuICAgIGZvciAobGV0IGFub21hbHlOYW1lIG9mIGNvbW1hbmQuYXJncykge1xuICAgICAgaWYoIShhbm9tYWx5TmFtZSBpbiBib3RDb25maWcuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgYm90Q29uZmlnLnN1YnNjcmlwdGlvbnNbYW5vbWFseU5hbWVdID0gW11cbiAgICAgIH1cbiAgICAgIGlmKGJvdENvbmZpZy5zdWJzY3JpcHRpb25zW2Fub21hbHlOYW1lXS5pbmNsdWRlcyhjaGF0SWQpKSB7XG4gICAgICAgIHJldHVybiBjdHgucmVwbHkoJ1lvdSBhcmUgYWxyZWFkeSBzdWJzY3JpYmVkIG9uIGFsZXJ0cyBmcm9tIGFub21hbHkgJyArIGNvbW1hbmQuYXJncylcbiAgICAgIH0gIGVsc2Uge1xuICAgICAgICBib3RDb25maWcuc3Vic2NyaXB0aW9uc1thbm9tYWx5TmFtZV0ucHVzaChjaGF0SWQpO1xuICAgICAgICBzYXZlQm90Q29uZmlnKGJvdENvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHgucmVwbHkoJ1lvdSBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgb24gYWxlcnRzIGZyb20gYW5vbWFseSAnICsgY29tbWFuZC5hcmdzKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjdHgucmVwbHkoJ1lvdSBzaG91bGQgdXNlIHN5bnRheDogXFwvYWRkTm90aWZpY2F0aW9uIDxhbm9tYWx5X25hbWU+JylcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVOb3RpZmljYXRpb24oY3R4KSB7XG4gIGxldCBjb21tYW5kID0gY3R4LnN0YXRlLmNvbW1hbmQ7XG4gIGxldCBjaGF0SWQgPSBjdHguY2hhdC5pZDtcbiAgaWYoY29tbWFuZC5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGxldCBhbm9tYWx5TmFtZSBvZiBjb21tYW5kLmFyZ3MpIHtcbiAgICAgIGlmKGFub21hbHlOYW1lIGluIGJvdENvbmZpZy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgIGJvdENvbmZpZy5zdWJzY3JpcHRpb25zW2Fub21hbHlOYW1lXSA9IGJvdENvbmZpZy5zdWJzY3JpcHRpb25zW2Fub21hbHlOYW1lXS5maWx0ZXIoZWwgPT4gZWwgIT09IGNoYXRJZCk7XG4gICAgICAgIHNhdmVCb3RDb25maWcoYm90Q29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eC5yZXBseSgnWW91IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gYWxlcnRzIGZyb20gJyArIGNvbW1hbmQuYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGN0eC5yZXBseSgnWW91IHNob3VsZCB1c2Ugc3ludGF4OiBcXC9yZW1vdmVOb3RpZmljYXRpb24gPGFub21hbHlfbmFtZT4nKTtcbiAgfVxufVxuXG4vLyBjb25zdCBUZWxlZ3JhZiA9IHJlcXVpcmUoJ3RlbGVncmFmJyk7XG5sZXQgYm90Q29uZmlnOiBCb3RDb25maWc7XG5sZXQgYm90O1xuXG5mdW5jdGlvbiB0Z0JvdEluaXQoKSB7XG4gIHRyeSB7XG4gICAgLy8gYm90Q29uZmlnID0gbG9hZEJvdENvbmZpZygpO1xuICAgIC8vIGJvdCA9IG5ldyBUZWxlZ3JhZihib3RDb25maWcudG9rZW4pO1xuXG4gICAgLy8gYm90LnVzZShjb21tYW5kQXJncyk7XG5cbiAgICAvLyBib3QuY29tbWFuZCgnYWRkTm90aWZpY2F0aW9uJywgYWRkTm90aWZpY2F0aW9uKTtcbiAgICAvLyBib3QuY29tbWFuZCgncmVtb3ZlTm90aWZpY2F0aW9uJywgcmVtb3ZlTm90aWZpY2F0aW9uKTtcblxuICAgIC8vIGJvdC5zdGFydFBvbGxpbmcoKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgLy8gVE9ETzogaGFuZGxlIGV4Y2VwdGlvblxuICB9XG59XG5cbmV4cG9ydCB7IHNlbmROb3RpZmljYXRpb24sIHRnQm90SW5pdCB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24udHMiLCJpbXBvcnQgKiBhcyBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0ICogYXMgYm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XG5cbmltcG9ydCB7IHJvdXRlciBhcyBhbm9tYWxpZXNSb3V0ZXIgfSBmcm9tICcuL3JvdXRlcy9hbm9tYWxpZXMnO1xuaW1wb3J0IHsgcm91dGVyIGFzIHNlZ21lbnRzUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXMvc2VnbWVudHMnO1xuaW1wb3J0IHsgcm91dGVyIGFzIGFsZXJ0c1JvdXRlciB9IGZyb20gJy4vcm91dGVzL2FsZXJ0cyc7XG5pbXBvcnQgeyB0Z0JvdEluaXQgfSBmcm9tICcuL3NlcnZpY2VzL25vdGlmaWNhdGlvbic7XG5cbmNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcbmNvbnN0IFBPUlQgPSBwcm9jZXNzLmVudi5IQVNUSUNfUE9SVCB8fCA4MDAwO1xuXG5hcHAudXNlKGJvZHlQYXJzZXIuanNvbigpKTtcbmFwcC51c2UoYm9keVBhcnNlci51cmxlbmNvZGVkKHsgZXh0ZW5kZWQ6IHRydWUgfSkpO1xuXG5hcHAudXNlKGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCAnKicpO1xuICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCwgUE9TVCwgUFVULCBERUxFVEUsIFBBVENILCBPUFRJT05TJyk7XG4gIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCAnT3JpZ2luLCBYLVJlcXVlc3RlZC1XaXRoLCBDb250ZW50LVR5cGUsIEFjY2VwdCcpO1xuICBuZXh0KCk7XG59KTtcblxuYXBwLnVzZSgnL2Fub21hbGllcycsIGFub21hbGllc1JvdXRlcik7XG5hcHAudXNlKCcvc2VnbWVudHMnLCBzZWdtZW50c1JvdXRlcik7XG5hcHAudXNlKCcvYWxlcnRzJywgYWxlcnRzUm91dGVyKTtcbmFwcC51c2UoJy8nLCAocmVxLCByZXMpID0+IHJlcy5zZW5kKHsgc3RhdHVzOiAnT0snIH0pKTtcblxuYXBwLmxpc3RlbihQT1JULCAoKSA9PiB7XG4gIGNvbnNvbGUubG9nKGBTZXJ2ZXIgaXMgcnVubmluZyBvbiA6JHtQT1JUfWApXG59KTtcblxudGdCb3RJbml0KCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9pbmRleC50cyIsIi8qIVxuICogZXhwcmVzc1xuICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMyBUSiBIb2xvd2F5Y2h1a1xuICogQ29weXJpZ2h0KGMpIDIwMTMgUm9tYW4gU2h0eWxtYW5cbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBib2R5UGFyc2VyID0gcmVxdWlyZSgnYm9keS1wYXJzZXInKVxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBtaXhpbiA9IHJlcXVpcmUoJ21lcmdlLWRlc2NyaXB0b3JzJyk7XG52YXIgcHJvdG8gPSByZXF1aXJlKCcuL2FwcGxpY2F0aW9uJyk7XG52YXIgUm91dGUgPSByZXF1aXJlKCcuL3JvdXRlci9yb3V0ZScpO1xudmFyIFJvdXRlciA9IHJlcXVpcmUoJy4vcm91dGVyJyk7XG52YXIgcmVxID0gcmVxdWlyZSgnLi9yZXF1ZXN0Jyk7XG52YXIgcmVzID0gcmVxdWlyZSgnLi9yZXNwb25zZScpO1xuXG4vKipcbiAqIEV4cG9zZSBgY3JlYXRlQXBwbGljYXRpb24oKWAuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXBwbGljYXRpb247XG5cbi8qKlxuICogQ3JlYXRlIGFuIGV4cHJlc3MgYXBwbGljYXRpb24uXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUFwcGxpY2F0aW9uKCkge1xuICB2YXIgYXBwID0gZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpIHtcbiAgICBhcHAuaGFuZGxlKHJlcSwgcmVzLCBuZXh0KTtcbiAgfTtcblxuICBtaXhpbihhcHAsIEV2ZW50RW1pdHRlci5wcm90b3R5cGUsIGZhbHNlKTtcbiAgbWl4aW4oYXBwLCBwcm90bywgZmFsc2UpO1xuXG4gIC8vIGV4cG9zZSB0aGUgcHJvdG90eXBlIHRoYXQgd2lsbCBnZXQgc2V0IG9uIHJlcXVlc3RzXG4gIGFwcC5yZXF1ZXN0ID0gT2JqZWN0LmNyZWF0ZShyZXEsIHtcbiAgICBhcHA6IHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IGFwcCB9XG4gIH0pXG5cbiAgLy8gZXhwb3NlIHRoZSBwcm90b3R5cGUgdGhhdCB3aWxsIGdldCBzZXQgb24gcmVzcG9uc2VzXG4gIGFwcC5yZXNwb25zZSA9IE9iamVjdC5jcmVhdGUocmVzLCB7XG4gICAgYXBwOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBhcHAgfVxuICB9KVxuXG4gIGFwcC5pbml0KCk7XG4gIHJldHVybiBhcHA7XG59XG5cbi8qKlxuICogRXhwb3NlIHRoZSBwcm90b3R5cGVzLlxuICovXG5cbmV4cG9ydHMuYXBwbGljYXRpb24gPSBwcm90bztcbmV4cG9ydHMucmVxdWVzdCA9IHJlcTtcbmV4cG9ydHMucmVzcG9uc2UgPSByZXM7XG5cbi8qKlxuICogRXhwb3NlIGNvbnN0cnVjdG9ycy5cbiAqL1xuXG5leHBvcnRzLlJvdXRlID0gUm91dGU7XG5leHBvcnRzLlJvdXRlciA9IFJvdXRlcjtcblxuLyoqXG4gKiBFeHBvc2UgbWlkZGxld2FyZVxuICovXG5cbmV4cG9ydHMuanNvbiA9IGJvZHlQYXJzZXIuanNvblxuZXhwb3J0cy5xdWVyeSA9IHJlcXVpcmUoJy4vbWlkZGxld2FyZS9xdWVyeScpO1xuZXhwb3J0cy5zdGF0aWMgPSByZXF1aXJlKCdzZXJ2ZS1zdGF0aWMnKTtcbmV4cG9ydHMudXJsZW5jb2RlZCA9IGJvZHlQYXJzZXIudXJsZW5jb2RlZFxuXG4vKipcbiAqIFJlcGxhY2UgcmVtb3ZlZCBtaWRkbGV3YXJlIHdpdGggYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZS5cbiAqL1xuXG47W1xuICAnYm9keVBhcnNlcicsXG4gICdjb21wcmVzcycsXG4gICdjb29raWVTZXNzaW9uJyxcbiAgJ3Nlc3Npb24nLFxuICAnbG9nZ2VyJyxcbiAgJ2Nvb2tpZVBhcnNlcicsXG4gICdmYXZpY29uJyxcbiAgJ3Jlc3BvbnNlVGltZScsXG4gICdlcnJvckhhbmRsZXInLFxuICAndGltZW91dCcsXG4gICdtZXRob2RPdmVycmlkZScsXG4gICd2aG9zdCcsXG4gICdjc3JmJyxcbiAgJ2RpcmVjdG9yeScsXG4gICdsaW1pdCcsXG4gICdtdWx0aXBhcnQnLFxuICAnc3RhdGljQ2FjaGUnLFxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vc3QgbWlkZGxld2FyZSAobGlrZSAnICsgbmFtZSArICcpIGlzIG5vIGxvbmdlciBidW5kbGVkIHdpdGggRXhwcmVzcyBhbmQgbXVzdCBiZSBpbnN0YWxsZWQgc2VwYXJhdGVseS4gUGxlYXNlIHNlZSBodHRwczovL2dpdGh1Yi5jb20vc2VuY2hhbGFicy9jb25uZWN0I21pZGRsZXdhcmUuJyk7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9leHByZXNzL2xpYi9leHByZXNzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBkZXBkXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBjYWxsU2l0ZVRvU3RyaW5nXG5cbi8qKlxuICogRm9ybWF0IGEgQ2FsbFNpdGUgZmlsZSBsb2NhdGlvbiB0byBhIHN0cmluZy5cbiAqL1xuXG5mdW5jdGlvbiBjYWxsU2l0ZUZpbGVMb2NhdGlvbiAoY2FsbFNpdGUpIHtcbiAgdmFyIGZpbGVOYW1lXG4gIHZhciBmaWxlTG9jYXRpb24gPSAnJ1xuXG4gIGlmIChjYWxsU2l0ZS5pc05hdGl2ZSgpKSB7XG4gICAgZmlsZUxvY2F0aW9uID0gJ25hdGl2ZSdcbiAgfSBlbHNlIGlmIChjYWxsU2l0ZS5pc0V2YWwoKSkge1xuICAgIGZpbGVOYW1lID0gY2FsbFNpdGUuZ2V0U2NyaXB0TmFtZU9yU291cmNlVVJMKClcbiAgICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgICBmaWxlTG9jYXRpb24gPSBjYWxsU2l0ZS5nZXRFdmFsT3JpZ2luKClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZmlsZU5hbWUgPSBjYWxsU2l0ZS5nZXRGaWxlTmFtZSgpXG4gIH1cblxuICBpZiAoZmlsZU5hbWUpIHtcbiAgICBmaWxlTG9jYXRpb24gKz0gZmlsZU5hbWVcblxuICAgIHZhciBsaW5lTnVtYmVyID0gY2FsbFNpdGUuZ2V0TGluZU51bWJlcigpXG4gICAgaWYgKGxpbmVOdW1iZXIgIT0gbnVsbCkge1xuICAgICAgZmlsZUxvY2F0aW9uICs9ICc6JyArIGxpbmVOdW1iZXJcblxuICAgICAgdmFyIGNvbHVtbk51bWJlciA9IGNhbGxTaXRlLmdldENvbHVtbk51bWJlcigpXG4gICAgICBpZiAoY29sdW1uTnVtYmVyKSB7XG4gICAgICAgIGZpbGVMb2NhdGlvbiArPSAnOicgKyBjb2x1bW5OdW1iZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsZUxvY2F0aW9uIHx8ICd1bmtub3duIHNvdXJjZSdcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBDYWxsU2l0ZSB0byBhIHN0cmluZy5cbiAqL1xuXG5mdW5jdGlvbiBjYWxsU2l0ZVRvU3RyaW5nIChjYWxsU2l0ZSkge1xuICB2YXIgYWRkU3VmZml4ID0gdHJ1ZVxuICB2YXIgZmlsZUxvY2F0aW9uID0gY2FsbFNpdGVGaWxlTG9jYXRpb24oY2FsbFNpdGUpXG4gIHZhciBmdW5jdGlvbk5hbWUgPSBjYWxsU2l0ZS5nZXRGdW5jdGlvbk5hbWUoKVxuICB2YXIgaXNDb25zdHJ1Y3RvciA9IGNhbGxTaXRlLmlzQ29uc3RydWN0b3IoKVxuICB2YXIgaXNNZXRob2RDYWxsID0gIShjYWxsU2l0ZS5pc1RvcGxldmVsKCkgfHwgaXNDb25zdHJ1Y3RvcilcbiAgdmFyIGxpbmUgPSAnJ1xuXG4gIGlmIChpc01ldGhvZENhbGwpIHtcbiAgICB2YXIgbWV0aG9kTmFtZSA9IGNhbGxTaXRlLmdldE1ldGhvZE5hbWUoKVxuICAgIHZhciB0eXBlTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZShjYWxsU2l0ZSlcblxuICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgIGlmICh0eXBlTmFtZSAmJiBmdW5jdGlvbk5hbWUuaW5kZXhPZih0eXBlTmFtZSkgIT09IDApIHtcbiAgICAgICAgbGluZSArPSB0eXBlTmFtZSArICcuJ1xuICAgICAgfVxuXG4gICAgICBsaW5lICs9IGZ1bmN0aW9uTmFtZVxuXG4gICAgICBpZiAobWV0aG9kTmFtZSAmJiBmdW5jdGlvbk5hbWUubGFzdEluZGV4T2YoJy4nICsgbWV0aG9kTmFtZSkgIT09IGZ1bmN0aW9uTmFtZS5sZW5ndGggLSBtZXRob2ROYW1lLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgbGluZSArPSAnIFthcyAnICsgbWV0aG9kTmFtZSArICddJ1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lICs9IHR5cGVOYW1lICsgJy4nICsgKG1ldGhvZE5hbWUgfHwgJzxhbm9ueW1vdXM+JylcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNDb25zdHJ1Y3Rvcikge1xuICAgIGxpbmUgKz0gJ25ldyAnICsgKGZ1bmN0aW9uTmFtZSB8fCAnPGFub255bW91cz4nKVxuICB9IGVsc2UgaWYgKGZ1bmN0aW9uTmFtZSkge1xuICAgIGxpbmUgKz0gZnVuY3Rpb25OYW1lXG4gIH0gZWxzZSB7XG4gICAgYWRkU3VmZml4ID0gZmFsc2VcbiAgICBsaW5lICs9IGZpbGVMb2NhdGlvblxuICB9XG5cbiAgaWYgKGFkZFN1ZmZpeCkge1xuICAgIGxpbmUgKz0gJyAoJyArIGZpbGVMb2NhdGlvbiArICcpJ1xuICB9XG5cbiAgcmV0dXJuIGxpbmVcbn1cblxuLyoqXG4gKiBHZXQgY29uc3RydWN0b3IgbmFtZSBvZiByZXZpdmVyLlxuICovXG5cbmZ1bmN0aW9uIGdldENvbnN0cnVjdG9yTmFtZSAob2JqKSB7XG4gIHZhciByZWNlaXZlciA9IG9iai5yZWNlaXZlclxuICByZXR1cm4gKHJlY2VpdmVyLmNvbnN0cnVjdG9yICYmIHJlY2VpdmVyLmNvbnN0cnVjdG9yLm5hbWUpIHx8IG51bGxcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9kZXBkL2xpYi9jb21wYXQvY2FsbHNpdGUtdG9zdHJpbmcuanNcbi8vIG1vZHVsZSBpZCA9IDEyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGRlcGRcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV2ZW50TGlzdGVuZXJDb3VudFxuXG4vKipcbiAqIEdldCB0aGUgY291bnQgb2YgbGlzdGVuZXJzIG9uIGFuIGV2ZW50IGVtaXR0ZXIgb2YgYSBzcGVjaWZpYyB0eXBlLlxuICovXG5cbmZ1bmN0aW9uIGV2ZW50TGlzdGVuZXJDb3VudCAoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZGVwZC9saWIvY29tcGF0L2V2ZW50LWxpc3RlbmVyLWNvdW50LmpzXG4vLyBtb2R1bGUgaWQgPSAxMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBib2R5LXBhcnNlclxuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgYnl0ZXMgPSByZXF1aXJlKCdieXRlcycpXG52YXIgY29udGVudFR5cGUgPSByZXF1aXJlKCdjb250ZW50LXR5cGUnKVxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnaHR0cC1lcnJvcnMnKVxudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnYm9keS1wYXJzZXI6anNvbicpXG52YXIgcmVhZCA9IHJlcXVpcmUoJy4uL3JlYWQnKVxudmFyIHR5cGVpcyA9IHJlcXVpcmUoJ3R5cGUtaXMnKVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0ganNvblxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCB0aGUgZmlyc3Qgbm9uLXNwYWNlIGluIGEgc3RyaW5nLlxuICpcbiAqIEFsbG93ZWQgd2hpdGVzcGFjZSBpcyBkZWZpbmVkIGluIFJGQyA3MTU5OlxuICpcbiAqICAgIHdzID0gKihcbiAqICAgICAgICAgICAgJXgyMCAvICAgICAgICAgICAgICA7IFNwYWNlXG4gKiAgICAgICAgICAgICV4MDkgLyAgICAgICAgICAgICAgOyBIb3Jpem9udGFsIHRhYlxuICogICAgICAgICAgICAleDBBIC8gICAgICAgICAgICAgIDsgTGluZSBmZWVkIG9yIE5ldyBsaW5lXG4gKiAgICAgICAgICAgICV4MEQgKSAgICAgICAgICAgICAgOyBDYXJyaWFnZSByZXR1cm5cbiAqL1xuXG52YXIgRklSU1RfQ0hBUl9SRUdFWFAgPSAvXltcXHgyMFxceDA5XFx4MGFcXHgwZF0qKC4pLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuLyoqXG4gKiBDcmVhdGUgYSBtaWRkbGV3YXJlIHRvIHBhcnNlIEpTT04gYm9kaWVzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGpzb24gKG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIGxpbWl0ID0gdHlwZW9mIG9wdHMubGltaXQgIT09ICdudW1iZXInXG4gICAgPyBieXRlcy5wYXJzZShvcHRzLmxpbWl0IHx8ICcxMDBrYicpXG4gICAgOiBvcHRzLmxpbWl0XG4gIHZhciBpbmZsYXRlID0gb3B0cy5pbmZsYXRlICE9PSBmYWxzZVxuICB2YXIgcmV2aXZlciA9IG9wdHMucmV2aXZlclxuICB2YXIgc3RyaWN0ID0gb3B0cy5zdHJpY3QgIT09IGZhbHNlXG4gIHZhciB0eXBlID0gb3B0cy50eXBlIHx8ICdhcHBsaWNhdGlvbi9qc29uJ1xuICB2YXIgdmVyaWZ5ID0gb3B0cy52ZXJpZnkgfHwgZmFsc2VcblxuICBpZiAodmVyaWZ5ICE9PSBmYWxzZSAmJiB0eXBlb2YgdmVyaWZ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIHZlcmlmeSBtdXN0IGJlIGZ1bmN0aW9uJylcbiAgfVxuXG4gIC8vIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBjaGVja2luZyBmdW5jdGlvblxuICB2YXIgc2hvdWxkUGFyc2UgPSB0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJ1xuICAgID8gdHlwZUNoZWNrZXIodHlwZSlcbiAgICA6IHR5cGVcblxuICBmdW5jdGlvbiBwYXJzZSAoYm9keSkge1xuICAgIGlmIChib2R5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gc3BlY2lhbC1jYXNlIGVtcHR5IGpzb24gYm9keSwgYXMgaXQncyBhIGNvbW1vbiBjbGllbnQtc2lkZSBtaXN0YWtlXG4gICAgICAvLyBUT0RPOiBtYXliZSBtYWtlIHRoaXMgY29uZmlndXJhYmxlIG9yIHBhcnQgb2YgXCJzdHJpY3RcIiBvcHRpb25cbiAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIGlmIChzdHJpY3QpIHtcbiAgICAgIHZhciBmaXJzdCA9IGZpcnN0Y2hhcihib2R5KVxuXG4gICAgICBpZiAoZmlyc3QgIT09ICd7JyAmJiBmaXJzdCAhPT0gJ1snKSB7XG4gICAgICAgIGRlYnVnKCdzdHJpY3QgdmlvbGF0aW9uJylcbiAgICAgICAgdGhyb3cgY3JlYXRlU3RyaWN0U3ludGF4RXJyb3IoYm9keSwgZmlyc3QpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGRlYnVnKCdwYXJzZSBqc29uJylcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGJvZHksIHJldml2ZXIpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbm9ybWFsaXplSnNvblN5bnRheEVycm9yKGUsIHtcbiAgICAgICAgc3RhY2s6IGUuc3RhY2tcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGpzb25QYXJzZXIgKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5fYm9keSkge1xuICAgICAgZGVidWcoJ2JvZHkgYWxyZWFkeSBwYXJzZWQnKVxuICAgICAgbmV4dCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXEuYm9keSA9IHJlcS5ib2R5IHx8IHt9XG5cbiAgICAvLyBza2lwIHJlcXVlc3RzIHdpdGhvdXQgYm9kaWVzXG4gICAgaWYgKCF0eXBlaXMuaGFzQm9keShyZXEpKSB7XG4gICAgICBkZWJ1Zygnc2tpcCBlbXB0eSBib2R5JylcbiAgICAgIG5leHQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZGVidWcoJ2NvbnRlbnQtdHlwZSAlaicsIHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICAgIC8vIGRldGVybWluZSBpZiByZXF1ZXN0IHNob3VsZCBiZSBwYXJzZWRcbiAgICBpZiAoIXNob3VsZFBhcnNlKHJlcSkpIHtcbiAgICAgIGRlYnVnKCdza2lwIHBhcnNpbmcnKVxuICAgICAgbmV4dCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBhc3NlcnQgY2hhcnNldCBwZXIgUkZDIDcxNTkgc2VjIDguMVxuICAgIHZhciBjaGFyc2V0ID0gZ2V0Q2hhcnNldChyZXEpIHx8ICd1dGYtOCdcbiAgICBpZiAoY2hhcnNldC5zdWJzdHIoMCwgNCkgIT09ICd1dGYtJykge1xuICAgICAgZGVidWcoJ2ludmFsaWQgY2hhcnNldCcpXG4gICAgICBuZXh0KGNyZWF0ZUVycm9yKDQxNSwgJ3Vuc3VwcG9ydGVkIGNoYXJzZXQgXCInICsgY2hhcnNldC50b1VwcGVyQ2FzZSgpICsgJ1wiJywge1xuICAgICAgICBjaGFyc2V0OiBjaGFyc2V0LFxuICAgICAgICB0eXBlOiAnY2hhcnNldC51bnN1cHBvcnRlZCdcbiAgICAgIH0pKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gcmVhZFxuICAgIHJlYWQocmVxLCByZXMsIG5leHQsIHBhcnNlLCBkZWJ1Zywge1xuICAgICAgZW5jb2Rpbmc6IGNoYXJzZXQsXG4gICAgICBpbmZsYXRlOiBpbmZsYXRlLFxuICAgICAgbGltaXQ6IGxpbWl0LFxuICAgICAgdmVyaWZ5OiB2ZXJpZnlcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIHN0cmljdCB2aW9sYXRpb24gc3ludGF4IGVycm9yIG1hdGNoaW5nIG5hdGl2ZSBlcnJvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICogQHJldHVybiB7RXJyb3J9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmljdFN5bnRheEVycm9yIChzdHIsIGNoYXIpIHtcbiAgdmFyIGluZGV4ID0gc3RyLmluZGV4T2YoY2hhcilcbiAgdmFyIHBhcnRpYWwgPSBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KSArICcjJ1xuXG4gIHRyeSB7XG4gICAgSlNPTi5wYXJzZShwYXJ0aWFsKTsgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdGhyb3cgbmV3IFN5bnRheEVycm9yKCdzdHJpY3QgdmlvbGF0aW9uJylcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBub3JtYWxpemVKc29uU3ludGF4RXJyb3IoZSwge1xuICAgICAgbWVzc2FnZTogZS5tZXNzYWdlLnJlcGxhY2UoJyMnLCBjaGFyKSxcbiAgICAgIHN0YWNrOiBlLnN0YWNrXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmaXJzdGNoYXIgKHN0cikge1xuICByZXR1cm4gRklSU1RfQ0hBUl9SRUdFWFAuZXhlYyhzdHIpWzFdXG59XG5cbi8qKlxuICogR2V0IHRoZSBjaGFyc2V0IG9mIGEgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVxXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRDaGFyc2V0IChyZXEpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGNvbnRlbnRUeXBlLnBhcnNlKHJlcSkucGFyYW1ldGVycy5jaGFyc2V0IHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSBTeW50YXhFcnJvciBmb3IgSlNPTi5wYXJzZS5cbiAqXG4gKiBAcGFyYW0ge1N5bnRheEVycm9yfSBlcnJvclxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHJldHVybiB7U3ludGF4RXJyb3J9XG4gKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplSnNvblN5bnRheEVycm9yIChlcnJvciwgb2JqKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV1cbiAgICBpZiAoa2V5ICE9PSAnc3RhY2snICYmIGtleSAhPT0gJ21lc3NhZ2UnKSB7XG4gICAgICBkZWxldGUgZXJyb3Jba2V5XVxuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wcyA9IE9iamVjdC5rZXlzKG9iailcblxuICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgdmFyIHByb3AgPSBwcm9wc1tqXVxuICAgIGVycm9yW3Byb3BdID0gb2JqW3Byb3BdXG4gIH1cblxuICByZXR1cm4gZXJyb3Jcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHNpbXBsZSB0eXBlIGNoZWNrZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5cbmZ1bmN0aW9uIHR5cGVDaGVja2VyICh0eXBlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjaGVja1R5cGUgKHJlcSkge1xuICAgIHJldHVybiBCb29sZWFuKHR5cGVpcyhyZXEsIHR5cGUpKVxuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvYm9keS1wYXJzZXIvbGliL3R5cGVzL2pzb24uanNcbi8vIG1vZHVsZSBpZCA9IDEyMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHtcIjEwMFwiOlwiQ29udGludWVcIixcIjEwMVwiOlwiU3dpdGNoaW5nIFByb3RvY29sc1wiLFwiMTAyXCI6XCJQcm9jZXNzaW5nXCIsXCIyMDBcIjpcIk9LXCIsXCIyMDFcIjpcIkNyZWF0ZWRcIixcIjIwMlwiOlwiQWNjZXB0ZWRcIixcIjIwM1wiOlwiTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb25cIixcIjIwNFwiOlwiTm8gQ29udGVudFwiLFwiMjA1XCI6XCJSZXNldCBDb250ZW50XCIsXCIyMDZcIjpcIlBhcnRpYWwgQ29udGVudFwiLFwiMjA3XCI6XCJNdWx0aS1TdGF0dXNcIixcIjIwOFwiOlwiQWxyZWFkeSBSZXBvcnRlZFwiLFwiMjI2XCI6XCJJTSBVc2VkXCIsXCIzMDBcIjpcIk11bHRpcGxlIENob2ljZXNcIixcIjMwMVwiOlwiTW92ZWQgUGVybWFuZW50bHlcIixcIjMwMlwiOlwiRm91bmRcIixcIjMwM1wiOlwiU2VlIE90aGVyXCIsXCIzMDRcIjpcIk5vdCBNb2RpZmllZFwiLFwiMzA1XCI6XCJVc2UgUHJveHlcIixcIjMwNlwiOlwiKFVudXNlZClcIixcIjMwN1wiOlwiVGVtcG9yYXJ5IFJlZGlyZWN0XCIsXCIzMDhcIjpcIlBlcm1hbmVudCBSZWRpcmVjdFwiLFwiNDAwXCI6XCJCYWQgUmVxdWVzdFwiLFwiNDAxXCI6XCJVbmF1dGhvcml6ZWRcIixcIjQwMlwiOlwiUGF5bWVudCBSZXF1aXJlZFwiLFwiNDAzXCI6XCJGb3JiaWRkZW5cIixcIjQwNFwiOlwiTm90IEZvdW5kXCIsXCI0MDVcIjpcIk1ldGhvZCBOb3QgQWxsb3dlZFwiLFwiNDA2XCI6XCJOb3QgQWNjZXB0YWJsZVwiLFwiNDA3XCI6XCJQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFwiLFwiNDA4XCI6XCJSZXF1ZXN0IFRpbWVvdXRcIixcIjQwOVwiOlwiQ29uZmxpY3RcIixcIjQxMFwiOlwiR29uZVwiLFwiNDExXCI6XCJMZW5ndGggUmVxdWlyZWRcIixcIjQxMlwiOlwiUHJlY29uZGl0aW9uIEZhaWxlZFwiLFwiNDEzXCI6XCJQYXlsb2FkIFRvbyBMYXJnZVwiLFwiNDE0XCI6XCJVUkkgVG9vIExvbmdcIixcIjQxNVwiOlwiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVwiLFwiNDE2XCI6XCJSYW5nZSBOb3QgU2F0aXNmaWFibGVcIixcIjQxN1wiOlwiRXhwZWN0YXRpb24gRmFpbGVkXCIsXCI0MThcIjpcIkknbSBhIHRlYXBvdFwiLFwiNDIxXCI6XCJNaXNkaXJlY3RlZCBSZXF1ZXN0XCIsXCI0MjJcIjpcIlVucHJvY2Vzc2FibGUgRW50aXR5XCIsXCI0MjNcIjpcIkxvY2tlZFwiLFwiNDI0XCI6XCJGYWlsZWQgRGVwZW5kZW5jeVwiLFwiNDI1XCI6XCJVbm9yZGVyZWQgQ29sbGVjdGlvblwiLFwiNDI2XCI6XCJVcGdyYWRlIFJlcXVpcmVkXCIsXCI0MjhcIjpcIlByZWNvbmRpdGlvbiBSZXF1aXJlZFwiLFwiNDI5XCI6XCJUb28gTWFueSBSZXF1ZXN0c1wiLFwiNDMxXCI6XCJSZXF1ZXN0IEhlYWRlciBGaWVsZHMgVG9vIExhcmdlXCIsXCI0NTFcIjpcIlVuYXZhaWxhYmxlIEZvciBMZWdhbCBSZWFzb25zXCIsXCI1MDBcIjpcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFwiNTAxXCI6XCJOb3QgSW1wbGVtZW50ZWRcIixcIjUwMlwiOlwiQmFkIEdhdGV3YXlcIixcIjUwM1wiOlwiU2VydmljZSBVbmF2YWlsYWJsZVwiLFwiNTA0XCI6XCJHYXRld2F5IFRpbWVvdXRcIixcIjUwNVwiOlwiSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWRcIixcIjUwNlwiOlwiVmFyaWFudCBBbHNvIE5lZ290aWF0ZXNcIixcIjUwN1wiOlwiSW5zdWZmaWNpZW50IFN0b3JhZ2VcIixcIjUwOFwiOlwiTG9vcCBEZXRlY3RlZFwiLFwiNTA5XCI6XCJCYW5kd2lkdGggTGltaXQgRXhjZWVkZWRcIixcIjUxMFwiOlwiTm90IEV4dGVuZGVkXCIsXCI1MTFcIjpcIk5ldHdvcmsgQXV0aGVudGljYXRpb24gUmVxdWlyZWRcIn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvc3RhdHVzZXMvY29kZXMuanNvblxuLy8gbW9kdWxlIGlkID0gMTIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDEyNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqXG4gKiBFeHBvc2UgYGRlYnVnKClgIGFzIHRoZSBtb2R1bGUuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kZWJ1ZycpO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9ICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWVcbiAgICAgICAgICAgICAgICYmICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWUuc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgPyBjaHJvbWUuc3RvcmFnZS5sb2NhbFxuICAgICAgICAgICAgICAgICAgOiBsb2NhbHN0b3JhZ2UoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG4gICdsaWdodHNlYWdyZWVuJyxcbiAgJ2ZvcmVzdGdyZWVuJyxcbiAgJ2dvbGRlbnJvZCcsXG4gICdkb2RnZXJibHVlJyxcbiAgJ2RhcmtvcmNoaWQnLFxuICAnY3JpbXNvbidcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICAvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG4gIC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG4gIC8vIGV4cGxpY2l0bHlcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIGlzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG4gIC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG4gIHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuICAgIC8vIGlzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuICAgIC8vIGlzIGZpcmVmb3ggPj0gdjMxP1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuICAgIC8vIGRvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uKHYpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnIubWVzc2FnZTtcbiAgfVxufTtcblxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuICB2YXIgdXNlQ29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cbiAgYXJnc1swXSA9ICh1c2VDb2xvcnMgPyAnJWMnIDogJycpXG4gICAgKyB0aGlzLm5hbWVzcGFjZVxuICAgICsgKHVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKVxuICAgICsgYXJnc1swXVxuICAgICsgKHVzZUNvbG9ycyA/ICclYyAnIDogJyAnKVxuICAgICsgJysnICsgZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG4gIGlmICghdXNlQ29sb3JzKSByZXR1cm47XG5cbiAgdmFyIGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuICBhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKVxuXG4gIC8vIHRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG4gIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0QyA9IDA7XG4gIGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIGlmICgnJSUnID09PSBtYXRjaCkgcmV0dXJuO1xuICAgIGluZGV4Kys7XG4gICAgaWYgKCclYycgPT09IG1hdGNoKSB7XG4gICAgICAvLyB3ZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcbiAgICAgIC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG4gICAgICBsYXN0QyA9IGluZGV4O1xuICAgIH1cbiAgfSk7XG5cbiAgYXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUubG9nKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5sb2dgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgLy8gdGhpcyBoYWNrZXJ5IGlzIHJlcXVpcmVkIGZvciBJRTgvOSwgd2hlcmVcbiAgLy8gdGhlIGBjb25zb2xlLmxvZ2AgZnVuY3Rpb24gZG9lc24ndCBoYXZlICdhcHBseSdcbiAgcmV0dXJuICdvYmplY3QnID09PSB0eXBlb2YgY29uc29sZVxuICAgICYmIGNvbnNvbGUubG9nXG4gICAgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UuZGVidWcgPSBuYW1lc3BhY2VzO1xuICAgIH1cbiAgfSBjYXRjaChlKSB7fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuICB0cnkge1xuICAgIHIgPSBleHBvcnRzLnN0b3JhZ2UuZGVidWc7XG4gIH0gY2F0Y2goZSkge31cblxuICAvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG4gIGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuICAgIHIgPSBwcm9jZXNzLmVudi5ERUJVRztcbiAgfVxuXG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIEVuYWJsZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiBgbG9jYWxTdG9yYWdlLmRlYnVnYCBpbml0aWFsbHkuXG4gKi9cblxuZXhwb3J0cy5lbmFibGUobG9hZCgpKTtcblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDEyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFs2LCAyLCAzLCA0LCA1LCAxXTtcblxuLyoqXG4gKiBCdWlsZCB1cCB0aGUgZGVmYXVsdCBgaW5zcGVjdE9wdHNgIG9iamVjdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogICAkIERFQlVHX0NPTE9SUz1ubyBERUJVR19ERVBUSD0xMCBERUJVR19TSE9XX0hJRERFTj1lbmFibGVkIG5vZGUgc2NyaXB0LmpzXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0T3B0cyA9IE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gL15kZWJ1Z18vaS50ZXN0KGtleSk7XG59KS5yZWR1Y2UoZnVuY3Rpb24gKG9iaiwga2V5KSB7XG4gIC8vIGNhbWVsLWNhc2VcbiAgdmFyIHByb3AgPSBrZXlcbiAgICAuc3Vic3RyaW5nKDYpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvXyhbYS16XSkvZywgZnVuY3Rpb24gKF8sIGspIHsgcmV0dXJuIGsudG9VcHBlckNhc2UoKSB9KTtcblxuICAvLyBjb2VyY2Ugc3RyaW5nIHZhbHVlIGludG8gSlMgdmFsdWVcbiAgdmFyIHZhbCA9IHByb2Nlc3MuZW52W2tleV07XG4gIGlmICgvXih5ZXN8b258dHJ1ZXxlbmFibGVkKSQvaS50ZXN0KHZhbCkpIHZhbCA9IHRydWU7XG4gIGVsc2UgaWYgKC9eKG5vfG9mZnxmYWxzZXxkaXNhYmxlZCkkL2kudGVzdCh2YWwpKSB2YWwgPSBmYWxzZTtcbiAgZWxzZSBpZiAodmFsID09PSAnbnVsbCcpIHZhbCA9IG51bGw7XG4gIGVsc2UgdmFsID0gTnVtYmVyKHZhbCk7XG5cbiAgb2JqW3Byb3BdID0gdmFsO1xuICByZXR1cm4gb2JqO1xufSwge30pO1xuXG4vKipcbiAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gd3JpdGUgdGhlIGBkZWJ1ZygpYCBjYWxscyB0by5cbiAqIFNldCB0aGUgYERFQlVHX0ZEYCBlbnYgdmFyaWFibGUgdG8gb3ZlcnJpZGUgd2l0aCBhbm90aGVyIHZhbHVlLiBpLmUuOlxuICpcbiAqICAgJCBERUJVR19GRD0zIG5vZGUgc2NyaXB0LmpzIDM+ZGVidWcubG9nXG4gKi9cblxudmFyIGZkID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREVCVUdfRkQsIDEwKSB8fCAyO1xuXG5pZiAoMSAhPT0gZmQgJiYgMiAhPT0gZmQpIHtcbiAgdXRpbC5kZXByZWNhdGUoZnVuY3Rpb24oKXt9LCAnZXhjZXB0IGZvciBzdGRlcnIoMikgYW5kIHN0ZG91dCgxKSwgYW55IG90aGVyIHVzYWdlIG9mIERFQlVHX0ZEIGlzIGRlcHJlY2F0ZWQuIE92ZXJyaWRlIGRlYnVnLmxvZyBpZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgbG9nIGZ1bmN0aW9uIChodHRwczovL2dpdC5pby9kZWJ1Z19mZCknKSgpXG59XG5cbnZhciBzdHJlYW0gPSAxID09PSBmZCA/IHByb2Nlc3Muc3Rkb3V0IDpcbiAgICAgICAgICAgICAyID09PSBmZCA/IHByb2Nlc3Muc3RkZXJyIDpcbiAgICAgICAgICAgICBjcmVhdGVXcml0YWJsZVN0ZGlvU3RyZWFtKGZkKTtcblxuLyoqXG4gKiBJcyBzdGRvdXQgYSBUVFk/IENvbG9yZWQgb3V0cHV0IGlzIGVuYWJsZWQgd2hlbiBgdHJ1ZWAuXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICByZXR1cm4gJ2NvbG9ycycgaW4gZXhwb3J0cy5pbnNwZWN0T3B0c1xuICAgID8gQm9vbGVhbihleHBvcnRzLmluc3BlY3RPcHRzLmNvbG9ycylcbiAgICA6IHR0eS5pc2F0dHkoZmQpO1xufVxuXG4vKipcbiAqIE1hcCAlbyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGwgb24gYSBzaW5nbGUgbGluZS5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uKHYpIHtcbiAgdGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcbiAgcmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuICAgIC5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci50cmltKClcbiAgICB9KS5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlbyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzLk8gPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG4gIHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuXG4vKipcbiAqIEFkZHMgQU5TSSBjb2xvciBlc2NhcGUgY29kZXMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuICB2YXIgbmFtZSA9IHRoaXMubmFtZXNwYWNlO1xuICB2YXIgdXNlQ29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cbiAgaWYgKHVzZUNvbG9ycykge1xuICAgIHZhciBjID0gdGhpcy5jb2xvcjtcbiAgICB2YXIgcHJlZml4ID0gJyAgXFx1MDAxYlszJyArIGMgKyAnOzFtJyArIG5hbWUgKyAnICcgKyAnXFx1MDAxYlswbSc7XG5cbiAgICBhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG4gICAgYXJncy5wdXNoKCdcXHUwMDFiWzMnICsgYyArICdtKycgKyBleHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZikgKyAnXFx1MDAxYlswbScpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMF0gPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcbiAgICAgICsgJyAnICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gYHN0cmVhbWAuXG4gKi9cblxuZnVuY3Rpb24gbG9nKCkge1xuICByZXR1cm4gc3RyZWFtLndyaXRlKHV0aWwuZm9ybWF0LmFwcGx5KHV0aWwsIGFyZ3VtZW50cykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICBpZiAobnVsbCA9PSBuYW1lc3BhY2VzKSB7XG4gICAgLy8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG4gICAgLy8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG4gIH0gZWxzZSB7XG4gICAgcHJvY2Vzcy5lbnYuREVCVUcgPSBuYW1lc3BhY2VzO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9hZCgpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkRFQlVHO1xufVxuXG4vKipcbiAqIENvcGllZCBmcm9tIGBub2RlL3NyYy9ub2RlLmpzYC5cbiAqXG4gKiBYWFg6IEl0J3MgbGFtZSB0aGF0IG5vZGUgZG9lc24ndCBleHBvc2UgdGhpcyBBUEkgb3V0LW9mLXRoZS1ib3guIEl0IGFsc29cbiAqIHJlbGllcyBvbiB0aGUgdW5kb2N1bWVudGVkIGB0dHlfd3JhcC5ndWVzc0hhbmRsZVR5cGUoKWAgd2hpY2ggaXMgYWxzbyBsYW1lLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVdyaXRhYmxlU3RkaW9TdHJlYW0gKGZkKSB7XG4gIHZhciBzdHJlYW07XG4gIHZhciB0dHlfd3JhcCA9IHByb2Nlc3MuYmluZGluZygndHR5X3dyYXAnKTtcblxuICAvLyBOb3RlIHN0cmVhbS5fdHlwZSBpcyB1c2VkIGZvciB0ZXN0LW1vZHVsZS1sb2FkLWxpc3QuanNcblxuICBzd2l0Y2ggKHR0eV93cmFwLmd1ZXNzSGFuZGxlVHlwZShmZCkpIHtcbiAgICBjYXNlICdUVFknOlxuICAgICAgc3RyZWFtID0gbmV3IHR0eS5Xcml0ZVN0cmVhbShmZCk7XG4gICAgICBzdHJlYW0uX3R5cGUgPSAndHR5JztcblxuICAgICAgLy8gSGFjayB0byBoYXZlIHN0cmVhbSBub3Qga2VlcCB0aGUgZXZlbnQgbG9vcCBhbGl2ZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzE3MjZcbiAgICAgIGlmIChzdHJlYW0uX2hhbmRsZSAmJiBzdHJlYW0uX2hhbmRsZS51bnJlZikge1xuICAgICAgICBzdHJlYW0uX2hhbmRsZS51bnJlZigpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdGSUxFJzpcbiAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgICBzdHJlYW0gPSBuZXcgZnMuU3luY1dyaXRlU3RyZWFtKGZkLCB7IGF1dG9DbG9zZTogZmFsc2UgfSk7XG4gICAgICBzdHJlYW0uX3R5cGUgPSAnZnMnO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdQSVBFJzpcbiAgICBjYXNlICdUQ1AnOlxuICAgICAgdmFyIG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xuICAgICAgc3RyZWFtID0gbmV3IG5ldC5Tb2NrZXQoe1xuICAgICAgICBmZDogZmQsXG4gICAgICAgIHJlYWRhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGSVhNRSBTaG91bGQgcHJvYmFibHkgaGF2ZSBhbiBvcHRpb24gaW4gbmV0LlNvY2tldCB0byBjcmVhdGUgYVxuICAgICAgLy8gc3RyZWFtIGZyb20gYW4gZXhpc3RpbmcgZmQgd2hpY2ggaXMgd3JpdGFibGUgb25seS4gQnV0IGZvciBub3dcbiAgICAgIC8vIHdlJ2xsIGp1c3QgYWRkIHRoaXMgaGFjayBhbmQgc2V0IHRoZSBgcmVhZGFibGVgIG1lbWJlciB0byBmYWxzZS5cbiAgICAgIC8vIFRlc3Q6IC4vbm9kZSB0ZXN0L2ZpeHR1cmVzL2VjaG8uanMgPCAvZXRjL3Bhc3N3ZFxuICAgICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVhZCA9IG51bGw7XG4gICAgICBzdHJlYW0uX3R5cGUgPSAncGlwZSc7XG5cbiAgICAgIC8vIEZJWE1FIEhhY2sgdG8gaGF2ZSBzdHJlYW0gbm90IGtlZXAgdGhlIGV2ZW50IGxvb3AgYWxpdmUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzI2XG4gICAgICBpZiAoc3RyZWFtLl9oYW5kbGUgJiYgc3RyZWFtLl9oYW5kbGUudW5yZWYpIHtcbiAgICAgICAgc3RyZWFtLl9oYW5kbGUudW5yZWYoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFByb2JhYmx5IGFuIGVycm9yIG9uIGluIHV2X2d1ZXNzX2hhbmRsZSgpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcGxlbWVudCBtZS4gVW5rbm93biBzdHJlYW0gZmlsZSB0eXBlIScpO1xuICB9XG5cbiAgLy8gRm9yIHN1cHBvcnRpbmcgbGVnYWN5IEFQSSB3ZSBwdXQgdGhlIEZEIGhlcmUuXG4gIHN0cmVhbS5mZCA9IGZkO1xuXG4gIHN0cmVhbS5faXNTdGRpbyA9IHRydWU7XG5cbiAgcmV0dXJuIHN0cmVhbTtcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0IChkZWJ1Zykge1xuICBkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXhwb3J0cy5pbnNwZWN0T3B0cyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGRlYnVnLmluc3BlY3RPcHRzW2tleXNbaV1dID0gZXhwb3J0cy5pbnNwZWN0T3B0c1trZXlzW2ldXTtcbiAgfVxufVxuXG4vKipcbiAqIEVuYWJsZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiBgcHJvY2Vzcy5lbnYuREVCVUdgIGluaXRpYWxseS5cbiAqL1xuXG5leHBvcnRzLmVuYWJsZShsb2FkKCkpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzXG4vLyBtb2R1bGUgaWQgPSAxMjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidHR5XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwidHR5XCJcbi8vIG1vZHVsZSBpZCA9IDEyN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIHJhdy1ib2R5XG4gKiBDb3B5cmlnaHQoYykgMjAxMy0yMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGJ5dGVzID0gcmVxdWlyZSgnYnl0ZXMnKVxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnaHR0cC1lcnJvcnMnKVxudmFyIGljb252ID0gcmVxdWlyZSgnaWNvbnYtbGl0ZScpXG52YXIgdW5waXBlID0gcmVxdWlyZSgndW5waXBlJylcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd0JvZHlcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgSUNPTlZfRU5DT0RJTkdfTUVTU0FHRV9SRUdFWFAgPSAvXkVuY29kaW5nIG5vdCByZWNvZ25pemVkOiAvXG5cbi8qKlxuICogR2V0IHRoZSBkZWNvZGVyIGZvciBhIGdpdmVuIGVuY29kaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXREZWNvZGVyIChlbmNvZGluZykge1xuICBpZiAoIWVuY29kaW5nKSByZXR1cm4gbnVsbFxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGljb252LmdldERlY29kZXIoZW5jb2RpbmcpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBlcnJvciBnZXR0aW5nIGRlY29kZXJcbiAgICBpZiAoIUlDT05WX0VOQ09ESU5HX01FU1NBR0VfUkVHRVhQLnRlc3QoZS5tZXNzYWdlKSkgdGhyb3cgZVxuXG4gICAgLy8gdGhlIGVuY29kaW5nIHdhcyBub3QgZm91bmRcbiAgICB0aHJvdyBjcmVhdGVFcnJvcig0MTUsICdzcGVjaWZpZWQgZW5jb2RpbmcgdW5zdXBwb3J0ZWQnLCB7XG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICB0eXBlOiAnZW5jb2RpbmcudW5zdXBwb3J0ZWQnXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgcmF3IGJvZHkgb2YgYSBzdHJlYW0gKHR5cGljYWxseSBIVFRQKS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3RyZWFtXG4gKiBAcGFyYW0ge29iamVjdHxzdHJpbmd8ZnVuY3Rpb259IFtvcHRpb25zXVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldFJhd0JvZHkgKHN0cmVhbSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIGRvbmUgPSBjYWxsYmFja1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge31cblxuICBpZiAob3B0aW9ucyA9PT0gdHJ1ZSB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBzaG9ydCBjdXQgZm9yIGVuY29kaW5nXG4gICAgb3B0cyA9IHtcbiAgICAgIGVuY29kaW5nOiBvcHRpb25zXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZG9uZSA9IG9wdGlvbnNcbiAgICBvcHRzID0ge31cbiAgfVxuXG4gIC8vIHZhbGlkYXRlIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIGlmIHByb3ZpZGVkXG4gIGlmIChkb25lICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGRvbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKVxuICB9XG5cbiAgLy8gcmVxdWlyZSB0aGUgY2FsbGJhY2sgd2l0aG91dCBwcm9taXNlc1xuICBpZiAoIWRvbmUgJiYgIWdsb2JhbC5Qcm9taXNlKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgY2FsbGJhY2sgaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gZ2V0IGVuY29kaW5nXG4gIHZhciBlbmNvZGluZyA9IG9wdHMuZW5jb2RpbmcgIT09IHRydWVcbiAgICA/IG9wdHMuZW5jb2RpbmdcbiAgICA6ICd1dGYtOCdcblxuICAvLyBjb252ZXJ0IHRoZSBsaW1pdCB0byBhbiBpbnRlZ2VyXG4gIHZhciBsaW1pdCA9IGJ5dGVzLnBhcnNlKG9wdHMubGltaXQpXG5cbiAgLy8gY29udmVydCB0aGUgZXhwZWN0ZWQgbGVuZ3RoIHRvIGFuIGludGVnZXJcbiAgdmFyIGxlbmd0aCA9IG9wdHMubGVuZ3RoICE9IG51bGwgJiYgIWlzTmFOKG9wdHMubGVuZ3RoKVxuICAgID8gcGFyc2VJbnQob3B0cy5sZW5ndGgsIDEwKVxuICAgIDogbnVsbFxuXG4gIGlmIChkb25lKSB7XG4gICAgLy8gY2xhc3NpYyBjYWxsYmFjayBzdHlsZVxuICAgIHJldHVybiByZWFkU3RyZWFtKHN0cmVhbSwgZW5jb2RpbmcsIGxlbmd0aCwgbGltaXQsIGRvbmUpXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZXhlY3V0b3IgKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRTdHJlYW0oc3RyZWFtLCBlbmNvZGluZywgbGVuZ3RoLCBsaW1pdCwgZnVuY3Rpb24gb25SZWFkIChlcnIsIGJ1Zikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKGJ1ZilcbiAgICB9KVxuICB9KVxufVxuXG4vKipcbiAqIEhhbHQgYSBzdHJlYW0uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0cmVhbVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBoYWx0IChzdHJlYW0pIHtcbiAgLy8gdW5waXBlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc3RyZWFtXG4gIHVucGlwZShzdHJlYW0pXG5cbiAgLy8gcGF1c2Ugc3RyZWFtXG4gIGlmICh0eXBlb2Ygc3RyZWFtLnBhdXNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3RyZWFtLnBhdXNlKClcbiAgfVxufVxuXG4vKipcbiAqIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdHJlYW1cbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHJlYWRTdHJlYW0gKHN0cmVhbSwgZW5jb2RpbmcsIGxlbmd0aCwgbGltaXQsIGNhbGxiYWNrKSB7XG4gIHZhciBjb21wbGV0ZSA9IGZhbHNlXG4gIHZhciBzeW5jID0gdHJ1ZVxuXG4gIC8vIGNoZWNrIHRoZSBsZW5ndGggYW5kIGxpbWl0IG9wdGlvbnMuXG4gIC8vIG5vdGU6IHdlIGludGVudGlvbmFsbHkgbGVhdmUgdGhlIHN0cmVhbSBwYXVzZWQsXG4gIC8vIHNvIHVzZXJzIHNob3VsZCBoYW5kbGUgdGhlIHN0cmVhbSB0aGVtc2VsdmVzLlxuICBpZiAobGltaXQgIT09IG51bGwgJiYgbGVuZ3RoICE9PSBudWxsICYmIGxlbmd0aCA+IGxpbWl0KSB7XG4gICAgcmV0dXJuIGRvbmUoY3JlYXRlRXJyb3IoNDEzLCAncmVxdWVzdCBlbnRpdHkgdG9vIGxhcmdlJywge1xuICAgICAgZXhwZWN0ZWQ6IGxlbmd0aCxcbiAgICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgICAgbGltaXQ6IGxpbWl0LFxuICAgICAgdHlwZTogJ2VudGl0eS50b28ubGFyZ2UnXG4gICAgfSkpXG4gIH1cblxuICAvLyBzdHJlYW1zMTogYXNzZXJ0IHJlcXVlc3QgZW5jb2RpbmcgaXMgYnVmZmVyLlxuICAvLyBzdHJlYW1zMis6IGFzc2VydCB0aGUgc3RyZWFtIGVuY29kaW5nIGlzIGJ1ZmZlci5cbiAgLy8gICBzdHJlYW0uX2RlY29kZXI6IHN0cmVhbXMxXG4gIC8vICAgc3RhdGUuZW5jb2Rpbmc6IHN0cmVhbXMyXG4gIC8vICAgc3RhdGUuZGVjb2Rlcjogc3RyZWFtczIsIHNwZWNpZmljYWxseSA8IDAuMTAuNlxuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgaWYgKHN0cmVhbS5fZGVjb2RlciB8fCAoc3RhdGUgJiYgKHN0YXRlLmVuY29kaW5nIHx8IHN0YXRlLmRlY29kZXIpKSkge1xuICAgIC8vIGRldmVsb3BlciBlcnJvclxuICAgIHJldHVybiBkb25lKGNyZWF0ZUVycm9yKDUwMCwgJ3N0cmVhbSBlbmNvZGluZyBzaG91bGQgbm90IGJlIHNldCcsIHtcbiAgICAgIHR5cGU6ICdzdHJlYW0uZW5jb2Rpbmcuc2V0J1xuICAgIH0pKVxuICB9XG5cbiAgdmFyIHJlY2VpdmVkID0gMFxuICB2YXIgZGVjb2RlclxuXG4gIHRyeSB7XG4gICAgZGVjb2RlciA9IGdldERlY29kZXIoZW5jb2RpbmcpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBkb25lKGVycilcbiAgfVxuXG4gIHZhciBidWZmZXIgPSBkZWNvZGVyXG4gICAgPyAnJ1xuICAgIDogW11cblxuICAvLyBhdHRhY2ggbGlzdGVuZXJzXG4gIHN0cmVhbS5vbignYWJvcnRlZCcsIG9uQWJvcnRlZClcbiAgc3RyZWFtLm9uKCdjbG9zZScsIGNsZWFudXApXG4gIHN0cmVhbS5vbignZGF0YScsIG9uRGF0YSlcbiAgc3RyZWFtLm9uKCdlbmQnLCBvbkVuZClcbiAgc3RyZWFtLm9uKCdlcnJvcicsIG9uRW5kKVxuXG4gIC8vIG1hcmsgc3luYyBzZWN0aW9uIGNvbXBsZXRlXG4gIHN5bmMgPSBmYWxzZVxuXG4gIGZ1bmN0aW9uIGRvbmUgKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG5cbiAgICAvLyBjb3B5IGFyZ3VtZW50c1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXVxuICAgIH1cblxuICAgIC8vIG1hcmsgY29tcGxldGVcbiAgICBjb21wbGV0ZSA9IHRydWVcblxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGludm9rZUNhbGxiYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnZva2VDYWxsYmFjaygpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2sgKCkge1xuICAgICAgY2xlYW51cCgpXG5cbiAgICAgIGlmIChhcmdzWzBdKSB7XG4gICAgICAgIC8vIGhhbHQgdGhlIHN0cmVhbSBvbiBlcnJvclxuICAgICAgICBoYWx0KHN0cmVhbSlcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkFib3J0ZWQgKCkge1xuICAgIGlmIChjb21wbGV0ZSkgcmV0dXJuXG5cbiAgICBkb25lKGNyZWF0ZUVycm9yKDQwMCwgJ3JlcXVlc3QgYWJvcnRlZCcsIHtcbiAgICAgIGNvZGU6ICdFQ09OTkFCT1JURUQnLFxuICAgICAgZXhwZWN0ZWQ6IGxlbmd0aCxcbiAgICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgICAgcmVjZWl2ZWQ6IHJlY2VpdmVkLFxuICAgICAgdHlwZTogJ3JlcXVlc3QuYWJvcnRlZCdcbiAgICB9KSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRGF0YSAoY2h1bmspIHtcbiAgICBpZiAoY29tcGxldGUpIHJldHVyblxuXG4gICAgcmVjZWl2ZWQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICBpZiAobGltaXQgIT09IG51bGwgJiYgcmVjZWl2ZWQgPiBsaW1pdCkge1xuICAgICAgZG9uZShjcmVhdGVFcnJvcig0MTMsICdyZXF1ZXN0IGVudGl0eSB0b28gbGFyZ2UnLCB7XG4gICAgICAgIGxpbWl0OiBsaW1pdCxcbiAgICAgICAgcmVjZWl2ZWQ6IHJlY2VpdmVkLFxuICAgICAgICB0eXBlOiAnZW50aXR5LnRvby5sYXJnZSdcbiAgICAgIH0pKVxuICAgIH0gZWxzZSBpZiAoZGVjb2Rlcikge1xuICAgICAgYnVmZmVyICs9IGRlY29kZXIud3JpdGUoY2h1bmspXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlci5wdXNoKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRW5kIChlcnIpIHtcbiAgICBpZiAoY29tcGxldGUpIHJldHVyblxuICAgIGlmIChlcnIpIHJldHVybiBkb25lKGVycilcblxuICAgIGlmIChsZW5ndGggIT09IG51bGwgJiYgcmVjZWl2ZWQgIT09IGxlbmd0aCkge1xuICAgICAgZG9uZShjcmVhdGVFcnJvcig0MDAsICdyZXF1ZXN0IHNpemUgZGlkIG5vdCBtYXRjaCBjb250ZW50IGxlbmd0aCcsIHtcbiAgICAgICAgZXhwZWN0ZWQ6IGxlbmd0aCxcbiAgICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICAgIHJlY2VpdmVkOiByZWNlaXZlZCxcbiAgICAgICAgdHlwZTogJ3JlcXVlc3Quc2l6ZS5pbnZhbGlkJ1xuICAgICAgfSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdHJpbmcgPSBkZWNvZGVyXG4gICAgICAgID8gYnVmZmVyICsgKGRlY29kZXIuZW5kKCkgfHwgJycpXG4gICAgICAgIDogQnVmZmVyLmNvbmNhdChidWZmZXIpXG4gICAgICBkb25lKG51bGwsIHN0cmluZylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwICgpIHtcbiAgICBidWZmZXIgPSBudWxsXG5cbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0ZWQnLCBvbkFib3J0ZWQpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25FbmQpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRW5kKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKVxuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvcmF3LWJvZHkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDEyOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGh0dHAtZXJyb3JzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE2IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGVwcmVjYXRlID0gcmVxdWlyZSgnZGVwZCcpKCdodHRwLWVycm9ycycpXG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdzZXRwcm90b3R5cGVvZicpXG52YXIgc3RhdHVzZXMgPSByZXF1aXJlKCdzdGF0dXNlcycpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVFcnJvclxubW9kdWxlLmV4cG9ydHMuSHR0cEVycm9yID0gY3JlYXRlSHR0cEVycm9yQ29uc3RydWN0b3IoKVxuXG4vLyBQb3B1bGF0ZSBleHBvcnRzIGZvciBhbGwgY29uc3RydWN0b3JzXG5wb3B1bGF0ZUNvbnN0cnVjdG9yRXhwb3J0cyhtb2R1bGUuZXhwb3J0cywgc3RhdHVzZXMuY29kZXMsIG1vZHVsZS5leHBvcnRzLkh0dHBFcnJvcilcblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgY2xhc3Mgb2YgYSBzdGF0dXMgY29kZS5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29kZUNsYXNzIChzdGF0dXMpIHtcbiAgcmV0dXJuIE51bWJlcihTdHJpbmcoc3RhdHVzKS5jaGFyQXQoMCkgKyAnMDAnKVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBIVFRQIEVycm9yLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFcnJvciAoKSB7XG4gIC8vIHNvIG11Y2ggYXJpdHkgZ29pbmcgb24gfl9+XG4gIHZhciBlcnJcbiAgdmFyIG1zZ1xuICB2YXIgc3RhdHVzID0gNTAwXG4gIHZhciBwcm9wcyA9IHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXVxuICAgIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgZXJyID0gYXJnXG4gICAgICBzdGF0dXMgPSBlcnIuc3RhdHVzIHx8IGVyci5zdGF0dXNDb2RlIHx8IHN0YXR1c1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICBtc2cgPSBhcmdcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHN0YXR1cyA9IGFyZ1xuICAgICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICAgIGRlcHJlY2F0ZSgnbm9uLWZpcnN0LWFyZ3VtZW50IHN0YXR1cyBjb2RlOyByZXBsYWNlIHdpdGggY3JlYXRlRXJyb3IoJyArIGFyZyArICcsIC4uLiknKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBwcm9wcyA9IGFyZ1xuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RhdHVzID09PSAnbnVtYmVyJyAmJiAoc3RhdHVzIDwgNDAwIHx8IHN0YXR1cyA+PSA2MDApKSB7XG4gICAgZGVwcmVjYXRlKCdub24tZXJyb3Igc3RhdHVzIGNvZGU7IHVzZSBvbmx5IDR4eCBvciA1eHggc3RhdHVzIGNvZGVzJylcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RhdHVzICE9PSAnbnVtYmVyJyB8fFxuICAgICghc3RhdHVzZXNbc3RhdHVzXSAmJiAoc3RhdHVzIDwgNDAwIHx8IHN0YXR1cyA+PSA2MDApKSkge1xuICAgIHN0YXR1cyA9IDUwMFxuICB9XG5cbiAgLy8gY29uc3RydWN0b3JcbiAgdmFyIEh0dHBFcnJvciA9IGNyZWF0ZUVycm9yW3N0YXR1c10gfHwgY3JlYXRlRXJyb3JbY29kZUNsYXNzKHN0YXR1cyldXG5cbiAgaWYgKCFlcnIpIHtcbiAgICAvLyBjcmVhdGUgZXJyb3JcbiAgICBlcnIgPSBIdHRwRXJyb3JcbiAgICAgID8gbmV3IEh0dHBFcnJvcihtc2cpXG4gICAgICA6IG5ldyBFcnJvcihtc2cgfHwgc3RhdHVzZXNbc3RhdHVzXSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIGNyZWF0ZUVycm9yKVxuICB9XG5cbiAgaWYgKCFIdHRwRXJyb3IgfHwgIShlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3IpIHx8IGVyci5zdGF0dXMgIT09IHN0YXR1cykge1xuICAgIC8vIGFkZCBwcm9wZXJ0aWVzIHRvIGdlbmVyaWMgZXJyb3JcbiAgICBlcnIuZXhwb3NlID0gc3RhdHVzIDwgNTAwXG4gICAgZXJyLnN0YXR1cyA9IGVyci5zdGF0dXNDb2RlID0gc3RhdHVzXG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoa2V5ICE9PSAnc3RhdHVzJyAmJiBrZXkgIT09ICdzdGF0dXNDb2RlJykge1xuICAgICAgZXJyW2tleV0gPSBwcm9wc1trZXldXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVyclxufVxuXG4vKipcbiAqIENyZWF0ZSBIVFRQIGVycm9yIGFic3RyYWN0IGJhc2UgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUh0dHBFcnJvckNvbnN0cnVjdG9yICgpIHtcbiAgZnVuY3Rpb24gSHR0cEVycm9yICgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3QgY29uc3RydWN0IGFic3RyYWN0IGNsYXNzJylcbiAgfVxuXG4gIGluaGVyaXRzKEh0dHBFcnJvciwgRXJyb3IpXG5cbiAgcmV0dXJuIEh0dHBFcnJvclxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhIGNsaWVudCBlcnJvci5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlQ2xpZW50RXJyb3JDb25zdHJ1Y3RvciAoSHR0cEVycm9yLCBuYW1lLCBjb2RlKSB7XG4gIHZhciBjbGFzc05hbWUgPSBuYW1lLm1hdGNoKC9FcnJvciQvKSA/IG5hbWUgOiBuYW1lICsgJ0Vycm9yJ1xuXG4gIGZ1bmN0aW9uIENsaWVudEVycm9yIChtZXNzYWdlKSB7XG4gICAgLy8gY3JlYXRlIHRoZSBlcnJvciBvYmplY3RcbiAgICB2YXIgbXNnID0gbWVzc2FnZSAhPSBudWxsID8gbWVzc2FnZSA6IHN0YXR1c2VzW2NvZGVdXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihtc2cpXG5cbiAgICAvLyBjYXB0dXJlIGEgc3RhY2sgdHJhY2UgdG8gdGhlIGNvbnN0cnVjdGlvbiBwb2ludFxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgQ2xpZW50RXJyb3IpXG5cbiAgICAvLyBhZGp1c3QgdGhlIFtbUHJvdG90eXBlXV1cbiAgICBzZXRQcm90b3R5cGVPZihlcnIsIENsaWVudEVycm9yLnByb3RvdHlwZSlcblxuICAgIC8vIHJlZGVmaW5lIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ21lc3NhZ2UnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG1zZyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSlcblxuICAgIC8vIHJlZGVmaW5lIHRoZSBlcnJvciBuYW1lXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ25hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBjbGFzc05hbWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pXG5cbiAgICByZXR1cm4gZXJyXG4gIH1cblxuICBpbmhlcml0cyhDbGllbnRFcnJvciwgSHR0cEVycm9yKVxuXG4gIENsaWVudEVycm9yLnByb3RvdHlwZS5zdGF0dXMgPSBjb2RlXG4gIENsaWVudEVycm9yLnByb3RvdHlwZS5zdGF0dXNDb2RlID0gY29kZVxuICBDbGllbnRFcnJvci5wcm90b3R5cGUuZXhwb3NlID0gdHJ1ZVxuXG4gIHJldHVybiBDbGllbnRFcnJvclxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhIHNlcnZlciBlcnJvci5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlU2VydmVyRXJyb3JDb25zdHJ1Y3RvciAoSHR0cEVycm9yLCBuYW1lLCBjb2RlKSB7XG4gIHZhciBjbGFzc05hbWUgPSBuYW1lLm1hdGNoKC9FcnJvciQvKSA/IG5hbWUgOiBuYW1lICsgJ0Vycm9yJ1xuXG4gIGZ1bmN0aW9uIFNlcnZlckVycm9yIChtZXNzYWdlKSB7XG4gICAgLy8gY3JlYXRlIHRoZSBlcnJvciBvYmplY3RcbiAgICB2YXIgbXNnID0gbWVzc2FnZSAhPSBudWxsID8gbWVzc2FnZSA6IHN0YXR1c2VzW2NvZGVdXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihtc2cpXG5cbiAgICAvLyBjYXB0dXJlIGEgc3RhY2sgdHJhY2UgdG8gdGhlIGNvbnN0cnVjdGlvbiBwb2ludFxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgU2VydmVyRXJyb3IpXG5cbiAgICAvLyBhZGp1c3QgdGhlIFtbUHJvdG90eXBlXV1cbiAgICBzZXRQcm90b3R5cGVPZihlcnIsIFNlcnZlckVycm9yLnByb3RvdHlwZSlcblxuICAgIC8vIHJlZGVmaW5lIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ21lc3NhZ2UnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG1zZyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSlcblxuICAgIC8vIHJlZGVmaW5lIHRoZSBlcnJvciBuYW1lXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ25hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBjbGFzc05hbWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pXG5cbiAgICByZXR1cm4gZXJyXG4gIH1cblxuICBpbmhlcml0cyhTZXJ2ZXJFcnJvciwgSHR0cEVycm9yKVxuXG4gIFNlcnZlckVycm9yLnByb3RvdHlwZS5zdGF0dXMgPSBjb2RlXG4gIFNlcnZlckVycm9yLnByb3RvdHlwZS5zdGF0dXNDb2RlID0gY29kZVxuICBTZXJ2ZXJFcnJvci5wcm90b3R5cGUuZXhwb3NlID0gZmFsc2VcblxuICByZXR1cm4gU2VydmVyRXJyb3Jcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXhwb3J0cyBvYmplY3Qgd2l0aCBjb25zdHJ1Y3RvcnMgZm9yIGV2ZXJ5IGVycm9yIGNsYXNzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwb3B1bGF0ZUNvbnN0cnVjdG9yRXhwb3J0cyAoZXhwb3J0cywgY29kZXMsIEh0dHBFcnJvcikge1xuICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hDb2RlIChjb2RlKSB7XG4gICAgdmFyIENvZGVFcnJvclxuICAgIHZhciBuYW1lID0gdG9JZGVudGlmaWVyKHN0YXR1c2VzW2NvZGVdKVxuXG4gICAgc3dpdGNoIChjb2RlQ2xhc3MoY29kZSkpIHtcbiAgICAgIGNhc2UgNDAwOlxuICAgICAgICBDb2RlRXJyb3IgPSBjcmVhdGVDbGllbnRFcnJvckNvbnN0cnVjdG9yKEh0dHBFcnJvciwgbmFtZSwgY29kZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgNTAwOlxuICAgICAgICBDb2RlRXJyb3IgPSBjcmVhdGVTZXJ2ZXJFcnJvckNvbnN0cnVjdG9yKEh0dHBFcnJvciwgbmFtZSwgY29kZSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBpZiAoQ29kZUVycm9yKSB7XG4gICAgICAvLyBleHBvcnQgdGhlIGNvbnN0cnVjdG9yXG4gICAgICBleHBvcnRzW2NvZGVdID0gQ29kZUVycm9yXG4gICAgICBleHBvcnRzW25hbWVdID0gQ29kZUVycm9yXG4gICAgfVxuICB9KVxuXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5XG4gIGV4cG9ydHNbXCJJJ21hdGVhcG90XCJdID0gZGVwcmVjYXRlLmZ1bmN0aW9uKGV4cG9ydHMuSW1BVGVhcG90LFxuICAgICdcIklcXCdtYXRlYXBvdFwiOyB1c2UgXCJJbUFUZWFwb3RcIiBpbnN0ZWFkJylcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIG9mIHdvcmRzIHRvIGEgSmF2YVNjcmlwdCBpZGVudGlmaWVyLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB0b0lkZW50aWZpZXIgKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KCcgJykubWFwKGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHJldHVybiB0b2tlbi5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgdG9rZW4uc2xpY2UoMSlcbiAgfSkuam9pbignJykucmVwbGFjZSgvW14gXzAtOWEtel0vZ2ksICcnKVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3Jhdy1ib2R5L25vZGVfbW9kdWxlcy9odHRwLWVycm9ycy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTI5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogZGVwZFxuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNyBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBjYWxsU2l0ZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9saWIvY29tcGF0JykuY2FsbFNpdGVUb1N0cmluZ1xudmFyIGV2ZW50TGlzdGVuZXJDb3VudCA9IHJlcXVpcmUoJy4vbGliL2NvbXBhdCcpLmV2ZW50TGlzdGVuZXJDb3VudFxudmFyIHJlbGF0aXZlID0gcmVxdWlyZSgncGF0aCcpLnJlbGF0aXZlXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBkZXBkXG5cbi8qKlxuICogR2V0IHRoZSBwYXRoIHRvIGJhc2UgZmlsZXMgb24uXG4gKi9cblxudmFyIGJhc2VQYXRoID0gcHJvY2Vzcy5jd2QoKVxuXG4vKipcbiAqIERldGVybWluZSBpZiBuYW1lc3BhY2UgaXMgY29udGFpbmVkIGluIHRoZSBzdHJpbmcuXG4gKi9cblxuZnVuY3Rpb24gY29udGFpbnNOYW1lc3BhY2UgKHN0ciwgbmFtZXNwYWNlKSB7XG4gIHZhciB2YWwgPSBzdHIuc3BsaXQoL1sgLF0rLylcblxuICBuYW1lc3BhY2UgPSBTdHJpbmcobmFtZXNwYWNlKS50b0xvd2VyQ2FzZSgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIShzdHIgPSB2YWxbaV0pKSBjb250aW51ZVxuXG4gICAgLy8gbmFtZXNwYWNlIGNvbnRhaW5lZFxuICAgIGlmIChzdHIgPT09ICcqJyB8fCBzdHIudG9Mb3dlckNhc2UoKSA9PT0gbmFtZXNwYWNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIGRlc2NyaXB0b3IgdG8gYWNjZXNzb3IgZGVzY3JpcHRvci5cbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0RGF0YURlc2NyaXB0b3JUb0FjY2Vzc29yIChvYmosIHByb3AsIG1lc3NhZ2UpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcClcbiAgdmFyIHZhbHVlID0gZGVzY3JpcHRvci52YWx1ZVxuXG4gIGRlc2NyaXB0b3IuZ2V0ID0gZnVuY3Rpb24gZ2V0dGVyICgpIHsgcmV0dXJuIHZhbHVlIH1cblxuICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSkge1xuICAgIGRlc2NyaXB0b3Iuc2V0ID0gZnVuY3Rpb24gc2V0dGVyICh2YWwpIHsgcmV0dXJuICh2YWx1ZSA9IHZhbCkgfVxuICB9XG5cbiAgZGVsZXRlIGRlc2NyaXB0b3IudmFsdWVcbiAgZGVsZXRlIGRlc2NyaXB0b3Iud3JpdGFibGVcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCBkZXNjcmlwdG9yKVxuXG4gIHJldHVybiBkZXNjcmlwdG9yXG59XG5cbi8qKlxuICogQ3JlYXRlIGFyZ3VtZW50cyBzdHJpbmcgdG8ga2VlcCBhcml0eS5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVBcmd1bWVudHNTdHJpbmcgKGFyaXR5KSB7XG4gIHZhciBzdHIgPSAnJ1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJpdHk7IGkrKykge1xuICAgIHN0ciArPSAnLCBhcmcnICsgaVxuICB9XG5cbiAgcmV0dXJuIHN0ci5zdWJzdHIoMilcbn1cblxuLyoqXG4gKiBDcmVhdGUgc3RhY2sgc3RyaW5nIGZyb20gc3RhY2suXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlU3RhY2tTdHJpbmcgKHN0YWNrKSB7XG4gIHZhciBzdHIgPSB0aGlzLm5hbWUgKyAnOiAnICsgdGhpcy5uYW1lc3BhY2VcblxuICBpZiAodGhpcy5tZXNzYWdlKSB7XG4gICAgc3RyICs9ICcgZGVwcmVjYXRlZCAnICsgdGhpcy5tZXNzYWdlXG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgc3RyICs9ICdcXG4gICAgYXQgJyArIGNhbGxTaXRlVG9TdHJpbmcoc3RhY2tbaV0pXG4gIH1cblxuICByZXR1cm4gc3RyXG59XG5cbi8qKlxuICogQ3JlYXRlIGRlcHJlY2F0ZSBmb3IgbmFtZXNwYWNlIGluIGNhbGxlci5cbiAqL1xuXG5mdW5jdGlvbiBkZXBkIChuYW1lc3BhY2UpIHtcbiAgaWYgKCFuYW1lc3BhY2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBuYW1lc3BhY2UgaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgdmFyIHN0YWNrID0gZ2V0U3RhY2soKVxuICB2YXIgc2l0ZSA9IGNhbGxTaXRlTG9jYXRpb24oc3RhY2tbMV0pXG4gIHZhciBmaWxlID0gc2l0ZVswXVxuXG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZSAobWVzc2FnZSkge1xuICAgIC8vIGNhbGwgdG8gc2VsZiBhcyBsb2dcbiAgICBsb2cuY2FsbChkZXByZWNhdGUsIG1lc3NhZ2UpXG4gIH1cblxuICBkZXByZWNhdGUuX2ZpbGUgPSBmaWxlXG4gIGRlcHJlY2F0ZS5faWdub3JlZCA9IGlzaWdub3JlZChuYW1lc3BhY2UpXG4gIGRlcHJlY2F0ZS5fbmFtZXNwYWNlID0gbmFtZXNwYWNlXG4gIGRlcHJlY2F0ZS5fdHJhY2VkID0gaXN0cmFjZWQobmFtZXNwYWNlKVxuICBkZXByZWNhdGUuX3dhcm5lZCA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICBkZXByZWNhdGUuZnVuY3Rpb24gPSB3cmFwZnVuY3Rpb25cbiAgZGVwcmVjYXRlLnByb3BlcnR5ID0gd3JhcHByb3BlcnR5XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBuYW1lc3BhY2UgaXMgaWdub3JlZC5cbiAqL1xuXG5mdW5jdGlvbiBpc2lnbm9yZWQgKG5hbWVzcGFjZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogdGVzdGVkIGluIGEgY2hpbGQgcHJvY2Vzc3MgKi9cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbikge1xuICAgIC8vIC0tbm8tZGVwcmVjYXRpb24gc3VwcG9ydFxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB2YXIgc3RyID0gcHJvY2Vzcy5lbnYuTk9fREVQUkVDQVRJT04gfHwgJydcblxuICAvLyBuYW1lc3BhY2UgaWdub3JlZFxuICByZXR1cm4gY29udGFpbnNOYW1lc3BhY2Uoc3RyLCBuYW1lc3BhY2UpXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIG5hbWVzcGFjZSBpcyB0cmFjZWQuXG4gKi9cblxuZnVuY3Rpb24gaXN0cmFjZWQgKG5hbWVzcGFjZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogdGVzdGVkIGluIGEgY2hpbGQgcHJvY2Vzc3MgKi9cbiAgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgIC8vIC0tdHJhY2UtZGVwcmVjYXRpb24gc3VwcG9ydFxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB2YXIgc3RyID0gcHJvY2Vzcy5lbnYuVFJBQ0VfREVQUkVDQVRJT04gfHwgJydcblxuICAvLyBuYW1lc3BhY2UgdHJhY2VkXG4gIHJldHVybiBjb250YWluc05hbWVzcGFjZShzdHIsIG5hbWVzcGFjZSlcbn1cblxuLyoqXG4gKiBEaXNwbGF5IGRlcHJlY2F0aW9uIG1lc3NhZ2UuXG4gKi9cblxuZnVuY3Rpb24gbG9nIChtZXNzYWdlLCBzaXRlKSB7XG4gIHZhciBoYXNsaXN0ZW5lcnMgPSBldmVudExpc3RlbmVyQ291bnQocHJvY2VzcywgJ2RlcHJlY2F0aW9uJykgIT09IDBcblxuICAvLyBhYm9ydCBlYXJseSBpZiBubyBkZXN0aW5hdGlvblxuICBpZiAoIWhhc2xpc3RlbmVycyAmJiB0aGlzLl9pZ25vcmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY2FsbGVyXG4gIHZhciBjYWxsRmlsZVxuICB2YXIgY2FsbFNpdGVcbiAgdmFyIGkgPSAwXG4gIHZhciBzZWVuID0gZmFsc2VcbiAgdmFyIHN0YWNrID0gZ2V0U3RhY2soKVxuICB2YXIgZmlsZSA9IHRoaXMuX2ZpbGVcblxuICBpZiAoc2l0ZSkge1xuICAgIC8vIHByb3ZpZGVkIHNpdGVcbiAgICBjYWxsU2l0ZSA9IGNhbGxTaXRlTG9jYXRpb24oc3RhY2tbMV0pXG4gICAgY2FsbFNpdGUubmFtZSA9IHNpdGUubmFtZVxuICAgIGZpbGUgPSBjYWxsU2l0ZVswXVxuICB9IGVsc2Uge1xuICAgIC8vIGdldCBjYWxsIHNpdGVcbiAgICBpID0gMlxuICAgIHNpdGUgPSBjYWxsU2l0ZUxvY2F0aW9uKHN0YWNrW2ldKVxuICAgIGNhbGxTaXRlID0gc2l0ZVxuICB9XG5cbiAgLy8gZ2V0IGNhbGxlciBvZiBkZXByZWNhdGVkIHRoaW5nIGluIHJlbGF0aW9uIHRvIGZpbGVcbiAgZm9yICg7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgIGNhbGxlciA9IGNhbGxTaXRlTG9jYXRpb24oc3RhY2tbaV0pXG4gICAgY2FsbEZpbGUgPSBjYWxsZXJbMF1cblxuICAgIGlmIChjYWxsRmlsZSA9PT0gZmlsZSkge1xuICAgICAgc2VlbiA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGNhbGxGaWxlID09PSB0aGlzLl9maWxlKSB7XG4gICAgICBmaWxlID0gdGhpcy5fZmlsZVxuICAgIH0gZWxzZSBpZiAoc2Vlbikge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICB2YXIga2V5ID0gY2FsbGVyXG4gICAgPyBzaXRlLmpvaW4oJzonKSArICdfXycgKyBjYWxsZXIuam9pbignOicpXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAoa2V5ICE9PSB1bmRlZmluZWQgJiYga2V5IGluIHRoaXMuX3dhcm5lZCkge1xuICAgIC8vIGFscmVhZHkgd2FybmVkXG4gICAgcmV0dXJuXG4gIH1cblxuICB0aGlzLl93YXJuZWRba2V5XSA9IHRydWVcblxuICAvLyBnZW5lcmF0ZSBhdXRvbWF0aWMgbWVzc2FnZSBmcm9tIGNhbGwgc2l0ZVxuICBpZiAoIW1lc3NhZ2UpIHtcbiAgICBtZXNzYWdlID0gY2FsbFNpdGUgPT09IHNpdGUgfHwgIWNhbGxTaXRlLm5hbWVcbiAgICAgID8gZGVmYXVsdE1lc3NhZ2Uoc2l0ZSlcbiAgICAgIDogZGVmYXVsdE1lc3NhZ2UoY2FsbFNpdGUpXG4gIH1cblxuICAvLyBlbWl0IGRlcHJlY2F0aW9uIGlmIGxpc3RlbmVycyBleGlzdFxuICBpZiAoaGFzbGlzdGVuZXJzKSB7XG4gICAgdmFyIGVyciA9IERlcHJlY2F0aW9uRXJyb3IodGhpcy5fbmFtZXNwYWNlLCBtZXNzYWdlLCBzdGFjay5zbGljZShpKSlcbiAgICBwcm9jZXNzLmVtaXQoJ2RlcHJlY2F0aW9uJywgZXJyKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gZm9ybWF0IGFuZCB3cml0ZSBtZXNzYWdlXG4gIHZhciBmb3JtYXQgPSBwcm9jZXNzLnN0ZGVyci5pc1RUWVxuICAgID8gZm9ybWF0Q29sb3JcbiAgICA6IGZvcm1hdFBsYWluXG4gIHZhciBtc2cgPSBmb3JtYXQuY2FsbCh0aGlzLCBtZXNzYWdlLCBjYWxsZXIsIHN0YWNrLnNsaWNlKGkpKVxuICBwcm9jZXNzLnN0ZGVyci53cml0ZShtc2cgKyAnXFxuJywgJ3V0ZjgnKVxufVxuXG4vKipcbiAqIEdldCBjYWxsIHNpdGUgbG9jYXRpb24gYXMgYXJyYXkuXG4gKi9cblxuZnVuY3Rpb24gY2FsbFNpdGVMb2NhdGlvbiAoY2FsbFNpdGUpIHtcbiAgdmFyIGZpbGUgPSBjYWxsU2l0ZS5nZXRGaWxlTmFtZSgpIHx8ICc8YW5vbnltb3VzPidcbiAgdmFyIGxpbmUgPSBjYWxsU2l0ZS5nZXRMaW5lTnVtYmVyKClcbiAgdmFyIGNvbG0gPSBjYWxsU2l0ZS5nZXRDb2x1bW5OdW1iZXIoKVxuXG4gIGlmIChjYWxsU2l0ZS5pc0V2YWwoKSkge1xuICAgIGZpbGUgPSBjYWxsU2l0ZS5nZXRFdmFsT3JpZ2luKCkgKyAnLCAnICsgZmlsZVxuICB9XG5cbiAgdmFyIHNpdGUgPSBbZmlsZSwgbGluZSwgY29sbV1cblxuICBzaXRlLmNhbGxTaXRlID0gY2FsbFNpdGVcbiAgc2l0ZS5uYW1lID0gY2FsbFNpdGUuZ2V0RnVuY3Rpb25OYW1lKClcblxuICByZXR1cm4gc2l0ZVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgZGVmYXVsdCBtZXNzYWdlIGZyb20gdGhlIHNpdGUuXG4gKi9cblxuZnVuY3Rpb24gZGVmYXVsdE1lc3NhZ2UgKHNpdGUpIHtcbiAgdmFyIGNhbGxTaXRlID0gc2l0ZS5jYWxsU2l0ZVxuICB2YXIgZnVuY05hbWUgPSBzaXRlLm5hbWVcblxuICAvLyBtYWtlIHVzZWZ1bCBhbm9ueW1vdXMgbmFtZVxuICBpZiAoIWZ1bmNOYW1lKSB7XG4gICAgZnVuY05hbWUgPSAnPGFub255bW91c0AnICsgZm9ybWF0TG9jYXRpb24oc2l0ZSkgKyAnPidcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0gY2FsbFNpdGUuZ2V0VGhpcygpXG4gIHZhciB0eXBlTmFtZSA9IGNvbnRleHQgJiYgY2FsbFNpdGUuZ2V0VHlwZU5hbWUoKVxuXG4gIC8vIGlnbm9yZSB1c2VsZXNzIHR5cGUgbmFtZVxuICBpZiAodHlwZU5hbWUgPT09ICdPYmplY3QnKSB7XG4gICAgdHlwZU5hbWUgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIG1ha2UgdXNlZnVsIHR5cGUgbmFtZVxuICBpZiAodHlwZU5hbWUgPT09ICdGdW5jdGlvbicpIHtcbiAgICB0eXBlTmFtZSA9IGNvbnRleHQubmFtZSB8fCB0eXBlTmFtZVxuICB9XG5cbiAgcmV0dXJuIHR5cGVOYW1lICYmIGNhbGxTaXRlLmdldE1ldGhvZE5hbWUoKVxuICAgID8gdHlwZU5hbWUgKyAnLicgKyBmdW5jTmFtZVxuICAgIDogZnVuY05hbWVcbn1cblxuLyoqXG4gKiBGb3JtYXQgZGVwcmVjYXRpb24gbWVzc2FnZSB3aXRob3V0IGNvbG9yLlxuICovXG5cbmZ1bmN0aW9uIGZvcm1hdFBsYWluIChtc2csIGNhbGxlciwgc3RhY2spIHtcbiAgdmFyIHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKVxuXG4gIHZhciBmb3JtYXR0ZWQgPSB0aW1lc3RhbXAgK1xuICAgICcgJyArIHRoaXMuX25hbWVzcGFjZSArXG4gICAgJyBkZXByZWNhdGVkICcgKyBtc2dcblxuICAvLyBhZGQgc3RhY2sgdHJhY2VcbiAgaWYgKHRoaXMuX3RyYWNlZCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvcm1hdHRlZCArPSAnXFxuICAgIGF0ICcgKyBjYWxsU2l0ZVRvU3RyaW5nKHN0YWNrW2ldKVxuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXR0ZWRcbiAgfVxuXG4gIGlmIChjYWxsZXIpIHtcbiAgICBmb3JtYXR0ZWQgKz0gJyBhdCAnICsgZm9ybWF0TG9jYXRpb24oY2FsbGVyKVxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdHRlZFxufVxuXG4vKipcbiAqIEZvcm1hdCBkZXByZWNhdGlvbiBtZXNzYWdlIHdpdGggY29sb3IuXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0Q29sb3IgKG1zZywgY2FsbGVyLCBzdGFjaykge1xuICB2YXIgZm9ybWF0dGVkID0gJ1xceDFiWzM2OzFtJyArIHRoaXMuX25hbWVzcGFjZSArICdcXHgxYlsyMjszOW0nICsgLy8gYm9sZCBjeWFuXG4gICAgJyBcXHgxYlszMzsxbWRlcHJlY2F0ZWRcXHgxYlsyMjszOW0nICsgLy8gYm9sZCB5ZWxsb3dcbiAgICAnIFxceDFiWzBtJyArIG1zZyArICdcXHgxYlszOW0nIC8vIHJlc2V0XG5cbiAgLy8gYWRkIHN0YWNrIHRyYWNlXG4gIGlmICh0aGlzLl90cmFjZWQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3JtYXR0ZWQgKz0gJ1xcbiAgICBcXHgxYlszNm1hdCAnICsgY2FsbFNpdGVUb1N0cmluZyhzdGFja1tpXSkgKyAnXFx4MWJbMzltJyAvLyBjeWFuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZFxuICB9XG5cbiAgaWYgKGNhbGxlcikge1xuICAgIGZvcm1hdHRlZCArPSAnIFxceDFiWzM2bScgKyBmb3JtYXRMb2NhdGlvbihjYWxsZXIpICsgJ1xceDFiWzM5bScgLy8gY3lhblxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdHRlZFxufVxuXG4vKipcbiAqIEZvcm1hdCBjYWxsIHNpdGUgbG9jYXRpb24uXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0TG9jYXRpb24gKGNhbGxTaXRlKSB7XG4gIHJldHVybiByZWxhdGl2ZShiYXNlUGF0aCwgY2FsbFNpdGVbMF0pICtcbiAgICAnOicgKyBjYWxsU2l0ZVsxXSArXG4gICAgJzonICsgY2FsbFNpdGVbMl1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHN0YWNrIGFzIGFycmF5IG9mIGNhbGwgc2l0ZXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0U3RhY2sgKCkge1xuICB2YXIgbGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXRcbiAgdmFyIG9iaiA9IHt9XG4gIHZhciBwcmVwID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2VcblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXBhcmVPYmplY3RTdGFja1RyYWNlXG4gIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IE1hdGgubWF4KDEwLCBsaW1pdClcblxuICAvLyBjYXB0dXJlIHRoZSBzdGFja1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvYmopXG5cbiAgLy8gc2xpY2UgdGhpcyBmdW5jdGlvbiBvZmYgdGhlIHRvcFxuICB2YXIgc3RhY2sgPSBvYmouc3RhY2suc2xpY2UoMSlcblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXBcbiAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gbGltaXRcblxuICByZXR1cm4gc3RhY2tcbn1cblxuLyoqXG4gKiBDYXB0dXJlIGNhbGwgc2l0ZSBzdGFjayBmcm9tIHY4LlxuICovXG5cbmZ1bmN0aW9uIHByZXBhcmVPYmplY3RTdGFja1RyYWNlIChvYmosIHN0YWNrKSB7XG4gIHJldHVybiBzdGFja1xufVxuXG4vKipcbiAqIFJldHVybiBhIHdyYXBwZWQgZnVuY3Rpb24gaW4gYSBkZXByZWNhdGlvbiBtZXNzYWdlLlxuICovXG5cbmZ1bmN0aW9uIHdyYXBmdW5jdGlvbiAoZm4sIG1lc3NhZ2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IGZuIG11c3QgYmUgYSBmdW5jdGlvbicpXG4gIH1cblxuICB2YXIgYXJncyA9IGNyZWF0ZUFyZ3VtZW50c1N0cmluZyhmbi5sZW5ndGgpXG4gIHZhciBkZXByZWNhdGUgPSB0aGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIHN0YWNrID0gZ2V0U3RhY2soKVxuICB2YXIgc2l0ZSA9IGNhbGxTaXRlTG9jYXRpb24oc3RhY2tbMV0pXG5cbiAgc2l0ZS5uYW1lID0gZm4ubmFtZVxuXG4gICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXZhbFxuICB2YXIgZGVwcmVjYXRlZGZuID0gZXZhbCgnKGZ1bmN0aW9uICgnICsgYXJncyArICcpIHtcXG4nICtcbiAgICAnXCJ1c2Ugc3RyaWN0XCJcXG4nICtcbiAgICAnbG9nLmNhbGwoZGVwcmVjYXRlLCBtZXNzYWdlLCBzaXRlKVxcbicgK1xuICAgICdyZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxcbicgK1xuICAgICd9KScpXG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWRmblxufVxuXG4vKipcbiAqIFdyYXAgcHJvcGVydHkgaW4gYSBkZXByZWNhdGlvbiBtZXNzYWdlLlxuICovXG5cbmZ1bmN0aW9uIHdyYXBwcm9wZXJ0eSAob2JqLCBwcm9wLCBtZXNzYWdlKSB7XG4gIGlmICghb2JqIHx8ICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqICE9PSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG9iaiBtdXN0IGJlIG9iamVjdCcpXG4gIH1cblxuICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKVxuXG4gIGlmICghZGVzY3JpcHRvcikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3QgY2FsbCBwcm9wZXJ0eSBvbiBvd25lciBvYmplY3QnKVxuICB9XG5cbiAgaWYgKCFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Byb3BlcnR5IG11c3QgYmUgY29uZmlndXJhYmxlJylcbiAgfVxuXG4gIHZhciBkZXByZWNhdGUgPSB0aGlzXG4gIHZhciBzdGFjayA9IGdldFN0YWNrKClcbiAgdmFyIHNpdGUgPSBjYWxsU2l0ZUxvY2F0aW9uKHN0YWNrWzFdKVxuXG4gIC8vIHNldCBzaXRlIG5hbWVcbiAgc2l0ZS5uYW1lID0gcHJvcFxuXG4gIC8vIGNvbnZlcnQgZGF0YSBkZXNjcmlwdG9yXG4gIGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICBkZXNjcmlwdG9yID0gY29udmVydERhdGFEZXNjcmlwdG9yVG9BY2Nlc3NvcihvYmosIHByb3AsIG1lc3NhZ2UpXG4gIH1cblxuICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXRcbiAgdmFyIHNldCA9IGRlc2NyaXB0b3Iuc2V0XG5cbiAgLy8gd3JhcCBnZXR0ZXJcbiAgaWYgKHR5cGVvZiBnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBkZXNjcmlwdG9yLmdldCA9IGZ1bmN0aW9uIGdldHRlciAoKSB7XG4gICAgICBsb2cuY2FsbChkZXByZWNhdGUsIG1lc3NhZ2UsIHNpdGUpXG4gICAgICByZXR1cm4gZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9XG4gIH1cblxuICAvLyB3cmFwIHNldHRlclxuICBpZiAodHlwZW9mIHNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRlc2NyaXB0b3Iuc2V0ID0gZnVuY3Rpb24gc2V0dGVyICgpIHtcbiAgICAgIGxvZy5jYWxsKGRlcHJlY2F0ZSwgbWVzc2FnZSwgc2l0ZSlcbiAgICAgIHJldHVybiBzZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIGRlc2NyaXB0b3IpXG59XG5cbi8qKlxuICogQ3JlYXRlIERlcHJlY2F0aW9uRXJyb3IgZm9yIGRlcHJlY2F0aW9uXG4gKi9cblxuZnVuY3Rpb24gRGVwcmVjYXRpb25FcnJvciAobmFtZXNwYWNlLCBtZXNzYWdlLCBzdGFjaykge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICB2YXIgc3RhY2tTdHJpbmdcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdjb25zdHJ1Y3RvcicsIHtcbiAgICB2YWx1ZTogRGVwcmVjYXRpb25FcnJvclxuICB9KVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ21lc3NhZ2UnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBtZXNzYWdlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnbmFtZScsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6ICdEZXByZWNhdGlvbkVycm9yJyxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ25hbWVzcGFjZScsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IG5hbWVzcGFjZSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzdGFja1N0cmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzdGFja1N0cmluZ1xuICAgICAgfVxuXG4gICAgICAvLyBwcmVwYXJlIHN0YWNrIHRyYWNlXG4gICAgICByZXR1cm4gKHN0YWNrU3RyaW5nID0gY3JlYXRlU3RhY2tTdHJpbmcuY2FsbCh0aGlzLCBzdGFjaykpXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldHRlciAodmFsKSB7XG4gICAgICBzdGFja1N0cmluZyA9IHZhbFxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gZXJyb3Jcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvZGVwZC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTMwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogZGVwZFxuICogQ29weXJpZ2h0KGMpIDIwMTQgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gY2FsbFNpdGVUb1N0cmluZ1xuXG4vKipcbiAqIEZvcm1hdCBhIENhbGxTaXRlIGZpbGUgbG9jYXRpb24gdG8gYSBzdHJpbmcuXG4gKi9cblxuZnVuY3Rpb24gY2FsbFNpdGVGaWxlTG9jYXRpb24gKGNhbGxTaXRlKSB7XG4gIHZhciBmaWxlTmFtZVxuICB2YXIgZmlsZUxvY2F0aW9uID0gJydcblxuICBpZiAoY2FsbFNpdGUuaXNOYXRpdmUoKSkge1xuICAgIGZpbGVMb2NhdGlvbiA9ICduYXRpdmUnXG4gIH0gZWxzZSBpZiAoY2FsbFNpdGUuaXNFdmFsKCkpIHtcbiAgICBmaWxlTmFtZSA9IGNhbGxTaXRlLmdldFNjcmlwdE5hbWVPclNvdXJjZVVSTCgpXG4gICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgZmlsZUxvY2F0aW9uID0gY2FsbFNpdGUuZ2V0RXZhbE9yaWdpbigpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpbGVOYW1lID0gY2FsbFNpdGUuZ2V0RmlsZU5hbWUoKVxuICB9XG5cbiAgaWYgKGZpbGVOYW1lKSB7XG4gICAgZmlsZUxvY2F0aW9uICs9IGZpbGVOYW1lXG5cbiAgICB2YXIgbGluZU51bWJlciA9IGNhbGxTaXRlLmdldExpbmVOdW1iZXIoKVxuICAgIGlmIChsaW5lTnVtYmVyICE9IG51bGwpIHtcbiAgICAgIGZpbGVMb2NhdGlvbiArPSAnOicgKyBsaW5lTnVtYmVyXG5cbiAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBjYWxsU2l0ZS5nZXRDb2x1bW5OdW1iZXIoKVxuICAgICAgaWYgKGNvbHVtbk51bWJlcikge1xuICAgICAgICBmaWxlTG9jYXRpb24gKz0gJzonICsgY29sdW1uTnVtYmVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbGVMb2NhdGlvbiB8fCAndW5rbm93biBzb3VyY2UnXG59XG5cbi8qKlxuICogRm9ybWF0IGEgQ2FsbFNpdGUgdG8gYSBzdHJpbmcuXG4gKi9cblxuZnVuY3Rpb24gY2FsbFNpdGVUb1N0cmluZyAoY2FsbFNpdGUpIHtcbiAgdmFyIGFkZFN1ZmZpeCA9IHRydWVcbiAgdmFyIGZpbGVMb2NhdGlvbiA9IGNhbGxTaXRlRmlsZUxvY2F0aW9uKGNhbGxTaXRlKVxuICB2YXIgZnVuY3Rpb25OYW1lID0gY2FsbFNpdGUuZ2V0RnVuY3Rpb25OYW1lKClcbiAgdmFyIGlzQ29uc3RydWN0b3IgPSBjYWxsU2l0ZS5pc0NvbnN0cnVjdG9yKClcbiAgdmFyIGlzTWV0aG9kQ2FsbCA9ICEoY2FsbFNpdGUuaXNUb3BsZXZlbCgpIHx8IGlzQ29uc3RydWN0b3IpXG4gIHZhciBsaW5lID0gJydcblxuICBpZiAoaXNNZXRob2RDYWxsKSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjYWxsU2l0ZS5nZXRNZXRob2ROYW1lKClcbiAgICB2YXIgdHlwZU5hbWUgPSBnZXRDb25zdHJ1Y3Rvck5hbWUoY2FsbFNpdGUpXG5cbiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7XG4gICAgICBpZiAodHlwZU5hbWUgJiYgZnVuY3Rpb25OYW1lLmluZGV4T2YodHlwZU5hbWUpICE9PSAwKSB7XG4gICAgICAgIGxpbmUgKz0gdHlwZU5hbWUgKyAnLidcbiAgICAgIH1cblxuICAgICAgbGluZSArPSBmdW5jdGlvbk5hbWVcblxuICAgICAgaWYgKG1ldGhvZE5hbWUgJiYgZnVuY3Rpb25OYW1lLmxhc3RJbmRleE9mKCcuJyArIG1ldGhvZE5hbWUpICE9PSBmdW5jdGlvbk5hbWUubGVuZ3RoIC0gbWV0aG9kTmFtZS5sZW5ndGggLSAxKSB7XG4gICAgICAgIGxpbmUgKz0gJyBbYXMgJyArIG1ldGhvZE5hbWUgKyAnXSdcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSArPSB0eXBlTmFtZSArICcuJyArIChtZXRob2ROYW1lIHx8ICc8YW5vbnltb3VzPicpXG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQ29uc3RydWN0b3IpIHtcbiAgICBsaW5lICs9ICduZXcgJyArIChmdW5jdGlvbk5hbWUgfHwgJzxhbm9ueW1vdXM+JylcbiAgfSBlbHNlIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICBsaW5lICs9IGZ1bmN0aW9uTmFtZVxuICB9IGVsc2Uge1xuICAgIGFkZFN1ZmZpeCA9IGZhbHNlXG4gICAgbGluZSArPSBmaWxlTG9jYXRpb25cbiAgfVxuXG4gIGlmIChhZGRTdWZmaXgpIHtcbiAgICBsaW5lICs9ICcgKCcgKyBmaWxlTG9jYXRpb24gKyAnKSdcbiAgfVxuXG4gIHJldHVybiBsaW5lXG59XG5cbi8qKlxuICogR2V0IGNvbnN0cnVjdG9yIG5hbWUgb2YgcmV2aXZlci5cbiAqL1xuXG5mdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUgKG9iaikge1xuICB2YXIgcmVjZWl2ZXIgPSBvYmoucmVjZWl2ZXJcbiAgcmV0dXJuIChyZWNlaXZlci5jb25zdHJ1Y3RvciAmJiByZWNlaXZlci5jb25zdHJ1Y3Rvci5uYW1lKSB8fCBudWxsXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2RlcGQvbGliL2NvbXBhdC9jYWxsc2l0ZS10b3N0cmluZy5qc1xuLy8gbW9kdWxlIGlkID0gMTMxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogZGVwZFxuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZXZlbnRMaXN0ZW5lckNvdW50XG5cbi8qKlxuICogR2V0IHRoZSBjb3VudCBvZiBsaXN0ZW5lcnMgb24gYW4gZXZlbnQgZW1pdHRlciBvZiBhIHNwZWNpZmljIHR5cGUuXG4gKi9cblxuZnVuY3Rpb24gZXZlbnRMaXN0ZW5lckNvdW50IChlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGhcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvZGVwZC9saWIvY29tcGF0L2V2ZW50LWxpc3RlbmVyLWNvdW50LmpzXG4vLyBtb2R1bGUgaWQgPSAxMzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKHtfX3Byb3RvX186W119IGluc3RhbmNlb2YgQXJyYXkgPyBzZXRQcm90b09mIDogbWl4aW5Qcm9wZXJ0aWVzKTtcblxuZnVuY3Rpb24gc2V0UHJvdG9PZihvYmosIHByb3RvKSB7XG5cdG9iai5fX3Byb3RvX18gPSBwcm90bztcblx0cmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gbWl4aW5Qcm9wZXJ0aWVzKG9iaiwgcHJvdG8pIHtcblx0Zm9yICh2YXIgcHJvcCBpbiBwcm90bykge1xuXHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7XG5cdFx0XHRvYmpbcHJvcF0gPSBwcm90b1twcm9wXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9iajtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvc2V0cHJvdG90eXBlb2YvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDEzM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEJPTUNoYXIgPSAnXFx1RkVGRic7XG5cbmV4cG9ydHMuUHJlcGVuZEJPTSA9IFByZXBlbmRCT01XcmFwcGVyXG5mdW5jdGlvbiBQcmVwZW5kQk9NV3JhcHBlcihlbmNvZGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy5lbmNvZGVyID0gZW5jb2RlcjtcbiAgICB0aGlzLmFkZEJPTSA9IHRydWU7XG59XG5cblByZXBlbmRCT01XcmFwcGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICh0aGlzLmFkZEJPTSkge1xuICAgICAgICBzdHIgPSBCT01DaGFyICsgc3RyO1xuICAgICAgICB0aGlzLmFkZEJPTSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVuY29kZXIud3JpdGUoc3RyKTtcbn1cblxuUHJlcGVuZEJPTVdyYXBwZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXIuZW5kKCk7XG59XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0cy5TdHJpcEJPTSA9IFN0cmlwQk9NV3JhcHBlcjtcbmZ1bmN0aW9uIFN0cmlwQk9NV3JhcHBlcihkZWNvZGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy5kZWNvZGVyID0gZGVjb2RlcjtcbiAgICB0aGlzLnBhc3MgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5TdHJpcEJPTVdyYXBwZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZGVjb2Rlci53cml0ZShidWYpO1xuICAgIGlmICh0aGlzLnBhc3MgfHwgIXJlcylcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgIGlmIChyZXNbMF0gPT09IEJPTUNoYXIpIHtcbiAgICAgICAgcmVzID0gcmVzLnNsaWNlKDEpO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5zdHJpcEJPTSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdHJpcEJPTSgpO1xuICAgIH1cblxuICAgIHRoaXMucGFzcyA9IHRydWU7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuU3RyaXBCT01XcmFwcGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpO1xufVxuXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9saWIvYm9tLWhhbmRsaW5nLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIFVwZGF0ZSB0aGlzIGFycmF5IGlmIHlvdSBhZGQvcmVuYW1lL3JlbW92ZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS5cbi8vIFdlIHN1cHBvcnQgQnJvd3NlcmlmeSBieSBza2lwcGluZyBhdXRvbWF0aWMgbW9kdWxlIGRpc2NvdmVyeSBhbmQgcmVxdWlyaW5nIG1vZHVsZXMgZGlyZWN0bHkuXG52YXIgbW9kdWxlcyA9IFtcbiAgICByZXF1aXJlKFwiLi9pbnRlcm5hbFwiKSxcbiAgICByZXF1aXJlKFwiLi91dGYxNlwiKSxcbiAgICByZXF1aXJlKFwiLi91dGY3XCIpLFxuICAgIHJlcXVpcmUoXCIuL3NiY3MtY29kZWNcIiksXG4gICAgcmVxdWlyZShcIi4vc2Jjcy1kYXRhXCIpLFxuICAgIHJlcXVpcmUoXCIuL3NiY3MtZGF0YS1nZW5lcmF0ZWRcIiksXG4gICAgcmVxdWlyZShcIi4vZGJjcy1jb2RlY1wiKSxcbiAgICByZXF1aXJlKFwiLi9kYmNzLWRhdGFcIiksXG5dO1xuXG4vLyBQdXQgYWxsIGVuY29kaW5nL2FsaWFzL2NvZGVjIGRlZmluaXRpb25zIHRvIHNpbmdsZSBvYmplY3QgYW5kIGV4cG9ydCBpdC4gXG5mb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbW9kdWxlID0gbW9kdWxlc1tpXTtcbiAgICBmb3IgKHZhciBlbmMgaW4gbW9kdWxlKVxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZHVsZSwgZW5jKSlcbiAgICAgICAgICAgIGV4cG9ydHNbZW5jXSA9IG1vZHVsZVtlbmNdO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxMzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcImJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIEV4cG9ydCBOb2RlLmpzIGludGVybmFsIGVuY29kaW5ncy5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gRW5jb2RpbmdzXG4gICAgdXRmODogICB7IHR5cGU6IFwiX2ludGVybmFsXCIsIGJvbUF3YXJlOiB0cnVlfSxcbiAgICBjZXN1ODogIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIHVuaWNvZGUxMXV0Zjg6IFwidXRmOFwiLFxuXG4gICAgdWNzMjogICB7IHR5cGU6IFwiX2ludGVybmFsXCIsIGJvbUF3YXJlOiB0cnVlfSxcbiAgICB1dGYxNmxlOiBcInVjczJcIixcblxuICAgIGJpbmFyeTogeyB0eXBlOiBcIl9pbnRlcm5hbFwiIH0sXG4gICAgYmFzZTY0OiB7IHR5cGU6IFwiX2ludGVybmFsXCIgfSxcbiAgICBoZXg6ICAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiB9LFxuXG4gICAgLy8gQ29kZWMuXG4gICAgX2ludGVybmFsOiBJbnRlcm5hbENvZGVjLFxufTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gSW50ZXJuYWxDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5lbmMgPSBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lO1xuICAgIHRoaXMuYm9tQXdhcmUgPSBjb2RlY09wdGlvbnMuYm9tQXdhcmU7XG5cbiAgICBpZiAodGhpcy5lbmMgPT09IFwiYmFzZTY0XCIpXG4gICAgICAgIHRoaXMuZW5jb2RlciA9IEludGVybmFsRW5jb2RlckJhc2U2NDtcbiAgICBlbHNlIGlmICh0aGlzLmVuYyA9PT0gXCJjZXN1OFwiKSB7XG4gICAgICAgIHRoaXMuZW5jID0gXCJ1dGY4XCI7IC8vIFVzZSB1dGY4IGZvciBkZWNvZGluZy5cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyQ2VzdTg7XG5cbiAgICAgICAgLy8gQWRkIGRlY29kZXIgZm9yIHZlcnNpb25zIG9mIE5vZGUgbm90IHN1cHBvcnRpbmcgQ0VTVS04XG4gICAgICAgIGlmIChuZXcgQnVmZmVyKCdlZGEwYmRlZGIyYTknLCAnaGV4JykudG9TdHJpbmcoKSAhPT0gJ/CfkqknKSB7XG4gICAgICAgICAgICB0aGlzLmRlY29kZXIgPSBJbnRlcm5hbERlY29kZXJDZXN1ODtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENoYXJVbmljb2RlID0gaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5JbnRlcm5hbENvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyO1xuSW50ZXJuYWxDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IEludGVybmFsRGVjb2RlcjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gV2UgdXNlIG5vZGUuanMgaW50ZXJuYWwgZGVjb2Rlci4gSXRzIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhcyBvdXJzLlxudmFyIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpLlN0cmluZ0RlY29kZXI7XG5cbmlmICghU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kKSAvLyBOb2RlIHYwLjggZG9lc24ndCBoYXZlIHRoaXMgbWV0aG9kLlxuICAgIFN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge307XG5cblxuZnVuY3Rpb24gSW50ZXJuYWxEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgU3RyaW5nRGVjb2Rlci5jYWxsKHRoaXMsIGNvZGVjLmVuYyk7XG59XG5cbkludGVybmFsRGVjb2Rlci5wcm90b3R5cGUgPSBTdHJpbmdEZWNvZGVyLnByb3RvdHlwZTtcblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW5jb2RlciBpcyBtb3N0bHkgdHJpdmlhbFxuXG5mdW5jdGlvbiBJbnRlcm5hbEVuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmVuYyA9IGNvZGVjLmVuYztcbn1cblxuSW50ZXJuYWxFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKHN0ciwgdGhpcy5lbmMpO1xufVxuXG5JbnRlcm5hbEVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGNlcHQgYmFzZTY0IGVuY29kZXIsIHdoaWNoIG11c3Qga2VlcCBpdHMgc3RhdGUuXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlckJhc2U2NChvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMucHJldlN0ciA9ICcnO1xufVxuXG5JbnRlcm5hbEVuY29kZXJCYXNlNjQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgc3RyID0gdGhpcy5wcmV2U3RyICsgc3RyO1xuICAgIHZhciBjb21wbGV0ZVF1YWRzID0gc3RyLmxlbmd0aCAtIChzdHIubGVuZ3RoICUgNCk7XG4gICAgdGhpcy5wcmV2U3RyID0gc3RyLnNsaWNlKGNvbXBsZXRlUXVhZHMpO1xuICAgIHN0ciA9IHN0ci5zbGljZSgwLCBjb21wbGV0ZVF1YWRzKTtcblxuICAgIHJldHVybiBuZXcgQnVmZmVyKHN0ciwgXCJiYXNlNjRcIik7XG59XG5cbkludGVybmFsRW5jb2RlckJhc2U2NC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIodGhpcy5wcmV2U3RyLCBcImJhc2U2NFwiKTtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0VTVS04IGVuY29kZXIgaXMgYWxzbyBzcGVjaWFsLlxuXG5mdW5jdGlvbiBJbnRlcm5hbEVuY29kZXJDZXN1OChvcHRpb25zLCBjb2RlYykge1xufVxuXG5JbnRlcm5hbEVuY29kZXJDZXN1OC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzdHIubGVuZ3RoICogMyksIGJ1ZklkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIE5haXZlIGltcGxlbWVudGF0aW9uLCBidXQgaXQgd29ya3MgYmVjYXVzZSBDRVNVLTggaXMgZXNwZWNpYWxseSBlYXN5XG4gICAgICAgIC8vIHRvIGNvbnZlcnQgZnJvbSBVVEYtMTYgKHdoaWNoIGFsbCBKUyBzdHJpbmdzIGFyZSBlbmNvZGVkIGluKS5cbiAgICAgICAgaWYgKGNoYXJDb2RlIDwgMHg4MClcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBjaGFyQ29kZTtcbiAgICAgICAgZWxzZSBpZiAoY2hhckNvZGUgPCAweDgwMCkge1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4QzAgKyAoY2hhckNvZGUgPj4+IDYpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoY2hhckNvZGUgJiAweDNmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gY2hhckNvZGUgd2lsbCBhbHdheXMgYmUgPCAweDEwMDAwIGluIGphdmFzY3JpcHQuXG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gMHhFMCArIChjaGFyQ29kZSA+Pj4gMTIpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoKGNoYXJDb2RlID4+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoY2hhckNvZGUgJiAweDNmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnVmLnNsaWNlKDAsIGJ1ZklkeCk7XG59XG5cbkludGVybmFsRW5jb2RlckNlc3U4LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENFU1UtOCBkZWNvZGVyIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBOb2RlIHY0LjArXG5cbmZ1bmN0aW9uIEludGVybmFsRGVjb2RlckNlc3U4KG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5hY2MgPSAwO1xuICAgIHRoaXMuY29udEJ5dGVzID0gMDtcbiAgICB0aGlzLmFjY0J5dGVzID0gMDtcbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGNvZGVjLmRlZmF1bHRDaGFyVW5pY29kZTtcbn1cblxuSW50ZXJuYWxEZWNvZGVyQ2VzdTgucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIGFjYyA9IHRoaXMuYWNjLCBjb250Qnl0ZXMgPSB0aGlzLmNvbnRCeXRlcywgYWNjQnl0ZXMgPSB0aGlzLmFjY0J5dGVzLCBcbiAgICAgICAgcmVzID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1ckJ5dGUgPSBidWZbaV07XG4gICAgICAgIGlmICgoY3VyQnl0ZSAmIDB4QzApICE9PSAweDgwKSB7IC8vIExlYWRpbmcgYnl0ZVxuICAgICAgICAgICAgaWYgKGNvbnRCeXRlcyA+IDApIHsgLy8gUHJldmlvdXMgY29kZSBpcyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcyA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJCeXRlIDwgMHg4MCkgeyAvLyBTaW5nbGUtYnl0ZSBjb2RlXG4gICAgICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY3VyQnl0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ckJ5dGUgPCAweEUwKSB7IC8vIFR3by1ieXRlIGNvZGVcbiAgICAgICAgICAgICAgICBhY2MgPSBjdXJCeXRlICYgMHgxRjtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMgPSAxOyBhY2NCeXRlcyA9IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ckJ5dGUgPCAweEYwKSB7IC8vIFRocmVlLWJ5dGUgY29kZVxuICAgICAgICAgICAgICAgIGFjYyA9IGN1ckJ5dGUgJiAweDBGO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcyA9IDI7IGFjY0J5dGVzID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIEZvdXIgb3IgbW9yZSBhcmUgbm90IHN1cHBvcnRlZCBmb3IgQ0VTVS04LlxuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gQ29udGludWF0aW9uIGJ5dGVcbiAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPiAwKSB7IC8vIFdlJ3JlIHdhaXRpbmcgZm9yIGl0LlxuICAgICAgICAgICAgICAgIGFjYyA9IChhY2MgPDwgNikgfCAoY3VyQnl0ZSAmIDB4M2YpO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcy0tOyBhY2NCeXRlcysrO1xuICAgICAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJsb25nIGVuY29kaW5nLCBidXQgc3VwcG9ydCBNb2RpZmllZCBVVEYtOCAoZW5jb2RpbmcgTlVMTCBhcyBDMCA4MClcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY0J5dGVzID09PSAyICYmIGFjYyA8IDB4ODAgJiYgYWNjID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWNjQnl0ZXMgPT09IDMgJiYgYWNjIDwgMHg4MDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdHVhbGx5IGFkZCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhY2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFVuZXhwZWN0ZWQgY29udGludWF0aW9uIGJ5dGVcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hY2MgPSBhY2M7IHRoaXMuY29udEJ5dGVzID0gY29udEJ5dGVzOyB0aGlzLmFjY0J5dGVzID0gYWNjQnl0ZXM7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuSW50ZXJuYWxEZWNvZGVyQ2VzdTgucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXMgPSAwO1xuICAgIGlmICh0aGlzLmNvbnRCeXRlcyA+IDApXG4gICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICByZXR1cm4gcmVzO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2ludGVybmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcImJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIE5vdGU6IFVURjE2LUxFIChvciBVQ1MyKSBjb2RlYyBpcyBOb2RlLmpzIG5hdGl2ZS4gU2VlIGVuY29kaW5ncy9pbnRlcm5hbC5qc1xuXG4vLyA9PSBVVEYxNi1CRSBjb2RlYy4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnRzLnV0ZjE2YmUgPSBVdGYxNkJFQ29kZWM7XG5mdW5jdGlvbiBVdGYxNkJFQ29kZWMoKSB7XG59XG5cblV0ZjE2QkVDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjE2QkVFbmNvZGVyO1xuVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmMTZCRURlY29kZXI7XG5VdGYxNkJFQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkJFRW5jb2RlcigpIHtcbn1cblxuVXRmMTZCRUVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoc3RyLCAndWNzMicpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHZhciB0bXAgPSBidWZbaV07IGJ1ZltpXSA9IGJ1ZltpKzFdOyBidWZbaSsxXSA9IHRtcDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuVXRmMTZCRUVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjE2QkVEZWNvZGVyKCkge1xuICAgIHRoaXMub3ZlcmZsb3dCeXRlID0gLTE7XG59XG5cblV0ZjE2QkVEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIGlmIChidWYubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiAnJztcblxuICAgIHZhciBidWYyID0gbmV3IEJ1ZmZlcihidWYubGVuZ3RoICsgMSksXG4gICAgICAgIGkgPSAwLCBqID0gMDtcblxuICAgIGlmICh0aGlzLm92ZXJmbG93Qnl0ZSAhPT0gLTEpIHtcbiAgICAgICAgYnVmMlswXSA9IGJ1ZlswXTtcbiAgICAgICAgYnVmMlsxXSA9IHRoaXMub3ZlcmZsb3dCeXRlO1xuICAgICAgICBpID0gMTsgaiA9IDI7XG4gICAgfVxuXG4gICAgZm9yICg7IGkgPCBidWYubGVuZ3RoLTE7IGkgKz0gMiwgais9IDIpIHtcbiAgICAgICAgYnVmMltqXSA9IGJ1ZltpKzFdO1xuICAgICAgICBidWYyW2orMV0gPSBidWZbaV07XG4gICAgfVxuXG4gICAgdGhpcy5vdmVyZmxvd0J5dGUgPSAoaSA9PSBidWYubGVuZ3RoLTEpID8gYnVmW2J1Zi5sZW5ndGgtMV0gOiAtMTtcblxuICAgIHJldHVybiBidWYyLnNsaWNlKDAsIGopLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblV0ZjE2QkVEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyA9PSBVVEYtMTYgY29kZWMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjb2RlciBjaG9vc2VzIGF1dG9tYXRpY2FsbHkgZnJvbSBVVEYtMTZMRSBhbmQgVVRGLTE2QkUgdXNpbmcgQk9NIGFuZCBzcGFjZS1iYXNlZCBoZXVyaXN0aWMuXG4vLyBEZWZhdWx0cyB0byBVVEYtMTZMRSwgYXMgaXQncyBwcmV2YWxlbnQgYW5kIGRlZmF1bHQgaW4gTm9kZS5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTE2IGFuZCBodHRwOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtMTZsZVxuLy8gRGVjb2RlciBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkOiBpY29udi5kZWNvZGUoYnVmLCAndXRmMTYnLCB7ZGVmYXVsdEVuY29kaW5nOiAndXRmLTE2YmUnfSk7XG5cbi8vIEVuY29kZXIgdXNlcyBVVEYtMTZMRSBhbmQgcHJlcGVuZHMgQk9NICh3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIGFkZEJPTTogZmFsc2UpLlxuXG5leHBvcnRzLnV0ZjE2ID0gVXRmMTZDb2RlYztcbmZ1bmN0aW9uIFV0ZjE2Q29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbn1cblxuVXRmMTZDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjE2RW5jb2RlcjtcblV0ZjE2Q29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGYxNkRlY29kZXI7XG5cblxuLy8gLS0gRW5jb2RpbmcgKHBhc3MtdGhyb3VnaClcblxuZnVuY3Rpb24gVXRmMTZFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKG9wdGlvbnMuYWRkQk9NID09PSB1bmRlZmluZWQpXG4gICAgICAgIG9wdGlvbnMuYWRkQk9NID0gdHJ1ZTtcbiAgICB0aGlzLmVuY29kZXIgPSBjb2RlYy5pY29udi5nZXRFbmNvZGVyKCd1dGYtMTZsZScsIG9wdGlvbnMpO1xufVxuXG5VdGYxNkVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShzdHIpO1xufVxuXG5VdGYxNkVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXIuZW5kKCk7XG59XG5cblxuLy8gLS0gRGVjb2RpbmdcblxuZnVuY3Rpb24gVXRmMTZEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgICB0aGlzLmluaXRpYWxCeXRlcyA9IFtdO1xuICAgIHRoaXMuaW5pdGlhbEJ5dGVzTGVuID0gMDtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgaWYgKCF0aGlzLmRlY29kZXIpIHtcbiAgICAgICAgLy8gQ29kZWMgaXMgbm90IGNob3NlbiB5ZXQuIEFjY3VtdWxhdGUgaW5pdGlhbCBieXRlcy5cbiAgICAgICAgdGhpcy5pbml0aWFsQnl0ZXMucHVzaChidWYpO1xuICAgICAgICB0aGlzLmluaXRpYWxCeXRlc0xlbiArPSBidWYubGVuZ3RoO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbEJ5dGVzTGVuIDwgMTYpIC8vIFdlIG5lZWQgbW9yZSBieXRlcyB0byB1c2Ugc3BhY2UgaGV1cmlzdGljIChzZWUgYmVsb3cpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG5cbiAgICAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggYnl0ZXMgLT4gZGV0ZWN0IGVuZGlhbm5lc3MuXG4gICAgICAgIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxcbiAgICAgICAgICAgIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcoYnVmLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGggPSB0aGlzLmluaXRpYWxCeXRlc0xlbiA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShidWYpO1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5kZWNvZGVyKSB7XG4gICAgICAgIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxcbiAgICAgICAgICAgIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcoYnVmLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmRlY29kZXIud3JpdGUoYnVmKSxcbiAgICAgICAgICAgIHRyYWlsID0gdGhpcy5kZWNvZGVyLmVuZCgpO1xuXG4gICAgICAgIHJldHVybiB0cmFpbCA/IChyZXMgKyB0cmFpbCkgOiByZXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZXIuZW5kKCk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdEVuY29kaW5nKGJ1ZiwgZGVmYXVsdEVuY29kaW5nKSB7XG4gICAgdmFyIGVuYyA9IGRlZmF1bHRFbmNvZGluZyB8fCAndXRmLTE2bGUnO1xuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPj0gMikge1xuICAgICAgICAvLyBDaGVjayBCT00uXG4gICAgICAgIGlmIChidWZbMF0gPT0gMHhGRSAmJiBidWZbMV0gPT0gMHhGRikgLy8gVVRGLTE2QkUgQk9NXG4gICAgICAgICAgICBlbmMgPSAndXRmLTE2YmUnO1xuICAgICAgICBlbHNlIGlmIChidWZbMF0gPT0gMHhGRiAmJiBidWZbMV0gPT0gMHhGRSkgLy8gVVRGLTE2TEUgQk9NXG4gICAgICAgICAgICBlbmMgPSAndXRmLTE2bGUnO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIEJPTSBmb3VuZC4gVHJ5IHRvIGRlZHVjZSBlbmNvZGluZyBmcm9tIGluaXRpYWwgY29udGVudC5cbiAgICAgICAgICAgIC8vIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBjb250ZW50IGhhcyBBU0NJSSBjaGFycyAoVSswMCoqKSwgYnV0IHRoZSBvcHBvc2l0ZSAoVSsqKjAwKSBpcyB1bmNvbW1vbi5cbiAgICAgICAgICAgIC8vIFNvLCB3ZSBjb3VudCBBU0NJSSBhcyBpZiBpdCB3YXMgTEUgb3IgQkUsIGFuZCBkZWNpZGUgZnJvbSB0aGF0LlxuICAgICAgICAgICAgdmFyIGFzY2lpQ2hhcnNMRSA9IDAsIGFzY2lpQ2hhcnNCRSA9IDAsIC8vIENvdW50cyBvZiBjaGFycyBpbiBib3RoIHBvc2l0aW9uc1xuICAgICAgICAgICAgICAgIF9sZW4gPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gKGJ1Zi5sZW5ndGggJSAyKSwgNjQpOyAvLyBMZW4gaXMgYWx3YXlzIGV2ZW4uXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2xlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PT0gMCAmJiBidWZbaSsxXSAhPT0gMCkgYXNjaWlDaGFyc0JFKys7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPT0gMCAmJiBidWZbaSsxXSA9PT0gMCkgYXNjaWlDaGFyc0xFKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhc2NpaUNoYXJzQkUgPiBhc2NpaUNoYXJzTEUpXG4gICAgICAgICAgICAgICAgZW5jID0gJ3V0Zi0xNmJlJztcbiAgICAgICAgICAgIGVsc2UgaWYgKGFzY2lpQ2hhcnNCRSA8IGFzY2lpQ2hhcnNMRSlcbiAgICAgICAgICAgICAgICBlbmMgPSAndXRmLTE2bGUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuYztcbn1cblxuXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdXRmMTYuanNcbi8vIG1vZHVsZSBpZCA9IDEzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcjtcblxuLy8gVVRGLTcgY29kZWMsIGFjY29yZGluZyB0byBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjE1MlxuLy8gU2VlIGFsc28gYmVsb3cgYSBVVEYtNy1JTUFQIGNvZGVjLCBhY2NvcmRpbmcgdG8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTUuMS4zXG5cbmV4cG9ydHMudXRmNyA9IFV0ZjdDb2RlYztcbmV4cG9ydHMudW5pY29kZTExdXRmNyA9ICd1dGY3JzsgLy8gQWxpYXMgVU5JQ09ERS0xLTEtVVRGLTdcbmZ1bmN0aW9uIFV0ZjdDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5pY29udiA9IGljb252O1xufTtcblxuVXRmN0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmN0VuY29kZXI7XG5VdGY3Q29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGY3RGVjb2RlcjtcblV0ZjdDb2RlYy5wcm90b3R5cGUuYm9tQXdhcmUgPSB0cnVlO1xuXG5cbi8vIC0tIEVuY29kaW5nXG5cbnZhciBub25EaXJlY3RDaGFycyA9IC9bXkEtWmEtejAtOSdcXChcXCksLVxcLlxcLzpcXD8gXFxuXFxyXFx0XSsvZztcblxuZnVuY3Rpb24gVXRmN0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG59XG5cblV0ZjdFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIC8vIE5haXZlIGltcGxlbWVudGF0aW9uLlxuICAgIC8vIE5vbi1kaXJlY3QgY2hhcnMgYXJlIGVuY29kZWQgYXMgXCIrPGJhc2U2ND4tXCI7IHNpbmdsZSBcIitcIiBjaGFyIGlzIGVuY29kZWQgYXMgXCIrLVwiLlxuICAgIHJldHVybiBuZXcgQnVmZmVyKHN0ci5yZXBsYWNlKG5vbkRpcmVjdENoYXJzLCBmdW5jdGlvbihjaHVuaykge1xuICAgICAgICByZXR1cm4gXCIrXCIgKyAoY2h1bmsgPT09ICcrJyA/ICcnIDogXG4gICAgICAgICAgICB0aGlzLmljb252LmVuY29kZShjaHVuaywgJ3V0ZjE2LWJlJykudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoLz0rJC8sICcnKSkgXG4gICAgICAgICAgICArIFwiLVwiO1xuICAgIH0uYmluZCh0aGlzKSkpO1xufVxuXG5VdGY3RW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuLy8gLS0gRGVjb2RpbmdcblxuZnVuY3Rpb24gVXRmN0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSAnJztcbn1cblxudmFyIGJhc2U2NFJlZ2V4ID0gL1tBLVphLXowLTlcXC8rXS87XG52YXIgYmFzZTY0Q2hhcnMgPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspXG4gICAgYmFzZTY0Q2hhcnNbaV0gPSBiYXNlNjRSZWdleC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpO1xuXG52YXIgcGx1c0NoYXIgPSAnKycuY2hhckNvZGVBdCgwKSwgXG4gICAgbWludXNDaGFyID0gJy0nLmNoYXJDb2RlQXQoMCksXG4gICAgYW5kQ2hhciA9ICcmJy5jaGFyQ29kZUF0KDApO1xuXG5VdGY3RGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgcmVzID0gXCJcIiwgbGFzdEkgPSAwLFxuICAgICAgICBpbkJhc2U2NCA9IHRoaXMuaW5CYXNlNjQsXG4gICAgICAgIGJhc2U2NEFjY3VtID0gdGhpcy5iYXNlNjRBY2N1bTtcblxuICAgIC8vIFRoZSBkZWNvZGVyIGlzIG1vcmUgaW52b2x2ZWQgYXMgd2UgbXVzdCBoYW5kbGUgY2h1bmtzIGluIHN0cmVhbS5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaW5CYXNlNjQpIHsgLy8gV2UncmUgaW4gZGlyZWN0IG1vZGUuXG4gICAgICAgICAgICAvLyBXcml0ZSBkaXJlY3QgY2hhcnMgdW50aWwgJysnXG4gICAgICAgICAgICBpZiAoYnVmW2ldID09IHBsdXNDaGFyKSB7XG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSwgaSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICAgICAgICAgICAgICBsYXN0SSA9IGkrMTtcbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7IC8vIFdlIGRlY29kZSBiYXNlNjQuXG4gICAgICAgICAgICBpZiAoIWJhc2U2NENoYXJzW2J1ZltpXV0pIHsgLy8gQmFzZTY0IGVuZGVkLlxuICAgICAgICAgICAgICAgIGlmIChpID09IGxhc3RJICYmIGJ1ZltpXSA9PSBtaW51c0NoYXIpIHsvLyBcIistXCIgLT4gXCIrXCJcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IFwiK1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIGJ1Zi5zbGljZShsYXN0SSwgaSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKG5ldyBCdWZmZXIoYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPSBtaW51c0NoYXIpIC8vIE1pbnVzIGlzIGFic29yYmVkIGFmdGVyIGJhc2U2NC5cbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbkJhc2U2NCkge1xuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJKSwgXCJhc2NpaVwiKTsgLy8gV3JpdGUgZGlyZWN0IGNoYXJzLlxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIGJ1Zi5zbGljZShsYXN0SSkudG9TdHJpbmcoKTtcblxuICAgICAgICB2YXIgY2FuQmVEZWNvZGVkID0gYjY0c3RyLmxlbmd0aCAtIChiNjRzdHIubGVuZ3RoICUgOCk7IC8vIE1pbmltYWwgY2h1bms6IDIgcXVhZHMgLT4gMngzIGJ5dGVzIC0+IDMgY2hhcnMuXG4gICAgICAgIGJhc2U2NEFjY3VtID0gYjY0c3RyLnNsaWNlKGNhbkJlRGVjb2RlZCk7IC8vIFRoZSByZXN0IHdpbGwgYmUgZGVjb2RlZCBpbiBmdXR1cmUuXG4gICAgICAgIGI2NHN0ciA9IGI2NHN0ci5zbGljZSgwLCBjYW5CZURlY29kZWQpO1xuXG4gICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShuZXcgQnVmZmVyKGI2NHN0ciwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5CYXNlNjQgPSBpbkJhc2U2NDtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gYmFzZTY0QWNjdW07XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5VdGY3RGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShuZXcgQnVmZmVyKHRoaXMuYmFzZTY0QWNjdW0sICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcblxuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gJyc7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG4vLyBVVEYtNy1JTUFQIGNvZGVjLlxuLy8gUkZDMzUwMSBTZWMuIDUuMS4zIE1vZGlmaWVkIFVURi03IChodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNS4xLjMpXG4vLyBEaWZmZXJlbmNlczpcbi8vICAqIEJhc2U2NCBwYXJ0IGlzIHN0YXJ0ZWQgYnkgXCImXCIgaW5zdGVhZCBvZiBcIitcIlxuLy8gICogRGlyZWN0IGNoYXJhY3RlcnMgYXJlIDB4MjAtMHg3RSwgZXhjZXB0IFwiJlwiICgweDI2KVxuLy8gICogSW4gQmFzZTY0LCBcIixcIiBpcyB1c2VkIGluc3RlYWQgb2YgXCIvXCJcbi8vICAqIEJhc2U2NCBtdXN0IG5vdCBiZSB1c2VkIHRvIHJlcHJlc2VudCBkaXJlY3QgY2hhcmFjdGVycy5cbi8vICAqIE5vIGltcGxpY2l0IHNoaWZ0IGJhY2sgZnJvbSBCYXNlNjQgKHNob3VsZCBhbHdheXMgZW5kIHdpdGggJy0nKVxuLy8gICogU3RyaW5nIG11c3QgZW5kIGluIG5vbi1zaGlmdGVkIHBvc2l0aW9uLlxuLy8gICogXCItJlwiIHdoaWxlIGluIGJhc2U2NCBpcyBub3QgYWxsb3dlZC5cblxuXG5leHBvcnRzLnV0ZjdpbWFwID0gVXRmN0lNQVBDb2RlYztcbmZ1bmN0aW9uIFV0ZjdJTUFQQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbn07XG5cblV0ZjdJTUFQQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBVdGY3SU1BUEVuY29kZXI7XG5VdGY3SU1BUENvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmN0lNQVBEZWNvZGVyO1xuVXRmN0lNQVBDb2RlYy5wcm90b3R5cGUuYm9tQXdhcmUgPSB0cnVlO1xuXG5cbi8vIC0tIEVuY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjdJTUFQRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9IG5ldyBCdWZmZXIoNik7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IDA7XG59XG5cblV0ZjdJTUFQRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW0sXG4gICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gdGhpcy5iYXNlNjRBY2N1bUlkeCxcbiAgICAgICAgYnVmID0gbmV3IEJ1ZmZlcihzdHIubGVuZ3RoKjUgKyAxMCksIGJ1ZklkeCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdUNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKDB4MjAgPD0gdUNoYXIgJiYgdUNoYXIgPD0gMHg3RSkgeyAvLyBEaXJlY3QgY2hhcmFjdGVyIG9yICcmJy5cbiAgICAgICAgICAgIGlmIChpbkJhc2U2NCkge1xuICAgICAgICAgICAgICAgIGlmIChiYXNlNjRBY2N1bUlkeCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZShiYXNlNjRBY2N1bS5zbGljZSgwLCBiYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcLy9nLCAnLCcpLnJlcGxhY2UoLz0rJC8sICcnKSwgYnVmSWR4KTtcbiAgICAgICAgICAgICAgICAgICAgYmFzZTY0QWNjdW1JZHggPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7IC8vIFdyaXRlICctJywgdGhlbiBnbyB0byBkaXJlY3QgbW9kZS5cbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWluQmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IHVDaGFyOyAvLyBXcml0ZSBkaXJlY3QgY2hhcmFjdGVyXG5cbiAgICAgICAgICAgICAgICBpZiAodUNoYXIgPT09IGFuZENoYXIpICAvLyBBbXBlcnNhbmQgLT4gJyYtJ1xuICAgICAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gbWludXNDaGFyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7IC8vIE5vbi1kaXJlY3QgY2hhcmFjdGVyXG4gICAgICAgICAgICBpZiAoIWluQmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IGFuZENoYXI7IC8vIFdyaXRlICcmJywgdGhlbiBnbyB0byBiYXNlNjQgbW9kZS5cbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bVtiYXNlNjRBY2N1bUlkeCsrXSA9IHVDaGFyID4+IDg7XG4gICAgICAgICAgICAgICAgYmFzZTY0QWNjdW1bYmFzZTY0QWNjdW1JZHgrK10gPSB1Q2hhciAmIDB4RkY7XG5cbiAgICAgICAgICAgICAgICBpZiAoYmFzZTY0QWNjdW1JZHggPT0gYmFzZTY0QWNjdW0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZklkeCArPSBidWYud3JpdGUoYmFzZTY0QWNjdW0udG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcLy9nLCAnLCcpLCBidWZJZHgpO1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bUlkeCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbkJhc2U2NCA9IGluQmFzZTY0O1xuICAgIHRoaXMuYmFzZTY0QWNjdW1JZHggPSBiYXNlNjRBY2N1bUlkeDtcblxuICAgIHJldHVybiBidWYuc2xpY2UoMCwgYnVmSWR4KTtcbn1cblxuVXRmN0lNQVBFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcigxMCksIGJ1ZklkeCA9IDA7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQpIHtcbiAgICAgICAgaWYgKHRoaXMuYmFzZTY0QWNjdW1JZHggPiAwKSB7XG4gICAgICAgICAgICBidWZJZHggKz0gYnVmLndyaXRlKHRoaXMuYmFzZTY0QWNjdW0uc2xpY2UoMCwgdGhpcy5iYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcLy9nLCAnLCcpLnJlcGxhY2UoLz0rJC8sICcnKSwgYnVmSWR4KTtcbiAgICAgICAgICAgIHRoaXMuYmFzZTY0QWNjdW1JZHggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmW2J1ZklkeCsrXSA9IG1pbnVzQ2hhcjsgLy8gV3JpdGUgJy0nLCB0aGVuIGdvIHRvIGRpcmVjdCBtb2RlLlxuICAgICAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xufVxuXG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjdJTUFQRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xufVxuXG52YXIgYmFzZTY0SU1BUENoYXJzID0gYmFzZTY0Q2hhcnMuc2xpY2UoKTtcbmJhc2U2NElNQVBDaGFyc1snLCcuY2hhckNvZGVBdCgwKV0gPSB0cnVlO1xuXG5VdGY3SU1BUERlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIHJlcyA9IFwiXCIsIGxhc3RJID0gMCxcbiAgICAgICAgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW07XG5cbiAgICAvLyBUaGUgZGVjb2RlciBpcyBtb3JlIGludm9sdmVkIGFzIHdlIG11c3QgaGFuZGxlIGNodW5rcyBpbiBzdHJlYW0uXG4gICAgLy8gSXQgaXMgZm9yZ2l2aW5nLCBjbG9zZXIgdG8gc3RhbmRhcmQgVVRGLTcgKGZvciBleGFtcGxlLCAnLScgaXMgb3B0aW9uYWwgYXQgdGhlIGVuZCkuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWluQmFzZTY0KSB7IC8vIFdlJ3JlIGluIGRpcmVjdCBtb2RlLlxuICAgICAgICAgICAgLy8gV3JpdGUgZGlyZWN0IGNoYXJzIHVudGlsICcmJ1xuICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PSBhbmRDaGFyKSB7XG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSwgaSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICAgICAgICAgICAgICBsYXN0SSA9IGkrMTtcbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7IC8vIFdlIGRlY29kZSBiYXNlNjQuXG4gICAgICAgICAgICBpZiAoIWJhc2U2NElNQVBDaGFyc1tidWZbaV1dKSB7IC8vIEJhc2U2NCBlbmRlZC5cbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsYXN0SSAmJiBidWZbaV0gPT0gbWludXNDaGFyKSB7IC8vIFwiJi1cIiAtPiBcIiZcIlxuICAgICAgICAgICAgICAgICAgICByZXMgKz0gXCImXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGI2NHN0ciA9IGJhc2U2NEFjY3VtICsgYnVmLnNsaWNlKGxhc3RJLCBpKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywgJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKG5ldyBCdWZmZXIoYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPSBtaW51c0NoYXIpIC8vIE1pbnVzIG1heSBiZSBhYnNvcmJlZCBhZnRlciBiYXNlNjQuXG4gICAgICAgICAgICAgICAgICAgIGktLTtcblxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYmFzZTY0QWNjdW0gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyBidWYuc2xpY2UobGFzdEkpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCAnLycpO1xuXG4gICAgICAgIHZhciBjYW5CZURlY29kZWQgPSBiNjRzdHIubGVuZ3RoIC0gKGI2NHN0ci5sZW5ndGggJSA4KTsgLy8gTWluaW1hbCBjaHVuazogMiBxdWFkcyAtPiAyeDMgYnl0ZXMgLT4gMyBjaGFycy5cbiAgICAgICAgYmFzZTY0QWNjdW0gPSBiNjRzdHIuc2xpY2UoY2FuQmVEZWNvZGVkKTsgLy8gVGhlIHJlc3Qgd2lsbCBiZSBkZWNvZGVkIGluIGZ1dHVyZS5cbiAgICAgICAgYjY0c3RyID0gYjY0c3RyLnNsaWNlKDAsIGNhbkJlRGVjb2RlZCk7XG5cbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKG5ldyBCdWZmZXIoYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5pbkJhc2U2NCA9IGluQmFzZTY0O1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBiYXNlNjRBY2N1bTtcblxuICAgIHJldHVybiByZXM7XG59XG5cblV0ZjdJTUFQRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShuZXcgQnVmZmVyKHRoaXMuYmFzZTY0QWNjdW0sICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcblxuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gJyc7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdXRmNy5qc1xuLy8gbW9kdWxlIGlkID0gMTM4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoXCJidWZmZXJcIikuQnVmZmVyO1xuXG4vLyBTaW5nbGUtYnl0ZSBjb2RlYy4gTmVlZHMgYSAnY2hhcnMnIHN0cmluZyBwYXJhbWV0ZXIgdGhhdCBjb250YWlucyAyNTYgb3IgMTI4IGNoYXJzIHRoYXRcbi8vIGNvcnJlc3BvbmQgdG8gZW5jb2RlZCBieXRlcyAoaWYgMTI4IC0gdGhlbiBsb3dlciBoYWxmIGlzIEFTQ0lJKS4gXG5cbmV4cG9ydHMuX3NiY3MgPSBTQkNTQ29kZWM7XG5mdW5jdGlvbiBTQkNTQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIGlmICghY29kZWNPcHRpb25zKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLlwiKVxuICAgIFxuICAgIC8vIFByZXBhcmUgY2hhciBidWZmZXIgZm9yIGRlY29kaW5nLlxuICAgIGlmICghY29kZWNPcHRpb25zLmNoYXJzIHx8IChjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoICE9PSAxMjggJiYgY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aCAhPT0gMjU2KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiK2NvZGVjT3B0aW9ucy50eXBlK1wiJyBoYXMgaW5jb3JyZWN0ICdjaGFycycgKG11c3QgYmUgb2YgbGVuIDEyOCBvciAyNTYpXCIpO1xuICAgIFxuICAgIGlmIChjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoID09PSAxMjgpIHtcbiAgICAgICAgdmFyIGFzY2lpU3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMjg7IGkrKylcbiAgICAgICAgICAgIGFzY2lpU3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgIGNvZGVjT3B0aW9ucy5jaGFycyA9IGFzY2lpU3RyaW5nICsgY29kZWNPcHRpb25zLmNoYXJzO1xuICAgIH1cblxuICAgIHRoaXMuZGVjb2RlQnVmID0gbmV3IEJ1ZmZlcihjb2RlY09wdGlvbnMuY2hhcnMsICd1Y3MyJyk7XG4gICAgXG4gICAgLy8gRW5jb2RpbmcgYnVmZmVyLlxuICAgIHZhciBlbmNvZGVCdWYgPSBuZXcgQnVmZmVyKDY1NTM2KTtcbiAgICBlbmNvZGVCdWYuZmlsbChpY29udi5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGg7IGkrKylcbiAgICAgICAgZW5jb2RlQnVmW2NvZGVjT3B0aW9ucy5jaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7XG5cbiAgICB0aGlzLmVuY29kZUJ1ZiA9IGVuY29kZUJ1Zjtcbn1cblxuU0JDU0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gU0JDU0VuY29kZXI7XG5TQkNTQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBTQkNTRGVjb2RlcjtcblxuXG5mdW5jdGlvbiBTQkNTRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZW5jb2RlQnVmID0gY29kZWMuZW5jb2RlQnVmO1xufVxuXG5TQkNTRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzdHIubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcbiAgICAgICAgYnVmW2ldID0gdGhpcy5lbmNvZGVCdWZbc3RyLmNoYXJDb2RlQXQoaSldO1xuICAgIFxuICAgIHJldHVybiBidWY7XG59XG5cblNCQ1NFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG5mdW5jdGlvbiBTQkNTRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZGVjb2RlQnVmID0gY29kZWMuZGVjb2RlQnVmO1xufVxuXG5TQkNTRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICAvLyBTdHJpbmdzIGFyZSBpbW11dGFibGUgaW4gSlMgLT4gd2UgdXNlIHVjczIgYnVmZmVyIHRvIHNwZWVkIHVwIGNvbXB1dGF0aW9ucy5cbiAgICB2YXIgZGVjb2RlQnVmID0gdGhpcy5kZWNvZGVCdWY7XG4gICAgdmFyIG5ld0J1ZiA9IG5ldyBCdWZmZXIoYnVmLmxlbmd0aCoyKTtcbiAgICB2YXIgaWR4MSA9IDAsIGlkeDIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlkeDEgPSBidWZbaV0qMjsgaWR4MiA9IGkqMjtcbiAgICAgICAgbmV3QnVmW2lkeDJdID0gZGVjb2RlQnVmW2lkeDFdO1xuICAgICAgICBuZXdCdWZbaWR4MisxXSA9IGRlY29kZUJ1ZltpZHgxKzFdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QnVmLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblNCQ1NEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWNvZGVjLmpzXG4vLyBtb2R1bGUgaWQgPSAxMzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIE1hbnVhbGx5IGFkZGVkIGRhdGEgdG8gYmUgdXNlZCBieSBzYmNzIGNvZGVjIGluIGFkZGl0aW9uIHRvIGdlbmVyYXRlZCBvbmUuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIE5vdCBzdXBwb3J0ZWQgYnkgaWNvbnYsIG5vdCBzdXJlIHdoeS5cbiAgICBcIjEwMDI5XCI6IFwibWFjY2VudGV1cm9cIixcbiAgICBcIm1hY2NlbnRldXJvXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIsOExIDEgcOJxITDlsOcw6HEhcSMw6TEjcSGxIfDqcW5xbrEjsOtxI/EksSTxJbDs8SXw7TDtsO1w7rEmsSbw7zigKDCsMSYwqPCp+KAosK2w5/CrsKp4oSixJnCqOKJoMSjxK7Er8Sq4omk4omlxKvEtuKIguKIkcWCxLvEvMS9xL7EucS6xYXFhsWDwqziiJrFhMWH4oiGwqvCu+KApsKgxYjFkMOVxZHFjOKAk+KAlOKAnOKAneKAmOKAmcO34peKxY3FlMWVxZjigLnigLrFmcWWxZfFoOKAmuKAnsWhxZrFm8OBxaTFpcONxb3FvsWqw5PDlMWrxa7DmsWvxbDFscWyxbPDncO9xLfFu8WBxbzEosuHXCJcbiAgICB9LFxuXG4gICAgXCI4MDhcIjogXCJjcDgwOFwiLFxuICAgIFwiaWJtODA4XCI6IFwiY3A4MDhcIixcbiAgICBcImNwODA4XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgNGA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0IHRkdCE0ZTQh9GX0I7RnsKw4oiZwrfiiJrihJbigqzilqDCoFwiXG4gICAgfSxcblxuICAgIC8vIEFsaWFzZXMgb2YgZ2VuZXJhdGVkIGVuY29kaW5ncy5cbiAgICBcImFzY2lpOGJpdFwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c2FzY2lpXCI6IFwiYXNjaWlcIixcbiAgICBcImFuc2l4MzRcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5NjhcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5ODZcIjogXCJhc2NpaVwiLFxuICAgIFwiY3Nhc2NpaVwiOiBcImFzY2lpXCIsXG4gICAgXCJjcDM2N1wiOiBcImFzY2lpXCIsXG4gICAgXCJpYm0zNjdcIjogXCJhc2NpaVwiLFxuICAgIFwiaXNvaXI2XCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NnVzXCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NmlydlwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c1wiOiBcImFzY2lpXCIsXG5cbiAgICBcImxhdGluMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsYXRpbjJcIjogXCJpc284ODU5MlwiLFxuICAgIFwibGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImxhdGluNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsYXRpbjVcIjogXCJpc284ODU5OVwiLFxuICAgIFwibGF0aW42XCI6IFwiaXNvODg1OTEwXCIsXG4gICAgXCJsYXRpbjdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImxhdGluOFwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwibGF0aW45XCI6IFwiaXNvODg1OTE1XCIsXG4gICAgXCJsYXRpbjEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNzaXNvbGF0aW4xXCI6IFwiaXNvODg1OTFcIixcbiAgICBcImNzaXNvbGF0aW4yXCI6IFwiaXNvODg1OTJcIixcbiAgICBcImNzaXNvbGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImNzaXNvbGF0aW40XCI6IFwiaXNvODg1OTRcIixcbiAgICBcImNzaXNvbGF0aW5jeXJpbGxpY1wiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJjc2lzb2xhdGluYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImNzaXNvbGF0aW5ncmVla1wiIDogXCJpc284ODU5N1wiLFxuICAgIFwiY3Npc29sYXRpbmhlYnJld1wiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJjc2lzb2xhdGluNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJjc2lzb2xhdGluNlwiOiBcImlzbzg4NTkxMFwiLFxuXG4gICAgXCJsMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsMlwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJsM1wiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJsNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJsNlwiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwibDdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImw4XCI6IFwiaXNvODg1OTE0XCIsXG4gICAgXCJsOVwiOiBcImlzbzg4NTkxNVwiLFxuICAgIFwibDEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImlzb2lyMTRcIjogXCJpc282NDZqcFwiLFxuICAgIFwiaXNvaXI1N1wiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJpc29pcjEwMFwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJpc29pcjEwMVwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJpc29pcjEwOVwiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJpc29pcjExMFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJpc29pcjE0NFwiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJpc29pcjEyN1wiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJpc29pcjEyNlwiOiBcImlzbzg4NTk3XCIsXG4gICAgXCJpc29pcjEzOFwiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJpc29pcjE0OFwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJpc29pcjE1N1wiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwiaXNvaXIxNjZcIjogXCJ0aXM2MjBcIixcbiAgICBcImlzb2lyMTc5XCI6IFwiaXNvODg1OTEzXCIsXG4gICAgXCJpc29pcjE5OVwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwiaXNvaXIyMDNcIjogXCJpc284ODU5MTVcIixcbiAgICBcImlzb2lyMjI2XCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNwODE5XCI6IFwiaXNvODg1OTFcIixcbiAgICBcImlibTgxOVwiOiBcImlzbzg4NTkxXCIsXG5cbiAgICBcImN5cmlsbGljXCI6IFwiaXNvODg1OTVcIixcblxuICAgIFwiYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImFyYWJpYzhcIjogXCJpc284ODU5NlwiLFxuICAgIFwiZWNtYTExNFwiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJhc21vNzA4XCI6IFwiaXNvODg1OTZcIixcblxuICAgIFwiZ3JlZWtcIiA6IFwiaXNvODg1OTdcIixcbiAgICBcImdyZWVrOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWNtYTExOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWxvdDkyOFwiIDogXCJpc284ODU5N1wiLFxuXG4gICAgXCJoZWJyZXdcIjogXCJpc284ODU5OFwiLFxuICAgIFwiaGVicmV3OFwiOiBcImlzbzg4NTk4XCIsXG5cbiAgICBcInR1cmtpc2hcIjogXCJpc284ODU5OVwiLFxuICAgIFwidHVya2lzaDhcIjogXCJpc284ODU5OVwiLFxuXG4gICAgXCJ0aGFpXCI6IFwiaXNvODg1OTExXCIsXG4gICAgXCJ0aGFpOFwiOiBcImlzbzg4NTkxMVwiLFxuXG4gICAgXCJjZWx0aWNcIjogXCJpc284ODU5MTRcIixcbiAgICBcImNlbHRpYzhcIjogXCJpc284ODU5MTRcIixcbiAgICBcImlzb2NlbHRpY1wiOiBcImlzbzg4NTkxNFwiLFxuXG4gICAgXCJ0aXM2MjAwXCI6IFwidGlzNjIwXCIsXG4gICAgXCJ0aXM2MjAyNTI5MVwiOiBcInRpczYyMFwiLFxuICAgIFwidGlzNjIwMjUzMzBcIjogXCJ0aXM2MjBcIixcblxuICAgIFwiMTAwMDBcIjogXCJtYWNyb21hblwiLFxuICAgIFwiMTAwMDZcIjogXCJtYWNncmVla1wiLFxuICAgIFwiMTAwMDdcIjogXCJtYWNjeXJpbGxpY1wiLFxuICAgIFwiMTAwNzlcIjogXCJtYWNpY2VsYW5kXCIsXG4gICAgXCIxMDA4MVwiOiBcIm1hY3R1cmtpc2hcIixcblxuICAgIFwiY3NwYzhjb2RlcGFnZTQzN1wiOiBcImNwNDM3XCIsXG4gICAgXCJjc3BjNzc1YmFsdGljXCI6IFwiY3A3NzVcIixcbiAgICBcImNzcGM4NTBtdWx0aWxpbmd1YWxcIjogXCJjcDg1MFwiLFxuICAgIFwiY3NwY3A4NTJcIjogXCJjcDg1MlwiLFxuICAgIFwiY3NwYzg2MmxhdGluaGVicmV3XCI6IFwiY3A4NjJcIixcbiAgICBcImNwZ3JcIjogXCJjcDg2OVwiLFxuXG4gICAgXCJtc2VlXCI6IFwiY3AxMjUwXCIsXG4gICAgXCJtc2N5cmxcIjogXCJjcDEyNTFcIixcbiAgICBcIm1zYW5zaVwiOiBcImNwMTI1MlwiLFxuICAgIFwibXNncmVla1wiOiBcImNwMTI1M1wiLFxuICAgIFwibXN0dXJrXCI6IFwiY3AxMjU0XCIsXG4gICAgXCJtc2hlYnJcIjogXCJjcDEyNTVcIixcbiAgICBcIm1zYXJhYlwiOiBcImNwMTI1NlwiLFxuICAgIFwid2luYmFsdHJpbVwiOiBcImNwMTI1N1wiLFxuXG4gICAgXCJjcDIwODY2XCI6IFwia29pOHJcIixcbiAgICBcIjIwODY2XCI6IFwia29pOHJcIixcbiAgICBcImlibTg3OFwiOiBcImtvaThyXCIsXG4gICAgXCJjc2tvaThyXCI6IFwia29pOHJcIixcblxuICAgIFwiY3AyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCIyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCJpYm0xMTY4XCI6IFwia29pOHVcIixcblxuICAgIFwic3RyazEwNDgyMDAyXCI6IFwicmsxMDQ4XCIsXG5cbiAgICBcInRjdm41NzEyXCI6IFwidGN2blwiLFxuICAgIFwidGN2bjU3MTIxXCI6IFwidGN2blwiLFxuXG4gICAgXCJnYjE5ODg4MFwiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJjblwiOiBcImlzbzY0NmNuXCIsXG5cbiAgICBcImNzaXNvMTRqaXNjNjIyMHJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImppc2M2MjIwMTk2OXJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImpwXCI6IFwiaXNvNjQ2anBcIixcblxuICAgIFwiY3NocHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyb21hbjhcIjogXCJocHJvbWFuOFwiLFxuICAgIFwieHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJpYm0xMDUxXCI6IFwiaHByb21hbjhcIixcblxuICAgIFwibWFjXCI6IFwibWFjaW50b3NoXCIsXG4gICAgXCJjc21hY2ludG9zaFwiOiBcIm1hY2ludG9zaFwiLFxufTtcblxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3NiY3MtZGF0YS5qc1xuLy8gbW9kdWxlIGlkID0gMTQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBHZW5lcmF0ZWQgZGF0YSBmb3Igc2JjcyBjb2RlYy4gRG9uJ3QgZWRpdCBtYW51YWxseS4gUmVnZW5lcmF0ZSB1c2luZyBnZW5lcmF0aW9uL2dlbi1zYmNzLmpzIHNjcmlwdC5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBcIjQzN1wiOiBcImNwNDM3XCIsXG4gIFwiNzM3XCI6IFwiY3A3MzdcIixcbiAgXCI3NzVcIjogXCJjcDc3NVwiLFxuICBcIjg1MFwiOiBcImNwODUwXCIsXG4gIFwiODUyXCI6IFwiY3A4NTJcIixcbiAgXCI4NTVcIjogXCJjcDg1NVwiLFxuICBcIjg1NlwiOiBcImNwODU2XCIsXG4gIFwiODU3XCI6IFwiY3A4NTdcIixcbiAgXCI4NThcIjogXCJjcDg1OFwiLFxuICBcIjg2MFwiOiBcImNwODYwXCIsXG4gIFwiODYxXCI6IFwiY3A4NjFcIixcbiAgXCI4NjJcIjogXCJjcDg2MlwiLFxuICBcIjg2M1wiOiBcImNwODYzXCIsXG4gIFwiODY0XCI6IFwiY3A4NjRcIixcbiAgXCI4NjVcIjogXCJjcDg2NVwiLFxuICBcIjg2NlwiOiBcImNwODY2XCIsXG4gIFwiODY5XCI6IFwiY3A4NjlcIixcbiAgXCI4NzRcIjogXCJ3aW5kb3dzODc0XCIsXG4gIFwiOTIyXCI6IFwiY3A5MjJcIixcbiAgXCIxMDQ2XCI6IFwiY3AxMDQ2XCIsXG4gIFwiMTEyNFwiOiBcImNwMTEyNFwiLFxuICBcIjExMjVcIjogXCJjcDExMjVcIixcbiAgXCIxMTI5XCI6IFwiY3AxMTI5XCIsXG4gIFwiMTEzM1wiOiBcImNwMTEzM1wiLFxuICBcIjExNjFcIjogXCJjcDExNjFcIixcbiAgXCIxMTYyXCI6IFwiY3AxMTYyXCIsXG4gIFwiMTE2M1wiOiBcImNwMTE2M1wiLFxuICBcIjEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICBcIjEyNTFcIjogXCJ3aW5kb3dzMTI1MVwiLFxuICBcIjEyNTJcIjogXCJ3aW5kb3dzMTI1MlwiLFxuICBcIjEyNTNcIjogXCJ3aW5kb3dzMTI1M1wiLFxuICBcIjEyNTRcIjogXCJ3aW5kb3dzMTI1NFwiLFxuICBcIjEyNTVcIjogXCJ3aW5kb3dzMTI1NVwiLFxuICBcIjEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICBcIjEyNTdcIjogXCJ3aW5kb3dzMTI1N1wiLFxuICBcIjEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICBcIjI4NTkxXCI6IFwiaXNvODg1OTFcIixcbiAgXCIyODU5MlwiOiBcImlzbzg4NTkyXCIsXG4gIFwiMjg1OTNcIjogXCJpc284ODU5M1wiLFxuICBcIjI4NTk0XCI6IFwiaXNvODg1OTRcIixcbiAgXCIyODU5NVwiOiBcImlzbzg4NTk1XCIsXG4gIFwiMjg1OTZcIjogXCJpc284ODU5NlwiLFxuICBcIjI4NTk3XCI6IFwiaXNvODg1OTdcIixcbiAgXCIyODU5OFwiOiBcImlzbzg4NTk4XCIsXG4gIFwiMjg1OTlcIjogXCJpc284ODU5OVwiLFxuICBcIjI4NjAwXCI6IFwiaXNvODg1OTEwXCIsXG4gIFwiMjg2MDFcIjogXCJpc284ODU5MTFcIixcbiAgXCIyODYwM1wiOiBcImlzbzg4NTkxM1wiLFxuICBcIjI4NjA0XCI6IFwiaXNvODg1OTE0XCIsXG4gIFwiMjg2MDVcIjogXCJpc284ODU5MTVcIixcbiAgXCIyODYwNlwiOiBcImlzbzg4NTkxNlwiLFxuICBcIndpbmRvd3M4NzRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/ve+/ve+/ve+/veKApu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vcKg4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677+977+977+977+94Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4Lmb77+977+977+977+9XCJcbiAgfSxcbiAgXCJ3aW44NzRcIjogXCJ3aW5kb3dzODc0XCIsXG4gIFwiY3A4NzRcIjogXCJ3aW5kb3dzODc0XCIsXG4gIFwid2luZG93czEyNTBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmu+/veKAnuKApuKAoOKAoe+/veKAsMWg4oC5xZrFpMW9xbnvv73igJjigJnigJzigJ3igKLigJPigJTvv73ihKLFoeKAusWbxaXFvsW6wqDLh8uYxYHCpMSEwqbCp8KowqnFnsKrwqzCrcKuxbvCsMKxy5vFgsK0wrXCtsK3wrjEhcWfwrvEvcudxL7FvMWUw4HDgsSCw4TEucSGw4fEjMOJxJjDi8Saw43DjsSOxJDFg8WHw5PDlMWQw5bDl8WYxa7DmsWww5zDncWiw5/FlcOhw6LEg8OkxLrEh8OnxI3DqcSZw6vEm8Otw67Ej8SRxYTFiMOzw7TFkcO2w7fFmcWvw7rFscO8w73Fo8uZXCJcbiAgfSxcbiAgXCJ3aW4xMjUwXCI6IFwid2luZG93czEyNTBcIixcbiAgXCJjcDEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICBcIndpbmRvd3MxMjUxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQgtCD4oCa0ZPigJ7igKbigKDigKHigqzigLDQieKAudCK0IzQi9CP0ZLigJjigJnigJzigJ3igKLigJPigJTvv73ihKLRmeKAutGa0ZzRm9GfwqDQjtGe0IjCpNKQwqbCp9CBwqnQhMKrwqzCrcKu0IfCsMKx0IbRltKRwrXCtsK30ZHihJbRlMK70ZjQhdGV0ZfQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj1wiXG4gIH0sXG4gIFwid2luMTI1MVwiOiBcIndpbmRvd3MxMjUxXCIsXG4gIFwiY3AxMjUxXCI6IFwid2luZG93czEyNTFcIixcbiAgXCJ3aW5kb3dzMTI1MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHLhuKAsMWg4oC5xZLvv73Fve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSixaHigLrFk++/vcW+xbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcIndpbjEyNTJcIjogXCJ3aW5kb3dzMTI1MlwiLFxuICBcImNwMTI1MlwiOiBcIndpbmRvd3MxMjUyXCIsXG4gIFwid2luZG93czEyNTNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmsaS4oCe4oCm4oCg4oCh77+94oCw77+94oC577+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi77+94oC677+977+977+977+9wqDOhc6GwqPCpMKlwqbCp8Kowqnvv73Cq8Kswq3CruKAlcKwwrHCssKzzoTCtcK2wrfOiM6JzorCu86Mwr3Ojs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6h77+9zqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz43Pju+/vVwiXG4gIH0sXG4gIFwid2luMTI1M1wiOiBcIndpbmRvd3MxMjUzXCIsXG4gIFwiY3AxMjUzXCI6IFwid2luZG93czEyNTNcIixcbiAgXCJ3aW5kb3dzMTI1NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHLhuKAsMWg4oC5xZLvv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTLnOKEosWh4oC6xZPvv73vv73FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8Sew5HDksOTw5TDlcOWw5fDmMOZw5rDm8OcxLDFnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/En8Oxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMSxxZ/Dv1wiXG4gIH0sXG4gIFwid2luMTI1NFwiOiBcIndpbmRvd3MxMjU0XCIsXG4gIFwiY3AxMjU0XCI6IFwid2luZG93czEyNTRcIixcbiAgXCJ3aW5kb3dzMTI1NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHLhuKAsO+/veKAue+/ve+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSi77+94oC677+977+977+977+9wqDCocKiwqPigqrCpcKmwqfCqMKpw5fCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnDt8K7wrzCvcK+wr/WsNax1rLWs9a01rXWtta31rjWuda61rvWvNa91r7Wv9eA14HXgteD17DXsdey17PXtO+/ve+/ve+/ve+/ve+/ve+/ve+/vdeQ15HXkteT15TXldeW15fXmNeZ15rXm9ec153Xntef16DXodei16PXpNel16bXp9eo16nXqu+/ve+/veKAjuKAj++/vVwiXG4gIH0sXG4gIFwid2luMTI1NVwiOiBcIndpbmRvd3MxMjU1XCIsXG4gIFwiY3AxMjU1XCI6IFwid2luZG93czEyNTVcIixcbiAgXCJ3aW5kb3dzMTI1NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs2b7igJrGkuKAnuKApuKAoOKAocuG4oCw2bnigLnFktqG2pjaiNqv4oCY4oCZ4oCc4oCd4oCi4oCT4oCU2qnihKLakeKAusWT4oCM4oCN2rrCoNiMwqLCo8KkwqXCpsKnwqjCqdq+wqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK52JvCu8K8wr3Cvtif24HYodii2KPYpNil2KbYp9io2KnYqtir2KzYrdiu2K/YsNix2LLYs9i02LXYtsOX2LfYuNi52LrZgNmB2YLZg8Og2YTDotmF2YbZh9mIw6fDqMOpw6rDq9mJ2YrDrsOv2YvZjNmN2Y7DtNmP2ZDDt9mRw7nZksO7w7zigI7igI/bklwiXG4gIH0sXG4gIFwid2luMTI1NlwiOiBcIndpbmRvd3MxMjU2XCIsXG4gIFwiY3AxMjU2XCI6IFwid2luZG93czEyNTZcIixcbiAgXCJ3aW5kb3dzMTI1N1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCa77+94oCe4oCm4oCg4oCh77+94oCw77+94oC577+9wqjLh8K477+94oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi77+94oC677+9wq/Lm++/vcKg77+9wqLCo8Kk77+9wqbCp8OYwqnFlsKrwqzCrcKuw4bCsMKxwrLCs8K0wrXCtsK3w7jCucWXwrvCvMK9wr7DpsSExK7EgMSGw4TDhcSYxJLEjMOJxbnElsSixLbEqsS7xaDFg8WFw5PFjMOVw5bDl8WyxYHFmsWqw5zFu8W9w5/EhcSvxIHEh8Okw6XEmcSTxI3DqcW6xJfEo8S3xKvEvMWhxYTFhsOzxY3DtcO2w7fFs8WCxZvFq8O8xbzFvsuZXCJcbiAgfSxcbiAgXCJ3aW4xMjU3XCI6IFwid2luZG93czEyNTdcIixcbiAgXCJjcDEyNTdcIjogXCJ3aW5kb3dzMTI1N1wiLFxuICBcIndpbmRvd3MxMjU4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCw77+94oC5xZLvv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTLnOKEou+/veKAusWT77+977+9xbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCxILDhMOFw4bDh8OIw4nDisOLzIDDjcOOw4/EkMORzInDk8OUxqDDlsOXw5jDmcOaw5vDnMavzIPDn8Ogw6HDosSDw6TDpcOmw6fDqMOpw6rDq8yBw63DrsOvxJHDscyjw7PDtMahw7bDt8O4w7nDusO7w7zGsOKCq8O/XCJcbiAgfSxcbiAgXCJ3aW4xMjU4XCI6IFwid2luZG93czEyNThcIixcbiAgXCJjcDEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICBcImlzbzg4NTkxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/XCJcbiAgfSxcbiAgXCJjcDI4NTkxXCI6IFwiaXNvODg1OTFcIixcbiAgXCJpc284ODU5MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxITLmMWBwqTEvcWawqfCqMWgxZ7FpMW5wq3FvcW7wrDEhcubxYLCtMS+xZvLh8K4xaHFn8WlxbrLncW+xbzFlMOBw4LEgsOExLnEhsOHxIzDicSYw4vEmsONw47EjsSQxYPFh8OTw5TFkMOWw5fFmMWuw5rFsMOcw53FosOfxZXDocOixIPDpMS6xIfDp8SNw6nEmcOrxJvDrcOuxI/EkcWExYjDs8O0xZHDtsO3xZnFr8O6xbHDvMO9xaPLmVwiXG4gIH0sXG4gIFwiY3AyODU5MlwiOiBcImlzbzg4NTkyXCIsXG4gIFwiaXNvODg1OTNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSmy5jCo8Kk77+9xKTCp8KoxLDFnsSexLTCre+/vcW7wrDEp8KywrPCtMK1xKXCt8K4xLHFn8SfxLXCve+/vcW8w4DDgcOC77+9w4TEisSIw4fDiMOJw4rDi8OMw43DjsOP77+9w5HDksOTw5TEoMOWw5fEnMOZw5rDm8OcxazFnMOfw6DDocOi77+9w6TEi8SJw6fDqMOpw6rDq8Osw63DrsOv77+9w7HDssOzw7TEocO2w7fEncO5w7rDu8O8xa3FncuZXCJcbiAgfSxcbiAgXCJjcDI4NTkzXCI6IFwiaXNvODg1OTNcIixcbiAgXCJpc284ODU5NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxITEuMWWwqTEqMS7wqfCqMWgxJLEosWmwq3FvcKvwrDEhcubxZfCtMSpxLzLh8K4xaHEk8SjxafFisW+xYvEgMOBw4LDg8OEw4XDhsSuxIzDicSYw4vElsONw47EqsSQxYXFjMS2w5TDlcOWw5fDmMWyw5rDm8OcxajFqsOfxIHDocOiw6PDpMOlw6bEr8SNw6nEmcOrxJfDrcOuxKvEkcWGxY3Et8O0w7XDtsO3w7jFs8O6w7vDvMWpxavLmVwiXG4gIH0sXG4gIFwiY3AyODU5NFwiOiBcImlzbzg4NTk0XCIsXG4gIFwiaXNvODg1OTVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoNCB0ILQg9CE0IXQhtCH0IjQidCK0IvQjMKt0I7Qj9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP4oSW0ZHRktGT0ZTRldGW0ZfRmNGZ0ZrRm9GcwqfRntGfXCJcbiAgfSxcbiAgXCJjcDI4NTk1XCI6IFwiaXNvODg1OTVcIixcbiAgXCJpc284ODU5NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg77+977+977+9wqTvv73vv73vv73vv73vv73vv73vv73YjMKt77+977+977+977+977+977+977+977+977+977+977+977+977+92Jvvv73vv73vv73Yn++/vdih2KLYo9ik2KXYptin2KjYqdiq2KvYrNit2K7Yr9iw2LHYstiz2LTYtdi22LfYuNi52Lrvv73vv73vv73vv73vv73ZgNmB2YLZg9mE2YXZhtmH2YjZidmK2YvZjNmN2Y7Zj9mQ2ZHZku+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwiY3AyODU5NlwiOiBcImlzbzg4NTk2XCIsXG4gIFwiaXNvODg1OTdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOKAmOKAmcKj4oKs4oKvwqbCp8KowqnNusKrwqzCre+/veKAlcKwwrHCssKzzoTOhc6GwrfOiM6JzorCu86Mwr3Ojs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6h77+9zqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz43Pju+/vVwiXG4gIH0sXG4gIFwiY3AyODU5N1wiOiBcImlzbzg4NTk3XCIsXG4gIFwiaXNvODg1OThcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoO+/vcKiwqPCpMKlwqbCp8KowqnDl8KrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucO3wrvCvMK9wr7vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73igJfXkNeR15LXk9eU15XXlteX15jXmdea15vXnNed157Xn9eg16HXotej16TXpdem16fXqNep16rvv73vv73igI7igI/vv71cIlxuICB9LFxuICBcImNwMjg1OThcIjogXCJpc284ODU5OFwiLFxuICBcImlzbzg4NTk5XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPxJ7DkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zEsMWew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Sfw7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8xLHFn8O/XCJcbiAgfSxcbiAgXCJjcDI4NTk5XCI6IFwiaXNvODg1OTlcIixcbiAgXCJpc284ODU5MTBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSExJLEosSqxKjEtsKnxLvEkMWgxabFvcKtxarFisKwxIXEk8SjxKvEqcS3wrfEvMSRxaHFp8W+4oCVxavFi8SAw4HDgsODw4TDhcOGxK7EjMOJxJjDi8SWw43DjsOPw5DFhcWMw5PDlMOVw5bFqMOYxbLDmsObw5zDncOew5/EgcOhw6LDo8Okw6XDpsSvxI3DqcSZw6vEl8Otw67Dr8OwxYbFjcOzw7TDtcO2xanDuMWzw7rDu8O8w73DvsS4XCJcbiAgfSxcbiAgXCJjcDI4NjAwXCI6IFwiaXNvODg1OTEwXCIsXG4gIFwiaXNvODg1OTExXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvv73vv73vv73vv73guL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvvv73vv73vv73vv71cIlxuICB9LFxuICBcImNwMjg2MDFcIjogXCJpc284ODU5MTFcIixcbiAgXCJpc284ODU5MTNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOKAncKiwqPCpOKAnsKmwqfDmMKpxZbCq8Kswq3CrsOGwrDCscKywrPigJzCtcK2wrfDuMK5xZfCu8K8wr3CvsOmxITErsSAxIbDhMOFxJjEksSMw4nFucSWxKLEtsSqxLvFoMWDxYXDk8WMw5XDlsOXxbLFgcWaxarDnMW7xb3Dn8SFxK/EgcSHw6TDpcSZxJPEjcOpxbrEl8SjxLfEq8S8xaHFhMWGw7PFjcO1w7bDt8WzxYLFm8Wrw7zFvMW+4oCZXCJcbiAgfSxcbiAgXCJjcDI4NjAzXCI6IFwiaXNvODg1OTEzXCIsXG4gIFwiaXNvODg1OTE0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDhuILhuIPCo8SKxIvhuIrCp+G6gMKp4bqC4biL4buywq3CrsW44bie4bifxKDEoeG5gOG5gcK24bmW4bqB4bmX4bqD4bmg4buz4bqE4bqF4bmhw4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/FtMORw5LDk8OUw5XDluG5qsOYw5nDmsObw5zDncW2w5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8W1w7HDssOzw7TDtcO24bmrw7jDucO6w7vDvMO9xbfDv1wiXG4gIH0sXG4gIFwiY3AyODYwNFwiOiBcImlzbzg4NTkxNFwiLFxuICBcImlzbzg4NTkxNVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKj4oKswqXFoMKnxaHCqcKqwqvCrMKtwq7Cr8KwwrHCssKzxb3CtcK2wrfFvsK5wrrCu8WSxZPFuMK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcImNwMjg2MDVcIjogXCJpc284ODU5MTVcIixcbiAgXCJpc284ODU5MTZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSExIXFgeKCrOKAnsWgwqfFocKpyJjCq8W5wq3FusW7wrDCscSMxYLFveKAncK2wrfFvsSNyJnCu8WSxZPFuMW8w4DDgcOCxILDhMSGw4bDh8OIw4nDisOLw4zDjcOOw4/EkMWDw5LDk8OUxZDDlsWaxbDDmcOaw5vDnMSYyJrDn8Ogw6HDosSDw6TEh8Omw6fDqMOpw6rDq8Osw63DrsOvxJHFhMOyw7PDtMWRw7bFm8Wxw7nDusO7w7zEmcibw79cIlxuICB9LFxuICBcImNwMjg2MDZcIjogXCJpc284ODU5MTZcIixcbiAgXCJjcDQzN1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcwqLCo8Kl4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm00MzdcIjogXCJjcDQzN1wiLFxuICBcImNzaWJtNDM3XCI6IFwiY3A0MzdcIixcbiAgXCJjcDczN1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwizpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4LPhM+Fz4bPh8+I4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAz4nOrM6tzq7Pis6vz4zPjc+Lz47Ohs6IzonOis6Mzo7Oj8Kx4oml4omkzqrOq8O34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTczN1wiOiBcImNwNzM3XCIsXG4gIFwiY3NpYm03MzdcIjogXCJjcDczN1wiLFxuICBcImNwNzc1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLEhsO8w6nEgcOkxKPDpcSHxYLEk8WWxZfEq8W5w4TDhcOJw6bDhsWNw7bEosKixZrFm8OWw5zDuMKjw5jDl8KkxIDEqsOzxbvFvMW64oCdwqbCqcKuwqzCvcK8xYHCq8K74paR4paS4paT4pSC4pSkxITEjMSYxJbilaPilZHilZfilZ3ErsWg4pSQ4pSU4pS04pSs4pSc4pSA4pS8xbLFquKVmuKVlOKVqeKVpuKVoOKVkOKVrMW9xIXEjcSZxJfEr8WhxbPFq8W+4pSY4pSM4paI4paE4paM4paQ4paAw5PDn8WMxYPDtcOVwrXFhMS2xLfEu8S8xYbEksWF4oCZwq3CseKAnMK+wrbCp8O34oCewrDiiJnCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm03NzVcIjogXCJjcDc3NVwiLFxuICBcImNzaWJtNzc1XCI6IFwiY3A3NzVcIixcbiAgXCJjcDg1MFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcw7jCo8OYw5fGksOhw63Ds8O6w7HDkcKqwrrCv8KuwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSkw4HDgsOAwqnilaPilZHilZfilZ3CosKl4pSQ4pSU4pS04pSs4pSc4pSA4pS8w6PDg+KVmuKVlOKVqeKVpuKVoOKVkOKVrMKkw7DDkMOKw4vDiMSxw43DjsOP4pSY4pSM4paI4paEwqbDjOKWgMOTw5/DlMOSw7XDlcK1w77DnsOaw5vDmcO9w53Cr8K0wq3CseKAl8K+wrbCp8O3wrjCsMKowrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODUwXCI6IFwiY3A4NTBcIixcbiAgXCJjc2libTg1MFwiOiBcImNwODUwXCIsXG4gIFwiY3A4NTJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TFr8SHw6fFgsOrxZDFkcOuxbnDhMSGw4nEucS6w7TDtsS9xL7FmsWbw5bDnMWkxaXFgcOXxI3DocOtw7PDusSExIXFvcW+xJjEmcKsxbrEjMWfwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LEmsWe4pWj4pWR4pWX4pWdxbvFvOKUkOKUlOKUtOKUrOKUnOKUgOKUvMSCxIPilZrilZTilanilabilaDilZDilazCpMSRxJDEjsOLxI/Fh8ONw47Em+KUmOKUjOKWiOKWhMWixa7iloDDk8Ofw5TFg8WExYjFoMWhxZTDmsWVxbDDvcOdxaPCtMKty53Lm8uHy5jCp8O3wrjCsMKoy5nFscWYxZnilqDCoFwiXG4gIH0sXG4gIFwiaWJtODUyXCI6IFwiY3A4NTJcIixcbiAgXCJjc2libTg1MlwiOiBcImNwODUyXCIsXG4gIFwiY3A4NTVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItGS0ILRk9CD0ZHQgdGU0ITRldCF0ZbQhtGX0IfRmNCI0ZnQidGa0IrRm9CL0ZzQjNGe0I7Rn9CP0Y7QrtGK0KrQsNCQ0LHQkdGG0KbQtNCU0LXQldGE0KTQs9CTwqvCu+KWkeKWkuKWk+KUguKUpNGF0KXQuNCY4pWj4pWR4pWX4pWd0LnQmeKUkOKUlOKUtOKUrOKUnOKUgOKUvNC60JrilZrilZTilanilabilaDilZDilazCpNC70JvQvNCc0L3QndC+0J7Qv+KUmOKUjOKWiOKWhNCf0Y/iloDQr9GA0KDRgdCh0YLQotGD0KPQttCW0LLQktGM0KzihJbCrdGL0KvQt9CX0YjQqNGN0K3RidCp0YfQp8Kn4pagwqBcIlxuICB9LFxuICBcImlibTg1NVwiOiBcImNwODU1XCIsXG4gIFwiY3NpYm04NTVcIjogXCJjcDg1NVwiLFxuICBcImNwODU2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLXkNeR15LXk9eU15XXlteX15jXmdea15vXnNed157Xn9eg16HXotej16TXpdem16fXqNep16rvv73Co++/vcOX77+977+977+977+977+977+977+977+977+977+9wq7CrMK9wrzvv73Cq8K74paR4paS4paT4pSC4pSk77+977+977+9wqnilaPilZHilZfilZ3CosKl4pSQ4pSU4pS04pSs4pSc4pSA4pS877+977+94pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTvv73vv73vv73vv73vv73vv73vv73vv73vv73ilJjilIzilojiloTCpu+/veKWgO+/ve+/ve+/ve+/ve+/ve+/vcK177+977+977+977+977+977+977+9wq/CtMKtwrHigJfCvsK2wqfDt8K4wrDCqMK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg1NlwiOiBcImNwODU2XCIsXG4gIFwiY3NpYm04NTZcIjogXCJjcDg1NlwiLFxuICBcImNwODU3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsSxw4TDhcOJw6bDhsO0w7bDssO7w7nEsMOWw5zDuMKjw5jFnsWfw6HDrcOzw7rDscORxJ7En8K/wq7CrMK9wrzCocKrwrvilpHilpLilpPilILilKTDgcOCw4DCqeKVo+KVkeKVl+KVncKiwqXilJDilJTilLTilKzilJzilIDilLzDo8OD4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTCusKqw4rDi8OI77+9w43DjsOP4pSY4pSM4paI4paEwqbDjOKWgMOTw5/DlMOSw7XDlcK177+9w5fDmsObw5nDrMO/wq/CtMKtwrHvv73CvsK2wqfDt8K4wrDCqMK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg1N1wiOiBcImNwODU3XCIsXG4gIFwiY3NpYm04NTdcIjogXCJjcDg1N1wiLFxuICBcImNwODU4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zDuMKjw5jDl8aSw6HDrcOzw7rDscORwqrCusK/wq7CrMK9wrzCocKrwrvilpHilpLilpPilILilKTDgcOCw4DCqeKVo+KVkeKVl+KVncKiwqXilJDilJTilLTilKzilJzilIDilLzDo8OD4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTDsMOQw4rDi8OI4oKsw43DjsOP4pSY4pSM4paI4paEwqbDjOKWgMOTw5/DlMOSw7XDlcK1w77DnsOaw5vDmcO9w53Cr8K0wq3CseKAl8K+wrbCp8O3wrjCsMKowrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODU4XCI6IFwiY3A4NThcIixcbiAgXCJjc2libTg1OFwiOiBcImNwODU4XCIsXG4gIFwiY3A4NjBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6PDoMOBw6fDqsOKw6jDjcOUw6zDg8OCw4nDgMOIw7TDtcOyw5rDucOMw5XDnMKiwqPDmeKCp8OTw6HDrcOzw7rDscORwqrCusK/w5LCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjBcIjogXCJjcDg2MFwiLFxuICBcImNzaWJtODYwXCI6IFwiY3A4NjBcIixcbiAgXCJjcDg2MVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOQw7DDnsOEw4XDicOmw4bDtMO2w77Du8Odw73DlsOcw7jCo8OY4oKnxpLDocOtw7PDusOBw43Dk8Oawr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjFcIjogXCJjcDg2MVwiLFxuICBcImNzaWJtODYxXCI6IFwiY3A4NjFcIixcbiAgXCJjcDg2MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi15DXkdeS15PXlNeV15bXl9eY15nXmteb15zXndee15/XoNeh16LXo9ek16XXpten16jXqdeqwqLCo8Kl4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjJcIjogXCJjcDg2MlwiLFxuICBcImNzaWJtODYyXCI6IFwiY3A4NjJcIixcbiAgXCJjcDg2M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDgsOgwrbDp8Oqw6vDqMOvw67igJfDgMKnw4nDiMOKw7TDi8OPw7vDucKkw5TDnMKiwqPDmcObxpLCpsK0w7PDusKowrjCs8Kvw47ijJDCrMK9wrzCvsKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjNcIjogXCJjcDg2M1wiLFxuICBcImNzaWJtODYzXCI6IFwiY3A4NjNcIixcbiAgXCJjcDg2NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyTZqiYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8KwwrfiiJniiJrilpLilIDilILilLzilKTilKzilJzilLTilJDilIzilJTilJjOsuKIns+GwrHCvcK84omIwqvCu++7t++7uO+/ve+/ve+7u++7vO+/vcKgwq3vuoLCo8Kk77qE77+977+977qO77qP77qV77qZ2Izvup3vuqHvuqXZoNmh2aLZo9mk2aXZptmn2ajZqe+7kdib77qx77q177q52J/Cou+6gO+6ge+6g++6he+7iu+6i++6je+6ke+6k++6l++6m++6n++6o++6p++6qe+6q++6re+6r++6s++6t++6u++6v++7ge+7he+7i++7j8KmwqzDt8OX77uJ2YDvu5Pvu5fvu5vvu5/vu6Pvu6fvu6vvu63vu6/vu7Pvur3vu4zvu47vu43vu6Hvub3Zke+7pe+7qe+7rO+7sO+7su+7kO+7le+7te+7tu+7ne+7me+7seKWoO+/vVwiXG4gIH0sXG4gIFwiaWJtODY0XCI6IFwiY3A4NjRcIixcbiAgXCJjc2libTg2NFwiOiBcImNwODY0XCIsXG4gIFwiY3A4NjVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMO4wqPDmOKCp8aSw6HDrcOzw7rDscORwqrCusK/4oyQwqzCvcK8wqHCq8Kk4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODY1XCI6IFwiY3A4NjVcIixcbiAgXCJjc2libTg2NVwiOiBcImNwODY1XCIsXG4gIFwiY3A4NjZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgNGA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0IHRkdCE0ZTQh9GX0I7RnsKw4oiZwrfiiJrihJbCpOKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjZcIjogXCJjcDg2NlwiLFxuICBcImNzaWJtODY2XCI6IFwiY3A4NjZcIixcbiAgXCJjcDg2OVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77+977+977+977+977+977+9zobvv73Ct8KswqbigJjigJnOiOKAlc6JzorOqs6M77+977+9zo7Oq8Kpzo/CssKzzqzCo86tzq7Or8+KzpDPjM+NzpHOks6TzpTOlc6WzpfCvc6YzpnCq8K74paR4paS4paT4pSC4pSkzprOm86czp3ilaPilZHilZfilZ3Ons6f4pSQ4pSU4pS04pSs4pSc4pSA4pS8zqDOoeKVmuKVlOKVqeKVpuKVoOKVkOKVrM6jzqTOpc6mzqfOqM6pzrHOss6z4pSY4pSM4paI4paEzrTOteKWgM62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4LPhM6Ewq3Csc+Fz4bPh8Knz4jOhcKwwqjPic+LzrDPjuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjlcIjogXCJjcDg2OVwiLFxuICBcImNzaWJtODY5XCI6IFwiY3A4NjlcIixcbiAgXCJjcDkyMlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CruKAvsKwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/FoMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdxb3Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvxaHDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcW+w79cIlxuICB9LFxuICBcImlibTkyMlwiOiBcImNwOTIyXCIsXG4gIFwiY3NpYm05MjJcIjogXCJjcDkyMlwiLFxuICBcImNwMTA0NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77qIw5fDt++jtu+jte+jtO+jt++5scKI4pag4pSC4pSA4pSQ4pSM4pSU4pSY77m577m777m977m/77m377qK77uw77uz77uy77uO77uP77uQ77u277u477u677u8wqDvo7rvo7nvo7jCpO+ju++6i++6ke+6l++6m++6n++6o9iMwq3vuqfvurPZoNmh2aLZo9mk2aXZptmn2ajZqe+6t9ib77q777q/77uK2J/vu4vYodii2KPYpNil2KbYp9io2KnYqtir2KzYrdiu2K/YsNix2LLYs9i02LXYtti377uH2LnYuu+7jO+6gu+6hO+6ju+7k9mA2YHZgtmD2YTZhdmG2YfZiNmJ2YrZi9mM2Y3ZjtmP2ZDZkdmS77uX77ub77uf76O877u177u377u577u777uj77un77us77up77+9XCJcbiAgfSxcbiAgXCJpYm0xMDQ2XCI6IFwiY3AxMDQ2XCIsXG4gIFwiY3NpYm0xMDQ2XCI6IFwiY3AxMDQ2XCIsXG4gIFwiY3AxMTI0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDQgdCC0pDQhNCF0IbQh9CI0InQitCL0IzCrdCO0I/QkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj+KEltGR0ZLSkdGU0ZXRltGX0ZjRmdGa0ZvRnMKn0Z7Rn1wiXG4gIH0sXG4gIFwiaWJtMTEyNFwiOiBcImNwMTEyNFwiLFxuICBcImNzaWJtMTEyNFwiOiBcImNwMTEyNFwiLFxuICBcImNwMTEyNVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paA0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/QgdGR0pDSkdCE0ZTQhtGW0IfRl8K34oia4oSWwqTilqDCoFwiXG4gIH0sXG4gIFwiaWJtMTEyNVwiOiBcImNwMTEyNVwiLFxuICBcImNzaWJtMTEyNVwiOiBcImNwMTEyNVwiLFxuICBcImNwMTEyOVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfFk8KpwqrCq8Kswq3CrsKvwrDCscKywrPFuMK1wrbCt8WSwrnCusK7wrzCvcK+wr/DgMOBw4LEgsOEw4XDhsOHw4jDicOKw4vMgMONw47Dj8SQw5HMicOTw5TGoMOWw5fDmMOZw5rDm8Ocxq/Mg8Ofw6DDocOixIPDpMOlw6bDp8Oow6nDqsOrzIHDrcOuw6/EkcOxzKPDs8O0xqHDtsO3w7jDucO6w7vDvMaw4oKrw79cIlxuICB9LFxuICBcImlibTExMjlcIjogXCJjcDExMjlcIixcbiAgXCJjc2libTExMjlcIjogXCJjcDExMjlcIixcbiAgXCJjcDExMzNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOC6geC6guC6hOC6h+C6iOC6quC6iuC6jeC6lOC6leC6luC6l+C6meC6muC6m+C6nOC6neC6nuC6n+C6oeC6ouC6o+C6peC6p+C6q+C6reC6ru+/ve+/ve+/veC6r+C6sOC6suC6s+C6tOC6teC6tuC6t+C6uOC6ueC6vOC6seC6u+C6ve+/ve+/ve+/veC7gOC7geC7guC7g+C7hOC7iOC7ieC7iuC7i+C7jOC7jeC7hu+/veC7nOC7neKCre+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veC7kOC7keC7kuC7k+C7lOC7leC7luC7l+C7mOC7me+/ve+/vcKiwqzCpu+/vVwiXG4gIH0sXG4gIFwiaWJtMTEzM1wiOiBcImNwMTEzM1wiLFxuICBcImNzaWJtMTEzM1wiOiBcImNwMTEzM1wiLFxuICBcImNwMTE2MVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77+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+94LmI4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li64LmJ4LmK4LmL4oKs4Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4LmbwqLCrMKmwqBcIlxuICB9LFxuICBcImlibTExNjFcIjogXCJjcDExNjFcIixcbiAgXCJjc2libTExNjFcIjogXCJjcDExNjFcIixcbiAgXCJjcDExNjJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrMKBwoLCg8KE4oCmwobCh8KIwonCisKLwozCjcKOwo/CkOKAmOKAmeKAnOKAneKAouKAk+KAlMKYwpnCmsKbwpzCncKewp/CoOC4geC4guC4g+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+/vVwiXG4gIH0sXG4gIFwiaWJtMTE2MlwiOiBcImNwMTE2MlwiLFxuICBcImNzaWJtMTE2MlwiOiBcImNwMTE2MlwiLFxuICBcImNwMTE2M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKj4oKswqXCpsKnxZPCqcKqwqvCrMKtwq7Cr8KwwrHCssKzxbjCtcK2wrfFksK5wrrCu8K8wr3CvsK/w4DDgcOCxILDhMOFw4bDh8OIw4nDisOLzIDDjcOOw4/EkMORzInDk8OUxqDDlsOXw5jDmcOaw5vDnMavzIPDn8Ogw6HDosSDw6TDpcOmw6fDqMOpw6rDq8yBw63DrsOvxJHDscyjw7PDtMahw7bDt8O4w7nDusO7w7zGsOKCq8O/XCJcbiAgfSxcbiAgXCJpYm0xMTYzXCI6IFwiY3AxMTYzXCIsXG4gIFwiY3NpYm0xMTYzXCI6IFwiY3AxMTYzXCIsXG4gIFwibWFjY3JvYXRpYW5cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsWg4oSiwrTCqOKJoMW9w5jiiJ7CseKJpOKJpeKIhsK14oiC4oiR4oiPxaHiiKvCqsK64oSmxb7DuMK/wqHCrOKImsaS4omIxIbCq8SM4oCmwqDDgMODw5XFksWTxJDigJTigJzigJ3igJjigJnDt+KXiu+/vcKp4oGEwqTigLnigLrDhsK74oCTwrfigJrigJ7igLDDgsSHw4HEjcOIw43DjsOPw4zDk8OUxJHDksOaw5vDmcSxy4bLnMKvz4DDi8uawrjDisOmy4dcIlxuICB9LFxuICBcIm1hY2N5cmlsbGljXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv4oCgwrDCosKjwqfigKLCttCGwq7CqeKEotCC0ZLiiaDQg9GT4oiewrHiiaTiiaXRlsK14oiC0IjQhNGU0IfRl9CJ0ZnQitGa0ZjQhcKs4oiaxpLiiYjiiIbCq8K74oCmwqDQi9Gb0IzRnNGV4oCT4oCU4oCc4oCd4oCY4oCZw7figJ7QjtGe0I/Rn+KEltCB0ZHRj9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGOwqRcIlxuICB9LFxuICBcIm1hY2dyZWVrXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMK5wrLDicKzw5bDnM6Fw6DDosOkzoTCqMOnw6nDqMOqw6vCo+KEosOuw6/igKLCveKAsMO0w7bCpsKtw7nDu8O84oCgzpPOlM6YzpvOns6gw5/CrsKpzqPOqsKn4omgwrDOh86RwrHiiaTiiaXCpc6SzpXOls6XzpnOms6czqbOq86ozqnOrM6dwqzOn86h4omIzqTCq8K74oCmwqDOpc6nzobOiMWT4oCT4oCV4oCc4oCd4oCY4oCZw7fOic6KzozOjs6tzq7Or8+Mzo/Pjc6xzrLPiM60zrXPhs6zzrfOuc6+zrrOu868zr3Ov8+Az47Pgc+Dz4TOuM+Jz4LPh8+FzrbPis+LzpDOsO+/vVwiXG4gIH0sXG4gIFwibWFjaWNlbGFuZFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvMOdwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhMKkw5DDsMOew77DvcK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwibWFjcm9tYW5cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTigLnigLrvrIHvrILigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcIm1hY3JvbWFuaWFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMSCxZ7iiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbEg8Wfwr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTigLnigLrFosWj4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJtYWN0aGFpXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCq8K74oCm76KM76KP76KS76KV76KY76KL76KO76KR76KU76KX4oCc4oCd76KZ77+94oCi76KE76KJ76KF76KG76KH76KI76KK76KN76KQ76KT76KW4oCY4oCZ77+9wqDguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvu7/igIvigJPigJTguL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3ihKLguY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnCrsKp77+977+977+977+9XCJcbiAgfSxcbiAgXCJtYWN0dXJraXNoXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuMSexJ/EsMSxxZ7Fn+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZ77+9y4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcIm1hY3VrcmFpbmVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/igKDCsNKQwqPCp+KAosK20IbCrsKp4oSi0ILRkuKJoNCD0ZPiiJ7CseKJpOKJpdGWwrXSkdCI0ITRlNCH0ZfQidGZ0IrRmtGY0IXCrOKImsaS4omI4oiGwqvCu+KApsKg0IvRm9CM0ZzRleKAk+KAlOKAnOKAneKAmOKAmcO34oCe0I7RntCP0Z/ihJbQgdGR0Y/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjsKkXCJcbiAgfSxcbiAgXCJrb2k4clwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4pSA4pSC4pSM4pSQ4pSU4pSY4pSc4pSk4pSs4pS04pS84paA4paE4paI4paM4paQ4paR4paS4paT4oyg4pag4oiZ4oia4omI4omk4omlwqDijKHCsMKywrfDt+KVkOKVkeKVktGR4pWT4pWU4pWV4pWW4pWX4pWY4pWZ4pWa4pWb4pWc4pWd4pWe4pWf4pWg4pWh0IHilaLilaPilaTilaXilabilafilajilanilarilavilazCqdGO0LDQsdGG0LTQtdGE0LPRhdC40LnQutC70LzQvdC+0L/Rj9GA0YHRgtGD0LbQstGM0YvQt9GI0Y3RidGH0YrQrtCQ0JHQptCU0JXQpNCT0KXQmNCZ0JrQm9Cc0J3QntCf0K/QoNCh0KLQo9CW0JLQrNCr0JfQqNCt0KnQp9CqXCJcbiAgfSxcbiAgXCJrb2k4dVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4pSA4pSC4pSM4pSQ4pSU4pSY4pSc4pSk4pSs4pS04pS84paA4paE4paI4paM4paQ4paR4paS4paT4oyg4pag4oiZ4oia4omI4omk4omlwqDijKHCsMKywrfDt+KVkOKVkeKVktGR0ZTilZTRltGX4pWX4pWY4pWZ4pWa4pWb0pHilZ3ilZ7ilZ/ilaDilaHQgdCE4pWj0IbQh+KVpuKVp+KVqOKVqeKVqtKQ4pWswqnRjtCw0LHRhtC00LXRhNCz0YXQuNC50LrQu9C80L3QvtC/0Y/RgNGB0YLRg9C20LLRjNGL0LfRiNGN0YnRh9GK0K7QkNCR0KbQlNCV0KTQk9Cl0JjQmdCa0JvQnNCd0J7Qn9Cv0KDQodCi0KPQltCS0KzQq9CX0KjQrdCp0KfQqlwiXG4gIH0sXG4gIFwia29pOHJ1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLilIDilILilIzilJDilJTilJjilJzilKTilKzilLTilLziloDiloTilojilozilpDilpHilpLilpPijKDilqDiiJniiJriiYjiiaTiiaXCoOKMocKwwrLCt8O34pWQ4pWR4pWS0ZHRlOKVlNGW0ZfilZfilZjilZnilZrilZvSkdGe4pWe4pWf4pWg4pWh0IHQhOKVo9CG0IfilabilafilajilanilarSkNCOwqnRjtCw0LHRhtC00LXRhNCz0YXQuNC50LrQu9C80L3QvtC/0Y/RgNGB0YLRg9C20LLRjNGL0LfRiNGN0YnRh9GK0K7QkNCR0KbQlNCV0KTQk9Cl0JjQmdCa0JvQnNCd0J7Qn9Cv0KDQodCi0KPQltCS0KzQq9CX0KjQrdCp0KfQqlwiXG4gIH0sXG4gIFwia29pOHRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItKb0pPigJrSkuKAnuKApuKAoOKAoe+/veKAsNKz4oC50rLSt9K277+90prigJjigJnigJzigJ3igKLigJPigJTvv73ihKLvv73igLrvv73vv73vv73vv73vv73Tr9Ou0ZHCpNOjwqbCp++/ve+/ve+/vcKrwqzCrcKu77+9wrDCscKy0IHvv73TosK2wrfvv73ihJbvv73Cu++/ve+/ve+/vcKp0Y7QsNCx0YbQtNC10YTQs9GF0LjQudC60LvQvNC90L7Qv9GP0YDRgdGC0YPQttCy0YzRi9C30YjRjdGJ0YfRitCu0JDQkdCm0JTQldCk0JPQpdCY0JnQmtCb0JzQndCe0J/Qr9Cg0KHQotCj0JbQktCs0KvQl9Co0K3QqdCn0KpcIlxuICB9LFxuICBcImFybXNjaWk4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDvv73Wh9aJKSjCu8Kr4oCULtWdLC3WiuKAptWc1ZvVntSx1aHUstWi1LPVo9S01aTUtdWl1LbVptS31afUuNWo1LnVqdS61arUu9Wr1LzVrNS91a3UvtWu1L/Vr9WA1bDVgdWx1YLVstWD1bPVhNW01YXVtdWG1bbVh9W31YjVuNWJ1bnVitW61YvVu9WM1bzVjdW91Y7VvtWP1b/VkNaA1ZHWgdWS1oLVk9aD1ZTWhNWV1oXVltaG1Zrvv71cIlxuICB9LFxuICBcInJrMTA0OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0ILQg+KAmtGT4oCe4oCm4oCg4oCh4oKs4oCw0InigLnQitKa0rrQj9GS4oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi0ZnigLrRmtKb0rvRn8Kg0rDSsdOYwqTTqMKmwqfQgcKp0pLCq8Kswq3CrtKuwrDCsdCG0ZbTqcK1wrbCt9GR4oSW0pPCu9OZ0qLSo9Kv0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y9cIlxuICB9LFxuICBcInRjdm5cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDDDmuG7pFxcdTAwMDPhu6rhu6zhu65cXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMOG7qOG7sOG7suG7tuG7uMOd4bu0XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/DgOG6osODw4HhuqDhurbhuqzDiOG6uuG6vMOJ4bq44buGw4zhu4jEqMON4buKw5Lhu47DlcOT4buM4buY4buc4bue4bug4bua4buiw5nhu6bFqMKgxILDgsOKw5TGoMavxJDEg8Oiw6rDtMahxrDEkeG6sMyAzInMg8yBzKPDoOG6o8Ojw6HhuqHhurLhurHhurPhurXhuq/hurThuq7huqbhuqjhuqrhuqThu4DhurfhuqfhuqnhuqvhuqXhuq3DqOG7guG6u+G6vcOp4bq54buB4buD4buF4bq/4buHw6zhu4nhu4Thur7hu5LEqcOt4buLw7Lhu5Thu4/DtcOz4buN4buT4buV4buX4buR4buZ4bud4buf4buh4bub4bujw7nhu5bhu6fFqcO64bul4bur4but4buv4bup4bux4buz4bu34bu5w73hu7Xhu5BcIlxuICB9LFxuICBcImdlb3JnaWFuYWNhZGVteVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgeKAmsaS4oCe4oCm4oCg4oChy4bigLDFoOKAucWSwo3CjsKPwpDigJjigJnigJzigJ3igKLigJPigJTLnOKEosWh4oC6xZPCncKexbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/4YOQ4YOR4YOS4YOT4YOU4YOV4YOW4YOX4YOY4YOZ4YOa4YOb4YOc4YOd4YOe4YOf4YOg4YOh4YOi4YOj4YOk4YOl4YOm4YOn4YOo4YOp4YOq4YOr4YOs4YOt4YOu4YOv4YOw4YOx4YOy4YOz4YO04YO14YO2w6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcImdlb3JnaWFucHNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHigJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFksKNwo7Cj8KQ4oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWTwp3CnsW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv+GDkOGDkeGDkuGDk+GDlOGDleGDluGDseGDl+GDmOGDmeGDmuGDm+GDnOGDsuGDneGDnuGDn+GDoOGDoeGDouGDs+GDo+GDpOGDpeGDpuGDp+GDqOGDqeGDquGDq+GDrOGDreGDruGDtOGDr+GDsOGDtcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcInB0MTU0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLSltKS067Sk+KAnuKAptK20q7SstKv0qDTotKi0prSutK40pfigJjigJnigJzigJ3igKLigJPigJTSs9K30qHTo9Kj0pvSu9K5wqDQjtGe0IjTqNKY0rDCp9CBwqnTmMKrwqzTr8Ku0pzCsNKx0IbRltKZ06nCtsK30ZHihJbTmcK70ZjSqtKr0p3QkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj1wiXG4gIH0sXG4gIFwidmlzY2lpXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMeG6slxcdTAwMDNcXHUwMDA04bq04bqqXFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTPhu7ZcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE44bu4XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZOG7tFxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/huqDhuq7hurDhurbhuqThuqbhuqjhuqzhurzhurjhur7hu4Dhu4Lhu4Thu4bhu5Dhu5Lhu5Thu5bhu5jhu6Lhu5rhu5zhu57hu4rhu47hu4zhu4jhu6bFqOG7pOG7ssOV4bqv4bqx4bq34bql4bqn4bqp4bqt4bq94bq54bq/4buB4buD4buF4buH4buR4buT4buV4buX4bugxqDhu5nhu53hu5/hu4vhu7Dhu6jhu6rhu6zGoeG7m8avw4DDgcOCw4PhuqLEguG6s+G6tcOIw4nDiuG6usOMw43EqOG7s8SQ4bupw5LDk8OU4bqh4bu34bur4butw5nDmuG7ueG7tcOd4buhxrDDoMOhw6LDo+G6o8SD4buv4bqrw6jDqcOq4bq7w6zDrcSp4buJxJHhu7HDssOzw7TDteG7j+G7jeG7pcO5w7rFqeG7p8O94buj4buuXCJcbiAgfSxcbiAgXCJpc282NDZjblwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiI8KlJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH3igL5/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+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+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+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+9XCJcbiAgfSxcbiAgXCJpc282NDZqcFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbwqVdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH3igL5/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+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+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+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+9XCJcbiAgfSxcbiAgXCJocHJvbWFuOFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kgw4DDgsOIw4rDi8OOw4/CtMuLy4bCqMucw5nDm+KCpMKvw53DvcKww4fDp8ORw7HCocK/wqTCo8KlwqfGksKiw6LDqsO0w7vDocOpw7PDusOgw6jDssO5w6TDq8O2w7zDhcOuw5jDhsOlw63DuMOmw4TDrMOWw5zDicOvw5/DlMOBw4PDo8OQw7DDjcOMw5PDksOVw7XFoMWhw5rFuMO/w57DvsK3wrXCtsK+4oCUwrzCvcKqwrrCq+KWoMK7wrHvv71cIlxuICB9LFxuICBcIm1hY2ludG9zaFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTCpOKAueKAuu+sge+sguKAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwiYXNjaWlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+/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+/vVwiXG4gIH0sXG4gIFwidGlzNjIwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73guIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvv73vv73vv73vv73guL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvvv73vv73vv73vv71cIlxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3NiY3MtZGF0YS1nZW5lcmF0ZWQuanNcbi8vIG1vZHVsZSBpZCA9IDE0MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcjtcblxuLy8gTXVsdGlieXRlIGNvZGVjLiBJbiB0aGlzIHNjaGVtZSwgYSBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgYnkgMSBvciBtb3JlIGJ5dGVzLlxuLy8gT3VyIGNvZGVjIHN1cHBvcnRzIFVURi0xNiBzdXJyb2dhdGVzLCBleHRlbnNpb25zIGZvciBHQjE4MDMwIGFuZCB1bmljb2RlIHNlcXVlbmNlcy5cbi8vIFRvIHNhdmUgbWVtb3J5IGFuZCBsb2FkaW5nIHRpbWUsIHdlIHJlYWQgdGFibGUgZmlsZXMgb25seSB3aGVuIHJlcXVlc3RlZC5cblxuZXhwb3J0cy5fZGJjcyA9IERCQ1NDb2RlYztcblxudmFyIFVOQVNTSUdORUQgPSAtMSxcbiAgICBHQjE4MDMwX0NPREUgPSAtMixcbiAgICBTRVFfU1RBUlQgID0gLTEwLFxuICAgIE5PREVfU1RBUlQgPSAtMTAwMCxcbiAgICBVTkFTU0lHTkVEX05PREUgPSBuZXcgQXJyYXkoMHgxMDApLFxuICAgIERFRl9DSEFSID0gLTE7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMHgxMDA7IGkrKylcbiAgICBVTkFTU0lHTkVEX05PREVbaV0gPSBVTkFTU0lHTkVEO1xuXG5cbi8vIENsYXNzIERCQ1NDb2RlYyByZWFkcyBhbmQgaW5pdGlhbGl6ZXMgbWFwcGluZyB0YWJsZXMuXG5mdW5jdGlvbiBEQkNTQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuZW5jb2RpbmdOYW1lID0gY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZTtcbiAgICBpZiAoIWNvZGVjT3B0aW9ucylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS5cIilcbiAgICBpZiAoIWNvZGVjT3B0aW9ucy50YWJsZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIicgaGFzIG5vIGRhdGEuXCIpO1xuXG4gICAgLy8gTG9hZCB0YWJsZXMuXG4gICAgdmFyIG1hcHBpbmdUYWJsZSA9IGNvZGVjT3B0aW9ucy50YWJsZSgpO1xuXG5cbiAgICAvLyBEZWNvZGUgdGFibGVzOiBNQkNTIC0+IFVuaWNvZGUuXG5cbiAgICAvLyBkZWNvZGVUYWJsZXMgaXMgYSB0cmllLCBlbmNvZGVkIGFzIGFuIGFycmF5IG9mIGFycmF5cyBvZiBpbnRlZ2Vycy4gSW50ZXJuYWwgYXJyYXlzIGFyZSB0cmllIG5vZGVzIGFuZCBhbGwgaGF2ZSBsZW4gPSAyNTYuXG4gICAgLy8gVHJpZSByb290IGlzIGRlY29kZVRhYmxlc1swXS5cbiAgICAvLyBWYWx1ZXM6ID49ICAwIC0+IHVuaWNvZGUgY2hhcmFjdGVyIGNvZGUuIGNhbiBiZSA+IDB4RkZGRlxuICAgIC8vICAgICAgICAgPT0gVU5BU1NJR05FRCAtPiB1bmtub3duL3VuYXNzaWduZWQgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA9PSBHQjE4MDMwX0NPREUgLT4gdGhpcyBpcyB0aGUgZW5kIG9mIGEgR0IxODAzMCA0LWJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA8PSBOT0RFX1NUQVJUIC0+IGluZGV4IG9mIHRoZSBuZXh0IG5vZGUgaW4gb3VyIHRyaWUgdG8gcHJvY2VzcyBuZXh0IGJ5dGUuXG4gICAgLy8gICAgICAgICA8PSBTRVFfU1RBUlQgIC0+IGluZGV4IG9mIHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciBjb2RlIHNlcXVlbmNlLCBpbiBkZWNvZGVUYWJsZVNlcS5cbiAgICB0aGlzLmRlY29kZVRhYmxlcyA9IFtdO1xuICAgIHRoaXMuZGVjb2RlVGFibGVzWzBdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgcm9vdCBub2RlLlxuXG4gICAgLy8gU29tZXRpbWVzIGEgTUJDUyBjaGFyIGNvcnJlc3BvbmRzIHRvIGEgc2VxdWVuY2Ugb2YgdW5pY29kZSBjaGFycy4gV2Ugc3RvcmUgdGhlbSBhcyBhcnJheXMgb2YgaW50ZWdlcnMgaGVyZS4gXG4gICAgdGhpcy5kZWNvZGVUYWJsZVNlcSA9IFtdO1xuXG4gICAgLy8gQWN0dWFsIG1hcHBpbmcgdGFibGVzIGNvbnNpc3Qgb2YgY2h1bmtzLiBVc2UgdGhlbSB0byBmaWxsIHVwIGRlY29kZSB0YWJsZXMuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBwaW5nVGFibGUubGVuZ3RoOyBpKyspXG4gICAgICAgIHRoaXMuX2FkZERlY29kZUNodW5rKG1hcHBpbmdUYWJsZVtpXSk7XG5cbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGljb252LmRlZmF1bHRDaGFyVW5pY29kZTtcblxuICAgIFxuICAgIC8vIEVuY29kZSB0YWJsZXM6IFVuaWNvZGUgLT4gREJDUy5cblxuICAgIC8vIGBlbmNvZGVUYWJsZWAgaXMgYXJyYXkgbWFwcGluZyBmcm9tIHVuaWNvZGUgY2hhciB0byBlbmNvZGVkIGNoYXIuIEFsbCBpdHMgdmFsdWVzIGFyZSBpbnRlZ2VycyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgLy8gQmVjYXVzZSBpdCBjYW4gYmUgc3BhcnNlLCBpdCBpcyByZXByZXNlbnRlZCBhcyBhcnJheSBvZiBidWNrZXRzIGJ5IDI1NiBjaGFycyBlYWNoLiBCdWNrZXQgY2FuIGJlIG51bGwuXG4gICAgLy8gVmFsdWVzOiA+PSAgMCAtPiBpdCBpcyBhIG5vcm1hbCBjaGFyLiBXcml0ZSB0aGUgdmFsdWUgKGlmIDw9MjU2IHRoZW4gMSBieXRlLCBpZiA8PTY1NTM2IHRoZW4gMiBieXRlcywgZXRjLikuXG4gICAgLy8gICAgICAgICA9PSBVTkFTU0lHTkVEIC0+IG5vIGNvbnZlcnNpb24gZm91bmQuIE91dHB1dCBhIGRlZmF1bHQgY2hhci5cbiAgICAvLyAgICAgICAgIDw9IFNFUV9TVEFSVCAgLT4gaXQncyBhbiBpbmRleCBpbiBlbmNvZGVUYWJsZVNlcSwgc2VlIGJlbG93LiBUaGUgY2hhcmFjdGVyIHN0YXJ0cyBhIHNlcXVlbmNlLlxuICAgIHRoaXMuZW5jb2RlVGFibGUgPSBbXTtcbiAgICBcbiAgICAvLyBgZW5jb2RlVGFibGVTZXFgIGlzIHVzZWQgd2hlbiBhIHNlcXVlbmNlIG9mIHVuaWNvZGUgY2hhcmFjdGVycyBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGNvZGUuIFdlIHVzZSBhIHRyZWUgb2ZcbiAgICAvLyBvYmplY3RzIHdoZXJlIGtleXMgY29ycmVzcG9uZCB0byBjaGFyYWN0ZXJzIGluIHNlcXVlbmNlIGFuZCBsZWFmcyBhcmUgdGhlIGVuY29kZWQgZGJjcyB2YWx1ZXMuIEEgc3BlY2lhbCBERUZfQ0hBUiBrZXlcbiAgICAvLyBtZWFucyBlbmQgb2Ygc2VxdWVuY2UgKG5lZWRlZCB3aGVuIG9uZSBzZXF1ZW5jZSBpcyBhIHN0cmljdCBzdWJzZXF1ZW5jZSBvZiBhbm90aGVyKS5cbiAgICAvLyBPYmplY3RzIGFyZSBrZXB0IHNlcGFyYXRlbHkgZnJvbSBlbmNvZGVUYWJsZSB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS5cbiAgICB0aGlzLmVuY29kZVRhYmxlU2VxID0gW107XG5cbiAgICAvLyBTb21lIGNoYXJzIGNhbiBiZSBkZWNvZGVkLCBidXQgbmVlZCBub3QgYmUgZW5jb2RlZC5cbiAgICB2YXIgc2tpcEVuY29kZUNoYXJzID0ge307XG4gICAgaWYgKGNvZGVjT3B0aW9ucy5lbmNvZGVTa2lwVmFscylcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW3ZhbF0gPSB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSB2YWwuZnJvbTsgaiA8PSB2YWwudG87IGorKylcbiAgICAgICAgICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW2pdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAvLyBVc2UgZGVjb2RlIHRyaWUgdG8gcmVjdXJzaXZlbHkgZmlsbCBvdXQgZW5jb2RlIHRhYmxlcy5cbiAgICB0aGlzLl9maWxsRW5jb2RlVGFibGUoMCwgMCwgc2tpcEVuY29kZUNoYXJzKTtcblxuICAgIC8vIEFkZCBtb3JlIGVuY29kaW5nIHBhaXJzIHdoZW4gbmVlZGVkLlxuICAgIGlmIChjb2RlY09wdGlvbnMuZW5jb2RlQWRkKSB7XG4gICAgICAgIGZvciAodmFyIHVDaGFyIGluIGNvZGVjT3B0aW9ucy5lbmNvZGVBZGQpXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvZGVjT3B0aW9ucy5lbmNvZGVBZGQsIHVDaGFyKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFbmNvZGVDaGFyKHVDaGFyLmNoYXJDb2RlQXQoMCksIGNvZGVjT3B0aW9ucy5lbmNvZGVBZGRbdUNoYXJdKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlZkNoYXJTQiAgPSB0aGlzLmVuY29kZVRhYmxlWzBdW2ljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApXTtcbiAgICBpZiAodGhpcy5kZWZDaGFyU0IgPT09IFVOQVNTSUdORUQpIHRoaXMuZGVmQ2hhclNCID0gdGhpcy5lbmNvZGVUYWJsZVswXVsnPyddO1xuICAgIGlmICh0aGlzLmRlZkNoYXJTQiA9PT0gVU5BU1NJR05FRCkgdGhpcy5kZWZDaGFyU0IgPSBcIj9cIi5jaGFyQ29kZUF0KDApO1xuXG5cbiAgICAvLyBMb2FkICYgY3JlYXRlIEdCMTgwMzAgdGFibGVzIHdoZW4gbmVlZGVkLlxuICAgIGlmICh0eXBlb2YgY29kZWNPcHRpb25zLmdiMTgwMzAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5nYjE4MDMwID0gY29kZWNPcHRpb25zLmdiMTgwMzAoKTsgLy8gTG9hZCBHQjE4MDMwIHJhbmdlcy5cblxuICAgICAgICAvLyBBZGQgR0IxODAzMCBkZWNvZGUgdGFibGVzLlxuICAgICAgICB2YXIgdGhpcmRCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdmFyIHRoaXJkQnl0ZU5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1t0aGlyZEJ5dGVOb2RlSWR4XSA9IFVOQVNTSUdORURfTk9ERS5zbGljZSgwKTtcblxuICAgICAgICB2YXIgZm91cnRoQnl0ZU5vZGVJZHggPSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgIHZhciBmb3VydGhCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW2ZvdXJ0aEJ5dGVOb2RlSWR4XSA9IFVOQVNTSUdORURfTk9ERS5zbGljZSgwKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMHg4MTsgaSA8PSAweEZFOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzZWNvbmRCeXRlTm9kZUlkeCA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlc1swXVtpXTtcbiAgICAgICAgICAgIHZhciBzZWNvbmRCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW3NlY29uZEJ5dGVOb2RlSWR4XTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAweDMwOyBqIDw9IDB4Mzk7IGorKylcbiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlTm9kZVtqXSA9IE5PREVfU1RBUlQgLSB0aGlyZEJ5dGVOb2RlSWR4O1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAweDgxOyBpIDw9IDB4RkU7IGkrKylcbiAgICAgICAgICAgIHRoaXJkQnl0ZU5vZGVbaV0gPSBOT0RFX1NUQVJUIC0gZm91cnRoQnl0ZU5vZGVJZHg7XG4gICAgICAgIGZvciAodmFyIGkgPSAweDMwOyBpIDw9IDB4Mzk7IGkrKylcbiAgICAgICAgICAgIGZvdXJ0aEJ5dGVOb2RlW2ldID0gR0IxODAzMF9DT0RFXG4gICAgfSAgICAgICAgXG59XG5cbkRCQ1NDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IERCQ1NFbmNvZGVyO1xuREJDU0NvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gREJDU0RlY29kZXI7XG5cbi8vIERlY29kZXIgaGVscGVyc1xuREJDU0NvZGVjLnByb3RvdHlwZS5fZ2V0RGVjb2RlVHJpZU5vZGUgPSBmdW5jdGlvbihhZGRyKSB7XG4gICAgdmFyIGJ5dGVzID0gW107XG4gICAgZm9yICg7IGFkZHIgPiAwOyBhZGRyID4+PSA4KVxuICAgICAgICBieXRlcy5wdXNoKGFkZHIgJiAweEZGKTtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoID09IDApXG4gICAgICAgIGJ5dGVzLnB1c2goMCk7XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzWzBdO1xuICAgIGZvciAodmFyIGkgPSBieXRlcy5sZW5ndGgtMTsgaSA+IDA7IGktLSkgeyAvLyBUcmF2ZXJzZSBub2RlcyBkZWVwZXIgaW50byB0aGUgdHJpZS5cbiAgICAgICAgdmFyIHZhbCA9IG5vZGVbYnl0ZXNbaV1dO1xuXG4gICAgICAgIGlmICh2YWwgPT0gVU5BU1NJR05FRCkgeyAvLyBDcmVhdGUgbmV3IG5vZGUuXG4gICAgICAgICAgICBub2RlW2J5dGVzW2ldXSA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmRlY29kZVRhYmxlcy5wdXNoKG5vZGUgPSBVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCA8PSBOT0RFX1NUQVJUKSB7IC8vIEV4aXN0aW5nIG5vZGUuXG4gICAgICAgICAgICBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbTk9ERV9TVEFSVCAtIHZhbF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcndyaXRlIGJ5dGUgaW4gXCIgKyB0aGlzLmVuY29kaW5nTmFtZSArIFwiLCBhZGRyOiBcIiArIGFkZHIudG9TdHJpbmcoMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fYWRkRGVjb2RlQ2h1bmsgPSBmdW5jdGlvbihjaHVuaykge1xuICAgIC8vIEZpcnN0IGVsZW1lbnQgb2YgY2h1bmsgaXMgdGhlIGhleCBtYmNzIGNvZGUgd2hlcmUgd2Ugc3RhcnQuXG4gICAgdmFyIGN1ckFkZHIgPSBwYXJzZUludChjaHVua1swXSwgMTYpO1xuXG4gICAgLy8gQ2hvb3NlIHRoZSBkZWNvZGluZyBub2RlIHdoZXJlIHdlJ2xsIHdyaXRlIG91ciBjaGFycy5cbiAgICB2YXIgd3JpdGVUYWJsZSA9IHRoaXMuX2dldERlY29kZVRyaWVOb2RlKGN1ckFkZHIpO1xuICAgIGN1ckFkZHIgPSBjdXJBZGRyICYgMHhGRjtcblxuICAgIC8vIFdyaXRlIGFsbCBvdGhlciBlbGVtZW50cyBvZiB0aGUgY2h1bmsgdG8gdGhlIHRhYmxlLlxuICAgIGZvciAodmFyIGsgPSAxOyBrIDwgY2h1bmsubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBjaHVua1trXTtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiKSB7IC8vIFN0cmluZywgd3JpdGUgYXMtaXMuXG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQubGVuZ3RoOykge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgaWYgKDB4RDgwMCA8PSBjb2RlICYmIGNvZGUgPCAweERDMDApIHsgLy8gRGVjb2RlIHN1cnJvZ2F0ZVxuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVRyYWlsID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gY29kZVRyYWlsICYmIGNvZGVUcmFpbCA8IDB4RTAwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IDB4MTAwMDAgKyAoY29kZSAtIDB4RDgwMCkgKiAweDQwMCArIChjb2RlVHJhaWwgLSAweERDMDApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gXCIgICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIiBhdCBjaHVuayBcIiArIGNodW5rWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMHgwRkYwIDwgY29kZSAmJiBjb2RlIDw9IDB4MEZGRikgeyAvLyBDaGFyYWN0ZXIgc2VxdWVuY2UgKG91ciBvd24gZW5jb2RpbmcgdXNlZClcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IDB4RkZGIC0gY29kZSArIDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZXEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBsZW47IG0rKylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoKHBhcnQuY2hhckNvZGVBdChsKyspKTsgLy8gU2ltcGxlIHZhcmlhdGlvbjogZG9uJ3Qgc3VwcG9ydCBzdXJyb2dhdGVzIG9yIHN1YnNlcXVlbmNlcyBpbiBzZXEuXG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVUYWJsZVtjdXJBZGRyKytdID0gU0VRX1NUQVJUIC0gdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChzZXEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IGNvZGU7IC8vIEJhc2ljIGNoYXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcnQgPT09IFwibnVtYmVyXCIpIHsgLy8gSW50ZWdlciwgbWVhbmluZyBpbmNyZWFzaW5nIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggcHJldiBjaGFyYWN0ZXIuXG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB3cml0ZVRhYmxlW2N1ckFkZHIgLSAxXSArIDE7XG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQ7IGwrKylcbiAgICAgICAgICAgICAgICB3cml0ZVRhYmxlW2N1ckFkZHIrK10gPSBjaGFyQ29kZSsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCB0eXBlICdcIiArIHR5cGVvZiBwYXJ0ICsgXCInIGdpdmVuIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgY2h1bmsgXCIgKyBjaHVua1swXSk7XG4gICAgfVxuICAgIGlmIChjdXJBZGRyID4gMHhGRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IGNodW5rIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgYWRkciBcIiArIGNodW5rWzBdICsgXCI6IHRvbyBsb25nXCIgKyBjdXJBZGRyKTtcbn1cblxuLy8gRW5jb2RlciBoZWxwZXJzXG5EQkNTQ29kZWMucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQgPSBmdW5jdGlvbih1Q29kZSkge1xuICAgIHZhciBoaWdoID0gdUNvZGUgPj4gODsgLy8gVGhpcyBjb3VsZCBiZSA+IDB4RkYgYmVjYXVzZSBvZiBhc3RyYWwgY2hhcmFjdGVycy5cbiAgICBpZiAodGhpcy5lbmNvZGVUYWJsZVtoaWdoXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aGlzLmVuY29kZVRhYmxlW2hpZ2hdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgYnVja2V0IG9uIGRlbWFuZC5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVUYWJsZVtoaWdoXTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlQ2hhciA9IGZ1bmN0aW9uKHVDb2RlLCBkYmNzQ29kZSkge1xuICAgIHZhciBidWNrZXQgPSB0aGlzLl9nZXRFbmNvZGVCdWNrZXQodUNvZGUpO1xuICAgIHZhciBsb3cgPSB1Q29kZSAmIDB4RkY7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVClcbiAgICAgICAgdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQtYnVja2V0W2xvd11dW0RFRl9DSEFSXSA9IGRiY3NDb2RlOyAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSwgc2V0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2Ugb2YgaXQuXG4gICAgZWxzZSBpZiAoYnVja2V0W2xvd10gPT0gVU5BU1NJR05FRClcbiAgICAgICAgYnVja2V0W2xvd10gPSBkYmNzQ29kZTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2UgPSBmdW5jdGlvbihzZXEsIGRiY3NDb2RlKSB7XG4gICAgXG4gICAgLy8gR2V0IHRoZSByb290IG9mIGNoYXJhY3RlciB0cmVlIGFjY29yZGluZyB0byBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlcXVlbmNlLlxuICAgIHZhciB1Q29kZSA9IHNlcVswXTtcbiAgICB2YXIgYnVja2V0ID0gdGhpcy5fZ2V0RW5jb2RlQnVja2V0KHVDb2RlKTtcbiAgICB2YXIgbG93ID0gdUNvZGUgJiAweEZGO1xuXG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSB3aXRoICAtIHVzZSBpdC5cbiAgICAgICAgbm9kZSA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWJ1Y2tldFtsb3ddXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIHdhcyBubyBzZXF1ZW5jZSBvYmplY3QgLSBhbGxvY2F0ZSBhIG5ldyBvbmUuXG4gICAgICAgIG5vZGUgPSB7fTtcbiAgICAgICAgaWYgKGJ1Y2tldFtsb3ddICE9PSBVTkFTU0lHTkVEKSBub2RlW0RFRl9DSEFSXSA9IGJ1Y2tldFtsb3ddOyAvLyBJZiBhIGNoYXIgd2FzIHNldCBiZWZvcmUgLSBtYWtlIGl0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2UuXG4gICAgICAgIGJ1Y2tldFtsb3ddID0gU0VRX1NUQVJUIC0gdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgIHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChub2RlKTtcbiAgICB9XG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgY2hhcmFjdGVyIHRyZWUsIGFsbG9jYXRpbmcgbmV3IG5vZGVzIGFzIG5lZWRlZC5cbiAgICBmb3IgKHZhciBqID0gMTsgaiA8IHNlcS5sZW5ndGgtMTsgaisrKSB7XG4gICAgICAgIHZhciBvbGRWYWwgPSBub2RlW3VDb2RlXTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRWYWwgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgbm9kZSA9IG9sZFZhbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZVt1Q29kZV0gPSB7fVxuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIG5vZGVbREVGX0NIQVJdID0gb2xkVmFsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxlYWYgdG8gZ2l2ZW4gZGJjc0NvZGUuXG4gICAgdUNvZGUgPSBzZXFbc2VxLmxlbmd0aC0xXTtcbiAgICBub2RlW3VDb2RlXSA9IGRiY3NDb2RlO1xufVxuXG5EQkNTQ29kZWMucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGUgPSBmdW5jdGlvbihub2RlSWR4LCBwcmVmaXgsIHNraXBFbmNvZGVDaGFycykge1xuICAgIHZhciBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbbm9kZUlkeF07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAweDEwMDsgaSsrKSB7XG4gICAgICAgIHZhciB1Q29kZSA9IG5vZGVbaV07XG4gICAgICAgIHZhciBtYkNvZGUgPSBwcmVmaXggKyBpO1xuICAgICAgICBpZiAoc2tpcEVuY29kZUNoYXJzW21iQ29kZV0pXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBpZiAodUNvZGUgPj0gMClcbiAgICAgICAgICAgIHRoaXMuX3NldEVuY29kZUNoYXIodUNvZGUsIG1iQ29kZSk7XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlIDw9IE5PREVfU1RBUlQpXG4gICAgICAgICAgICB0aGlzLl9maWxsRW5jb2RlVGFibGUoTk9ERV9TVEFSVCAtIHVDb2RlLCBtYkNvZGUgPDwgOCwgc2tpcEVuY29kZUNoYXJzKTtcbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gU0VRX1NUQVJUKVxuICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSB1Q29kZV0sIG1iQ29kZSk7XG4gICAgfVxufVxuXG5cblxuLy8gPT0gRW5jb2RlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gREJDU0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAvLyBFbmNvZGVyIHN0YXRlXG4gICAgdGhpcy5sZWFkU3Vycm9nYXRlID0gLTE7XG4gICAgdGhpcy5zZXFPYmogPSB1bmRlZmluZWQ7XG4gICAgXG4gICAgLy8gU3RhdGljIGRhdGFcbiAgICB0aGlzLmVuY29kZVRhYmxlID0gY29kZWMuZW5jb2RlVGFibGU7XG4gICAgdGhpcy5lbmNvZGVUYWJsZVNlcSA9IGNvZGVjLmVuY29kZVRhYmxlU2VxO1xuICAgIHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlID0gY29kZWMuZGVmQ2hhclNCO1xuICAgIHRoaXMuZ2IxODAzMCA9IGNvZGVjLmdiMTgwMzA7XG59XG5cbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBuZXdCdWYgPSBuZXcgQnVmZmVyKHN0ci5sZW5ndGggKiAodGhpcy5nYjE4MDMwID8gNCA6IDMpKSwgXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSB0aGlzLmxlYWRTdXJyb2dhdGUsXG4gICAgICAgIHNlcU9iaiA9IHRoaXMuc2VxT2JqLCBuZXh0Q2hhciA9IC0xLFxuICAgICAgICBpID0gMCwgaiA9IDA7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAvLyAwLiBHZXQgbmV4dCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChuZXh0Q2hhciA9PT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChpID09IHN0ci5sZW5ndGgpIGJyZWFrO1xuICAgICAgICAgICAgdmFyIHVDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB1Q29kZSA9IG5leHRDaGFyO1xuICAgICAgICAgICAgbmV4dENoYXIgPSAtMTsgICAgXG4gICAgICAgIH1cblxuICAgICAgICAvLyAxLiBIYW5kbGUgc3Vycm9nYXRlcy5cbiAgICAgICAgaWYgKDB4RDgwMCA8PSB1Q29kZSAmJiB1Q29kZSA8IDB4RTAwMCkgeyAvLyBDaGFyIGlzIG9uZSBvZiBzdXJyb2dhdGVzLlxuICAgICAgICAgICAgaWYgKHVDb2RlIDwgMHhEQzAwKSB7IC8vIFdlJ3ZlIGdvdCBsZWFkIHN1cnJvZ2F0ZS5cbiAgICAgICAgICAgICAgICBpZiAobGVhZFN1cnJvZ2F0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IHVDb2RlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gdUNvZGU7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZSBsZWFkIHN1cnJvZ2F0ZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFdlJ3ZlIGdvdCB0cmFpbCBzdXJyb2dhdGUuXG4gICAgICAgICAgICAgICAgaWYgKGxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVDb2RlID0gMHgxMDAwMCArIChsZWFkU3Vycm9nYXRlIC0gMHhEODAwKSAqIDB4NDAwICsgKHVDb2RlIC0gMHhEQzAwKTtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IHRyYWlsIHN1cnJvZ2F0ZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsZWFkU3Vycm9nYXRlICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFpciAtIG9ubHkgbGVhZCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgICAgICBuZXh0Q2hhciA9IHVDb2RlOyB1Q29kZSA9IFVOQVNTSUdORUQ7IC8vIFdyaXRlIGFuIGVycm9yLCB0aGVuIGN1cnJlbnQgY2hhci5cbiAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIENvbnZlcnQgdUNvZGUgY2hhcmFjdGVyLlxuICAgICAgICB2YXIgZGJjc0NvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICBpZiAoc2VxT2JqICE9PSB1bmRlZmluZWQgJiYgdUNvZGUgIT0gVU5BU1NJR05FRCkgeyAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2VxdWVuY2VcbiAgICAgICAgICAgIHZhciByZXNDb2RlID0gc2VxT2JqW3VDb2RlXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzQ29kZSA9PT0gJ29iamVjdCcpIHsgLy8gU2VxdWVuY2UgY29udGludWVzLlxuICAgICAgICAgICAgICAgIHNlcU9iaiA9IHJlc0NvZGU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc0NvZGUgPT0gJ251bWJlcicpIHsgLy8gU2VxdWVuY2UgZmluaXNoZWQuIFdyaXRlIGl0LlxuICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gcmVzQ29kZTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNDb2RlID09IHVuZGVmaW5lZCkgeyAvLyBDdXJyZW50IGNoYXJhY3RlciBpcyBub3QgcGFydCBvZiB0aGUgc2VxdWVuY2UuXG5cbiAgICAgICAgICAgICAgICAvLyBUcnkgZGVmYXVsdCBjaGFyYWN0ZXIgZm9yIHRoaXMgc2VxdWVuY2VcbiAgICAgICAgICAgICAgICByZXNDb2RlID0gc2VxT2JqW0RFRl9DSEFSXTtcbiAgICAgICAgICAgICAgICBpZiAocmVzQ29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gcmVzQ29kZTsgLy8gRm91bmQuIFdyaXRlIGl0LlxuICAgICAgICAgICAgICAgICAgICBuZXh0Q2hhciA9IHVDb2RlOyAvLyBDdXJyZW50IGNoYXJhY3RlciB3aWxsIGJlIHdyaXR0ZW4gdG9vIGluIHRoZSBuZXh0IGl0ZXJhdGlvbi5cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQgaWYgd2UgaGF2ZSBubyBkZWZhdWx0PyAocmVzQ29kZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZW4sIHdlIHNob3VsZCB3cml0ZSBmaXJzdCBjaGFyIG9mIHRoZSBzZXF1ZW5jZSBhcy1pcyBhbmQgdHJ5IHRoZSByZXN0IHJlY3Vyc2l2ZWx5LlxuICAgICAgICAgICAgICAgICAgICAvLyBEaWRuJ3QgZG8gaXQgZm9yIG5vdyBiZWNhdXNlIG5vIGVuY29kaW5nIGhhcyB0aGlzIHNpdHVhdGlvbiB5ZXQuXG4gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwganVzdCBza2lwIHRoZSBzZXF1ZW5jZSBhbmQgd3JpdGUgY3VycmVudCBjaGFyLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcU9iaiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA+PSAwKSB7ICAvLyBSZWd1bGFyIGNoYXJhY3RlclxuICAgICAgICAgICAgdmFyIHN1YnRhYmxlID0gdGhpcy5lbmNvZGVUYWJsZVt1Q29kZSA+PiA4XTtcbiAgICAgICAgICAgIGlmIChzdWJ0YWJsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gc3VidGFibGVbdUNvZGUgJiAweEZGXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlIDw9IFNFUV9TVEFSVCkgeyAvLyBTZXF1ZW5jZSBzdGFydFxuICAgICAgICAgICAgICAgIHNlcU9iaiA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWRiY3NDb2RlXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlID09IFVOQVNTSUdORUQgJiYgdGhpcy5nYjE4MDMwKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIEdCMTgwMzAgYWxnb3JpdGhtIHRvIGZpbmQgY2hhcmFjdGVyKHMpIHRvIHdyaXRlLlxuICAgICAgICAgICAgICAgIHZhciBpZHggPSBmaW5kSWR4KHRoaXMuZ2IxODAzMC51Q2hhcnMsIHVDb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYmNzQ29kZSA9IHRoaXMuZ2IxODAzMC5nYkNoYXJzW2lkeF0gKyAodUNvZGUgLSB0aGlzLmdiMTgwMzAudUNoYXJzW2lkeF0pO1xuICAgICAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDB4ODEgKyBNYXRoLmZsb29yKGRiY3NDb2RlIC8gMTI2MDApOyBkYmNzQ29kZSA9IGRiY3NDb2RlICUgMTI2MDA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHgzMCArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMjYwKTsgZGJjc0NvZGUgPSBkYmNzQ29kZSAlIDEyNjA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHg4MSArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMCk7IGRiY3NDb2RlID0gZGJjc0NvZGUgJSAxMDtcbiAgICAgICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSAweDMwICsgZGJjc0NvZGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFdyaXRlIGRiY3NDb2RlIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGRiY3NDb2RlID09PSBVTkFTU0lHTkVEKVxuICAgICAgICAgICAgZGJjc0NvZGUgPSB0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChkYmNzQ29kZSA8IDB4MTAwKSB7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRiY3NDb2RlIDwgMHgxMDAwMCkge1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiA4OyAgIC8vIGhpZ2ggYnl0ZVxuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSAmIDB4RkY7IC8vIGxvdyBieXRlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlID4+IDE2O1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSAoZGJjc0NvZGUgPj4gOCkgJiAweEZGO1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSAmIDB4RkY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlcU9iaiA9IHNlcU9iajtcbiAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSBsZWFkU3Vycm9nYXRlO1xuICAgIHJldHVybiBuZXdCdWYuc2xpY2UoMCwgaik7XG59XG5cbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5sZWFkU3Vycm9nYXRlID09PSAtMSAmJiB0aGlzLnNlcU9iaiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47IC8vIEFsbCBjbGVhbi4gTW9zdCBvZnRlbiBjYXNlLlxuXG4gICAgdmFyIG5ld0J1ZiA9IG5ldyBCdWZmZXIoMTApLCBqID0gMDtcblxuICAgIGlmICh0aGlzLnNlcU9iaikgeyAvLyBXZSdyZSBpbiB0aGUgc2VxdWVuY2UuXG4gICAgICAgIHZhciBkYmNzQ29kZSA9IHRoaXMuc2VxT2JqW0RFRl9DSEFSXTtcbiAgICAgICAgaWYgKGRiY3NDb2RlICE9PSB1bmRlZmluZWQpIHsgLy8gV3JpdGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgIGlmIChkYmNzQ29kZSA8IDB4MTAwKSB7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gODsgICAvLyBoaWdoIGJ5dGVcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMHhGRjsgLy8gbG93IGJ5dGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNlZSB0b2RvIGFib3ZlLlxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VxT2JqID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IGxlYWQgc3Vycm9nYXRlIGZvdW5kLlxuICAgICAgICBuZXdCdWZbaisrXSA9IHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlO1xuICAgICAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKTtcbn1cblxuLy8gRXhwb3J0IGZvciB0ZXN0aW5nXG5EQkNTRW5jb2Rlci5wcm90b3R5cGUuZmluZElkeCA9IGZpbmRJZHg7XG5cblxuLy8gPT0gRGVjb2RlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gREJDU0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAvLyBEZWNvZGVyIHN0YXRlXG4gICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICB0aGlzLnByZXZCdWYgPSBuZXcgQnVmZmVyKDApO1xuXG4gICAgLy8gU3RhdGljIGRhdGFcbiAgICB0aGlzLmRlY29kZVRhYmxlcyA9IGNvZGVjLmRlY29kZVRhYmxlcztcbiAgICB0aGlzLmRlY29kZVRhYmxlU2VxID0gY29kZWMuZGVjb2RlVGFibGVTZXE7XG4gICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBjb2RlYy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgdGhpcy5nYjE4MDMwID0gY29kZWMuZ2IxODAzMDtcbn1cblxuREJDU0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIG5ld0J1ZiA9IG5ldyBCdWZmZXIoYnVmLmxlbmd0aCoyKSxcbiAgICAgICAgbm9kZUlkeCA9IHRoaXMubm9kZUlkeCwgXG4gICAgICAgIHByZXZCdWYgPSB0aGlzLnByZXZCdWYsIHByZXZCdWZPZmZzZXQgPSB0aGlzLnByZXZCdWYubGVuZ3RoLFxuICAgICAgICBzZXFTdGFydCA9IC10aGlzLnByZXZCdWYubGVuZ3RoLCAvLyBpZHggb2YgdGhlIHN0YXJ0IG9mIGN1cnJlbnQgcGFyc2VkIHNlcXVlbmNlLlxuICAgICAgICB1Q29kZTtcblxuICAgIGlmIChwcmV2QnVmT2Zmc2V0ID4gMCkgLy8gTWFrZSBwcmV2IGJ1ZiBvdmVybGFwIGEgbGl0dGxlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNsaWNlIGxhdGVyLlxuICAgICAgICBwcmV2QnVmID0gQnVmZmVyLmNvbmNhdChbcHJldkJ1ZiwgYnVmLnNsaWNlKDAsIDEwKV0pO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY3VyQnl0ZSA9IChpID49IDApID8gYnVmW2ldIDogcHJldkJ1ZltpICsgcHJldkJ1Zk9mZnNldF07XG5cbiAgICAgICAgLy8gTG9va3VwIGluIGN1cnJlbnQgdHJpZSBub2RlLlxuICAgICAgICB2YXIgdUNvZGUgPSB0aGlzLmRlY29kZVRhYmxlc1tub2RlSWR4XVtjdXJCeXRlXTtcblxuICAgICAgICBpZiAodUNvZGUgPj0gMCkgeyBcbiAgICAgICAgICAgIC8vIE5vcm1hbCBjaGFyYWN0ZXIsIGp1c3QgdXNlIGl0LlxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlID09PSBVTkFTU0lHTkVEKSB7IC8vIFVua25vd24gY2hhci5cbiAgICAgICAgICAgIC8vIFRPRE86IENhbGxiYWNrIHdpdGggc2VxLlxuICAgICAgICAgICAgLy92YXIgY3VyU2VxID0gKHNlcVN0YXJ0ID49IDApID8gYnVmLnNsaWNlKHNlcVN0YXJ0LCBpKzEpIDogcHJldkJ1Zi5zbGljZShzZXFTdGFydCArIHByZXZCdWZPZmZzZXQsIGkrMSArIHByZXZCdWZPZmZzZXQpO1xuICAgICAgICAgICAgaSA9IHNlcVN0YXJ0OyAvLyBUcnkgdG8gcGFyc2UgYWdhaW4sIGFmdGVyIHNraXBwaW5nIGZpcnN0IGJ5dGUgb2YgdGhlIHNlcXVlbmNlICgnaScgd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAnZm9yJyBjeWNsZSkuXG4gICAgICAgICAgICB1Q29kZSA9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPT09IEdCMTgwMzBfQ09ERSkge1xuICAgICAgICAgICAgdmFyIGN1clNlcSA9IChzZXFTdGFydCA+PSAwKSA/IGJ1Zi5zbGljZShzZXFTdGFydCwgaSsxKSA6IHByZXZCdWYuc2xpY2Uoc2VxU3RhcnQgKyBwcmV2QnVmT2Zmc2V0LCBpKzEgKyBwcmV2QnVmT2Zmc2V0KTtcbiAgICAgICAgICAgIHZhciBwdHIgPSAoY3VyU2VxWzBdLTB4ODEpKjEyNjAwICsgKGN1clNlcVsxXS0weDMwKSoxMjYwICsgKGN1clNlcVsyXS0weDgxKSoxMCArIChjdXJTZXFbM10tMHgzMCk7XG4gICAgICAgICAgICB2YXIgaWR4ID0gZmluZElkeCh0aGlzLmdiMTgwMzAuZ2JDaGFycywgcHRyKTtcbiAgICAgICAgICAgIHVDb2RlID0gdGhpcy5nYjE4MDMwLnVDaGFyc1tpZHhdICsgcHRyIC0gdGhpcy5nYjE4MDMwLmdiQ2hhcnNbaWR4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA8PSBOT0RFX1NUQVJUKSB7IC8vIEdvIHRvIG5leHQgdHJpZSBub2RlLlxuICAgICAgICAgICAgbm9kZUlkeCA9IE5PREVfU1RBUlQgLSB1Q29kZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlIDw9IFNFUV9TVEFSVCkgeyAvLyBPdXRwdXQgYSBzZXF1ZW5jZSBvZiBjaGFycy5cbiAgICAgICAgICAgIHZhciBzZXEgPSB0aGlzLmRlY29kZVRhYmxlU2VxW1NFUV9TVEFSVCAtIHVDb2RlXTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2VxLmxlbmd0aCAtIDE7IGsrKykge1xuICAgICAgICAgICAgICAgIHVDb2RlID0gc2VxW2tdO1xuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgJiAweEZGO1xuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgPj4gODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVDb2RlID0gc2VxW3NlcS5sZW5ndGgtMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWNvbnYtbGl0ZSBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBkZWNvZGluZyB0YWJsZSB2YWx1ZSBcIiArIHVDb2RlICsgXCIgYXQgXCIgKyBub2RlSWR4ICsgXCIvXCIgKyBjdXJCeXRlKTtcblxuICAgICAgICAvLyBXcml0ZSB0aGUgY2hhcmFjdGVyIHRvIGJ1ZmZlciwgaGFuZGxpbmcgaGlnaGVyIHBsYW5lcyB1c2luZyBzdXJyb2dhdGUgcGFpci5cbiAgICAgICAgaWYgKHVDb2RlID4gMHhGRkZGKSB7IFxuICAgICAgICAgICAgdUNvZGUgLT0gMHgxMDAwMDtcbiAgICAgICAgICAgIHZhciB1Q29kZUxlYWQgPSAweEQ4MDAgKyBNYXRoLmZsb29yKHVDb2RlIC8gMHg0MDApO1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZUxlYWQgJiAweEZGO1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZUxlYWQgPj4gODtcblxuICAgICAgICAgICAgdUNvZGUgPSAweERDMDAgKyB1Q29kZSAlIDB4NDAwO1xuICAgICAgICB9XG4gICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgJiAweEZGO1xuICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlID4+IDg7XG5cbiAgICAgICAgLy8gUmVzZXQgdHJpZSBub2RlLlxuICAgICAgICBub2RlSWR4ID0gMDsgc2VxU3RhcnQgPSBpKzE7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlSWR4ID0gbm9kZUlkeDtcbiAgICB0aGlzLnByZXZCdWYgPSAoc2VxU3RhcnQgPj0gMCkgPyBidWYuc2xpY2Uoc2VxU3RhcnQpIDogcHJldkJ1Zi5zbGljZShzZXFTdGFydCArIHByZXZCdWZPZmZzZXQpO1xuICAgIHJldHVybiBuZXdCdWYuc2xpY2UoMCwgaikudG9TdHJpbmcoJ3VjczInKTtcbn1cblxuREJDU0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXQgPSAnJztcblxuICAgIC8vIFRyeSB0byBwYXJzZSBhbGwgcmVtYWluaW5nIGNoYXJzLlxuICAgIHdoaWxlICh0aGlzLnByZXZCdWYubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBTa2lwIDEgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIuXG4gICAgICAgIHJldCArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgdmFyIGJ1ZiA9IHRoaXMucHJldkJ1Zi5zbGljZSgxKTtcblxuICAgICAgICAvLyBQYXJzZSByZW1haW5pbmcgYXMgdXN1YWwuXG4gICAgICAgIHRoaXMucHJldkJ1ZiA9IG5ldyBCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMubm9kZUlkeCA9IDA7XG4gICAgICAgIGlmIChidWYubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldCArPSB0aGlzLndyaXRlKGJ1Zik7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICByZXR1cm4gcmV0O1xufVxuXG4vLyBCaW5hcnkgc2VhcmNoIGZvciBHQjE4MDMwLiBSZXR1cm5zIGxhcmdlc3QgaSBzdWNoIHRoYXQgdGFibGVbaV0gPD0gdmFsLlxuZnVuY3Rpb24gZmluZElkeCh0YWJsZSwgdmFsKSB7XG4gICAgaWYgKHRhYmxlWzBdID4gdmFsKVxuICAgICAgICByZXR1cm4gLTE7XG5cbiAgICB2YXIgbCA9IDAsIHIgPSB0YWJsZS5sZW5ndGg7XG4gICAgd2hpbGUgKGwgPCByLTEpIHsgLy8gYWx3YXlzIHRhYmxlW2xdIDw9IHZhbCA8IHRhYmxlW3JdXG4gICAgICAgIHZhciBtaWQgPSBsICsgTWF0aC5mbG9vcigoci1sKzEpLzIpO1xuICAgICAgICBpZiAodGFibGVbbWlkXSA8PSB2YWwpXG4gICAgICAgICAgICBsID0gbWlkO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbDtcbn1cblxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2RiY3MtY29kZWMuanNcbi8vIG1vZHVsZSBpZCA9IDE0MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gRGVzY3JpcHRpb24gb2Ygc3VwcG9ydGVkIGRvdWJsZSBieXRlIGVuY29kaW5ncyBhbmQgYWxpYXNlcy5cbi8vIFRhYmxlcyBhcmUgbm90IHJlcXVpcmUoKS1kIHVudGlsIHRoZXkgYXJlIG5lZWRlZCB0byBzcGVlZCB1cCBsaWJyYXJ5IGxvYWQuXG4vLyByZXF1aXJlKCktcyBhcmUgZGlyZWN0IHRvIHN1cHBvcnQgQnJvd3NlcmlmeS5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgXG4gICAgLy8gPT0gSmFwYW5lc2UvU2hpZnRKSVMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEFsbCBqYXBhbmVzZSBlbmNvZGluZ3MgYXJlIGJhc2VkIG9uIEpJUyBYIHNldCBvZiBzdGFuZGFyZHM6XG4gICAgLy8gSklTIFggMDIwMSAtIFNpbmdsZS1ieXRlIGVuY29kaW5nIG9mIEFTQ0lJICsgwqUgKyBLYW5hIGNoYXJzIGF0IDB4QTEtMHhERi5cbiAgICAvLyBKSVMgWCAwMjA4IC0gTWFpbiBzZXQgb2YgNjg3OSBjaGFyYWN0ZXJzLCBwbGFjZWQgaW4gOTR4OTQgcGxhbmUsIHRvIGJlIGVuY29kZWQgYnkgMiBieXRlcy4gXG4gICAgLy8gICAgICAgICAgICAgIEhhcyBzZXZlcmFsIHZhcmlhdGlvbnMgaW4gMTk3OCwgMTk4MywgMTk5MCBhbmQgMTk5Ny5cbiAgICAvLyBKSVMgWCAwMjEyIC0gU3VwcGxlbWVudGFyeSBwbGFuZSBvZiA2MDY3IGNoYXJzIGluIDk0eDk0IHBsYW5lLiAxOTkwLiBFZmZlY3RpdmVseSBkZWFkLlxuICAgIC8vIEpJUyBYIDAyMTMgLSBFeHRlbnNpb24gYW5kIG1vZGVybiByZXBsYWNlbWVudCBvZiAwMjA4IGFuZCAwMjEyLiBUb3RhbCBjaGFyczogMTEyMzMuXG4gICAgLy8gICAgICAgICAgICAgIDIgcGxhbmVzLCBmaXJzdCBpcyBzdXBlcnNldCBvZiAwMjA4LCBzZWNvbmQgLSByZXZpc2VkIDAyMTIuXG4gICAgLy8gICAgICAgICAgICAgIEludHJvZHVjZWQgaW4gMjAwMCwgcmV2aXNlZCAyMDA0LiBTb21lIGNoYXJhY3RlcnMgYXJlIGluIFVuaWNvZGUgUGxhbmUgMiAoMHgyeHh4eClcblxuICAgIC8vIEJ5dGUgZW5jb2RpbmdzIGFyZTpcbiAgICAvLyAgKiBTaGlmdF9KSVM6IENvbXBhdGlibGUgd2l0aCAwMjAxLCB1c2VzIG5vdCBkZWZpbmVkIGNoYXJzIGluIHRvcCBoYWxmIGFzIGxlYWQgYnl0ZXMgZm9yIGRvdWJsZS1ieXRlXG4gICAgLy8gICAgICAgICAgICAgICBlbmNvZGluZyBvZiAwMjA4LiBMZWFkIGJ5dGUgcmFuZ2VzOiAweDgxLTB4OUYsIDB4RTAtMHhFRjsgVHJhaWwgYnl0ZSByYW5nZXM6IDB4NDAtMHg3RSwgMHg4MC0weDlFLCAweDlGLTB4RkMuXG4gICAgLy8gICAgICAgICAgICAgICBXaW5kb3dzIENQOTMyIGlzIGEgc3VwZXJzZXQgb2YgU2hpZnRfSklTLiBTb21lIGNvbXBhbmllcyBhZGRlZCBtb3JlIGNoYXJzLCBub3RhYmx5IEtEREkuXG4gICAgLy8gICogRVVDLUpQOiAgICBVcCB0byAzIGJ5dGVzIHBlciBjaGFyYWN0ZXIuIFVzZWQgbW9zdGx5IG9uICpuaXhlcy5cbiAgICAvLyAgICAgICAgICAgICAgIDB4MDAtMHg3RiAgICAgICAtIGxvd2VyIHBhcnQgb2YgMDIwMVxuICAgIC8vICAgICAgICAgICAgICAgMHg4RSwgMHhBMS0weERGIC0gdXBwZXIgcGFydCBvZiAwMjAxXG4gICAgLy8gICAgICAgICAgICAgICAoMHhBMS0weEZFKXgyICAgLSAwMjA4IHBsYW5lICg5NHg5NCkuXG4gICAgLy8gICAgICAgICAgICAgICAweDhGLCAoMHhBMS0weEZFKXgyIC0gMDIxMiBwbGFuZSAoOTR4OTQpLlxuICAgIC8vICAqIEpJUyBYIDIwODogNy1iaXQsIGRpcmVjdCBlbmNvZGluZyBvZiAwMjA4LiBCeXRlIHJhbmdlczogMHgyMS0weDdFICg5NCB2YWx1ZXMpLiBVbmNvbW1vbi5cbiAgICAvLyAgICAgICAgICAgICAgIFVzZWQgYXMtaXMgaW4gSVNPMjAyMiBmYW1pbHkuXG4gICAgLy8gICogSVNPMjAyMi1KUDogU3RhdGVmdWwgZW5jb2RpbmcsIHdpdGggZXNjYXBlIHNlcXVlbmNlcyB0byBzd2l0Y2ggYmV0d2VlbiBBU0NJSSwgXG4gICAgLy8gICAgICAgICAgICAgICAgMDIwMS0xOTc2IFJvbWFuLCAwMjA4LTE5NzgsIDAyMDgtMTk4My5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTE6IEFkZHMgZXNjIHNlcSBmb3IgMDIxMi0xOTkwLlxuICAgIC8vICAqIElTTzIwMjItSlAtMjogQWRkcyBlc2Mgc2VxIGZvciBHQjIzMTMtMTk4MCwgS1NYMTAwMS0xOTkyLCBJU084ODU5LTEsIElTTzg4NTktNy5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTM6IEFkZHMgZXNjIHNlcSBmb3IgMDIwMS0xOTc2IEthbmEgc2V0LCAwMjEzLTIwMDAgUGxhbmVzIDEsIDIuXG4gICAgLy8gICogSVNPMjAyMi1KUC0yMDA0OiBBZGRzIDAyMTMtMjAwNCBQbGFuZSAxLlxuICAgIC8vXG4gICAgLy8gQWZ0ZXIgSklTIFggMDIxMyBhcHBlYXJlZCwgU2hpZnRfSklTLTIwMDQsIEVVQy1KSVNYMDIxMyBhbmQgSVNPMjAyMi1KUC0yMDA0IGZvbGxvd2VkLCB3aXRoIGp1c3QgY2hhbmdpbmcgdGhlIHBsYW5lcy5cbiAgICAvL1xuICAgIC8vIE92ZXJhbGwsIGl0IHNlZW1zIHRoYXQgaXQncyBhIG1lc3MgOiggaHR0cDovL3d3dzgucGxhbGEub3IuanAvdGt1Ym90YTEvdW5pY29kZS1zeW1ib2xzLW1hcDIuaHRtbFxuXG4gICAgJ3NoaWZ0amlzJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9zaGlmdGppcy5qc29uJykgfSxcbiAgICAgICAgZW5jb2RlQWRkOiB7J1xcdTAwYTUnOiAweDVDLCAnXFx1MjAzRSc6IDB4N0V9LFxuICAgICAgICBlbmNvZGVTa2lwVmFsczogW3tmcm9tOiAweEVENDAsIHRvOiAweEY5NDB9XSxcbiAgICB9LFxuICAgICdjc3NoaWZ0amlzJzogJ3NoaWZ0amlzJyxcbiAgICAnbXNrYW5qaSc6ICdzaGlmdGppcycsXG4gICAgJ3NqaXMnOiAnc2hpZnRqaXMnLFxuICAgICd3aW5kb3dzMzFqJzogJ3NoaWZ0amlzJyxcbiAgICAnbXMzMWonOiAnc2hpZnRqaXMnLFxuICAgICd4c2ppcyc6ICdzaGlmdGppcycsXG4gICAgJ3dpbmRvd3M5MzInOiAnc2hpZnRqaXMnLFxuICAgICdtczkzMic6ICdzaGlmdGppcycsXG4gICAgJzkzMic6ICdzaGlmdGppcycsXG4gICAgJ2NwOTMyJzogJ3NoaWZ0amlzJyxcblxuICAgICdldWNqcCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvZXVjanAuanNvbicpIH0sXG4gICAgICAgIGVuY29kZUFkZDogeydcXHUwMGE1JzogMHg1QywgJ1xcdTIwM0UnOiAweDdFfSxcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogS0RESSBleHRlbnNpb24gdG8gU2hpZnRfSklTXG4gICAgLy8gVE9ETzogSUJNIENDU0lEIDk0MiA9IENQOTMyLCBidXQgRjAtRjkgY3VzdG9tIGNoYXJzIGFuZCBvdGhlciBjaGFyIGNoYW5nZXMuXG4gICAgLy8gVE9ETzogSUJNIENDU0lEIDk0MyA9IFNoaWZ0X0pJUyA9IENQOTMyIHdpdGggb3JpZ2luYWwgU2hpZnRfSklTIGxvd2VyIDEyOCBjaGFycy5cblxuXG4gICAgLy8gPT0gQ2hpbmVzZS9HQksgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR0JLXG4gICAgLy8gV2UgbW9zdGx5IGltcGxlbWVudCBXM0MgcmVjb21tZW5kYXRpb246IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9lbmNvZGluZy8jZ2JrLWVuY29kZXJcblxuICAgIC8vIE9sZGVzdCBHQjIzMTIgKDE5ODEsIH43NjAwIGNoYXJzKSBpcyBhIHN1YnNldCBvZiBDUDkzNlxuICAgICdnYjIzMTInOiAnY3A5MzYnLFxuICAgICdnYjIzMTI4MCc6ICdjcDkzNicsXG4gICAgJ2diMjMxMjE5ODAnOiAnY3A5MzYnLFxuICAgICdjc2diMjMxMic6ICdjcDkzNicsXG4gICAgJ2NzaXNvNThnYjIzMTI4MCc6ICdjcDkzNicsXG4gICAgJ2V1Y2NuJzogJ2NwOTM2JyxcblxuICAgIC8vIE1pY3Jvc29mdCdzIENQOTM2IGlzIGEgc3Vic2V0IGFuZCBhcHByb3hpbWF0aW9uIG9mIEdCSy5cbiAgICAnd2luZG93czkzNic6ICdjcDkzNicsXG4gICAgJ21zOTM2JzogJ2NwOTM2JyxcbiAgICAnOTM2JzogJ2NwOTM2JyxcbiAgICAnY3A5MzYnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTM2Lmpzb24nKSB9LFxuICAgIH0sXG5cbiAgICAvLyBHQksgKH4yMjAwMCBjaGFycykgaXMgYW4gZXh0ZW5zaW9uIG9mIENQOTM2IHRoYXQgYWRkZWQgdXNlci1tYXBwZWQgY2hhcnMgYW5kIHNvbWUgb3RoZXIuXG4gICAgJ2diayc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5MzYuanNvbicpLmNvbmNhdChyZXF1aXJlKCcuL3RhYmxlcy9nYmstYWRkZWQuanNvbicpKSB9LFxuICAgIH0sXG4gICAgJ3hnYmsnOiAnZ2JrJyxcbiAgICAnaXNvaXI1OCc6ICdnYmsnLFxuXG4gICAgLy8gR0IxODAzMCBpcyBhbiBhbGdvcml0aG1pYyBleHRlbnNpb24gb2YgR0JLLlxuICAgIC8vIE1haW4gc291cmNlOiBodHRwczovL3d3dy53My5vcmcvVFIvZW5jb2RpbmcvI2diay1lbmNvZGVyXG4gICAgLy8gaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kb2NzL3BhcGVycy9nYjE4MDMwLmh0bWxcbiAgICAvLyBodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvZGF0YS90cnVuay9jaGFyc2V0L2RhdGEveG1sL2diLTE4MDMwLTIwMDAueG1sXG4gICAgLy8gaHR0cDovL3d3dy5raG5nYWkuY29tL2NoaW5lc2UvY2hhcm1hcC90YmxnYmsucGhwP3BhZ2U9MFxuICAgICdnYjE4MDMwJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDkzNi5qc29uJykuY29uY2F0KHJlcXVpcmUoJy4vdGFibGVzL2diay1hZGRlZC5qc29uJykpIH0sXG4gICAgICAgIGdiMTgwMzA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvZ2IxODAzMC1yYW5nZXMuanNvbicpIH0sXG4gICAgICAgIGVuY29kZVNraXBWYWxzOiBbMHg4MF0sXG4gICAgICAgIGVuY29kZUFkZDogeyfigqwnOiAweEEyRTN9LFxuICAgIH0sXG5cbiAgICAnY2hpbmVzZSc6ICdnYjE4MDMwJyxcblxuXG4gICAgLy8gPT0gS29yZWFuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVVQy1LUiwgS1NfQ181NjAxIGFuZCBLUyBYIDEwMDEgYXJlIGV4YWN0bHkgdGhlIHNhbWUuXG4gICAgJ3dpbmRvd3M5NDknOiAnY3A5NDknLFxuICAgICdtczk0OSc6ICdjcDk0OScsXG4gICAgJzk0OSc6ICdjcDk0OScsXG4gICAgJ2NwOTQ5Jzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDk0OS5qc29uJykgfSxcbiAgICB9LFxuXG4gICAgJ2NzZXVja3InOiAnY3A5NDknLFxuICAgICdjc2tzYzU2MDExOTg3JzogJ2NwOTQ5JyxcbiAgICAnZXVja3InOiAnY3A5NDknLFxuICAgICdpc29pcjE0OSc6ICdjcDk0OScsXG4gICAgJ2tvcmVhbic6ICdjcDk0OScsXG4gICAgJ2tzYzU2MDExOTg3JzogJ2NwOTQ5JyxcbiAgICAna3NjNTYwMTE5ODknOiAnY3A5NDknLFxuICAgICdrc2M1NjAxJzogJ2NwOTQ5JyxcblxuXG4gICAgLy8gPT0gQmlnNS9UYWl3YW4vSG9uZyBLb25nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFRoZXJlIGFyZSBsb3RzIG9mIHRhYmxlcyBmb3IgQmlnNSBhbmQgY3A5NTAuIFBsZWFzZSBzZWUgdGhlIGZvbGxvd2luZyBsaW5rcyBmb3IgaGlzdG9yeTpcbiAgICAvLyBodHRwOi8vbW96dHcub3JnL2RvY3MvYmlnNS8gIGh0dHA6Ly93d3cuaGFpYmxlLmRlL2JydW5vL2NoYXJzZXRzL2NvbnZlcnNpb24tdGFibGVzL0JpZzUuaHRtbFxuICAgIC8vIFZhcmlhdGlvbnMsIGluIHJvdWdobHkgbnVtYmVyIG9mIGRlZmluZWQgY2hhcnM6XG4gICAgLy8gICogV2luZG93cyBDUCA5NTA6IE1pY3Jvc29mdCB2YXJpYW50IG9mIEJpZzUuIENhbm9uaWNhbDogaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9NSUNTRlQvV0lORE9XUy9DUDk1MC5UWFRcbiAgICAvLyAgKiBXaW5kb3dzIENQIDk1MTogTWljcm9zb2Z0IHZhcmlhbnQgb2YgQmlnNS1IS1NDUy0yMDAxLiBTZWVtcyB0byBiZSBuZXZlciBwdWJsaWMuIGh0dHA6Ly9tZS5hYmVsY2hldW5nLm9yZy9hcnRpY2xlcy9yZXNlYXJjaC93aGF0LWlzLWNwOTUxL1xuICAgIC8vICAqIEJpZzUtMjAwMyAoVGFpd2FuIHN0YW5kYXJkKSBhbG1vc3Qgc3VwZXJzZXQgb2YgY3A5NTAuXG4gICAgLy8gICogVW5pY29kZS1hdC1vbiAoVUFPKSAvIE1vemlsbGEgMS44LiBGYWxsaW5nIG91dCBvZiB1c2Ugb24gdGhlIFdlYi4gTm90IHN1cHBvcnRlZCBieSBvdGhlciBicm93c2Vycy5cbiAgICAvLyAgKiBCaWc1LUhLU0NTICgtMjAwMSwgLTIwMDQsIC0yMDA4KS4gSG9uZyBLb25nIHN0YW5kYXJkLiBcbiAgICAvLyAgICBtYW55IHVuaWNvZGUgY29kZSBwb2ludHMgbW92ZWQgZnJvbSBQVUEgdG8gU3VwcGxlbWVudGFyeSBwbGFuZSAoVSsyWFhYWCkgb3ZlciB0aGUgeWVhcnMuXG4gICAgLy8gICAgUGx1cywgaXQgaGFzIDQgY29tYmluaW5nIHNlcXVlbmNlcy5cbiAgICAvLyAgICBTZWVtcyB0aGF0IE1vemlsbGEgcmVmdXNlZCB0byBzdXBwb3J0IGl0IGZvciAxMCB5cnMuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQzMSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTAyOTlcbiAgICAvLyAgICBiZWNhdXNlIGJpZzUtaGtzY3MgaXMgdGhlIG9ubHkgZW5jb2RpbmcgdG8gaW5jbHVkZSBhc3RyYWwgY2hhcmFjdGVycyBpbiBub24tYWxnb3JpdGhtaWMgd2F5LlxuICAgIC8vICAgIEltcGxlbWVudGF0aW9ucyBhcmUgbm90IGNvbnNpc3RlbnQgd2l0aGluIGJyb3dzZXJzOyBzb21ldGltZXMgbGFiZWxlZCBhcyBqdXN0IGJpZzUuXG4gICAgLy8gICAgTVMgSW50ZXJuZXQgRXhwbG9yZXIgc3dpdGNoZXMgZnJvbSBiaWc1IHRvIGJpZzUtaGtzY3Mgd2hlbiBhIHBhdGNoIGFwcGxpZWQuXG4gICAgLy8gICAgR3JlYXQgZGlzY3Vzc2lvbiAmIHJlY2FwIG9mIHdoYXQncyBnb2luZyBvbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI0NzAjYzMxXG4gICAgLy8gICAgSW4gdGhlIGVuY29kZXIsIGl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gc3VwcG9ydCBlbmNvZGluZyBvbGQgUFVBIG1hcHBpbmdzIHRvIEJpZzUgYnl0ZXMgc2VxLXMuXG4gICAgLy8gICAgT2ZmaWNpYWwgc3BlYzogaHR0cDovL3d3dy5vZ2Npby5nb3YuaGsvZW4vYnVzaW5lc3MvdGVjaF9wcm9tb3Rpb24vY2NsaS90ZXJtcy9kb2MvMjAwM2NtcF8yMDA4LnR4dFxuICAgIC8vICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub2djaW8uZ292LmhrL3RjL2J1c2luZXNzL3RlY2hfcHJvbW90aW9uL2NjbGkvdGVybXMvZG9jL2hrc2NzLTIwMDgtYmlnNS1pc28udHh0XG4gICAgLy8gXG4gICAgLy8gQ3VycmVudCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0byBkZWFsIHdpdGggQmlnNSgtSEtTQ1MpIGlzIGluIHRoZSBFbmNvZGluZyBTdGFuZGFyZCwgaHR0cDovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYmlnNS1lbmNvZGVyXG4gICAgLy8gVW5pY29kZSBtYXBwaW5nIChodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9PQlNPTEVURS9FQVNUQVNJQS9PVEhFUi9CSUc1LlRYVCkgaXMgc2FpZCB0byBiZSB3cm9uZy5cblxuICAgICd3aW5kb3dzOTUwJzogJ2NwOTUwJyxcbiAgICAnbXM5NTAnOiAnY3A5NTAnLFxuICAgICc5NTAnOiAnY3A5NTAnLFxuICAgICdjcDk1MCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5NTAuanNvbicpIH0sXG4gICAgfSxcblxuICAgIC8vIEJpZzUgaGFzIG1hbnkgdmFyaWF0aW9ucyBhbmQgaXMgYW4gZXh0ZW5zaW9uIG9mIGNwOTUwLiBXZSB1c2UgRW5jb2RpbmcgU3RhbmRhcmQncyBhcyBhIGNvbnNlbnN1cy5cbiAgICAnYmlnNSc6ICdiaWc1aGtzY3MnLFxuICAgICdiaWc1aGtzY3MnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTUwLmpzb24nKS5jb25jYXQocmVxdWlyZSgnLi90YWJsZXMvYmlnNS1hZGRlZC5qc29uJykpIH0sXG4gICAgICAgIGVuY29kZVNraXBWYWxzOiBbMHhhMmNjXSxcbiAgICB9LFxuXG4gICAgJ2NuYmlnNSc6ICdiaWc1aGtzY3MnLFxuICAgICdjc2JpZzUnOiAnYmlnNWhrc2NzJyxcbiAgICAneHhiaWc1JzogJ2JpZzVoa3NjcycsXG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2RiY3MtZGF0YS5qc1xuLy8gbW9kdWxlIGlkID0gMTQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gW1tcIjBcIixcIlxcdTAwMDBcIiwxMjhdLFtcImExXCIsXCLvvaFcIiw2Ml0sW1wiODE0MFwiLFwi44CA44CB44CC77yM77yO44O777ya77yb77yf77yB44Kb44KcwrTvvYDCqO+8vu+/o++8v+ODveODvuOCneOCnuOAg+S7neOAheOAhuOAh+ODvOKAleKAkO+8j++8vO+9nuKIpe+9nOKApuKApeKAmOKAmeKAnOKAne+8iO+8ieOAlOOAle+8u++8ve+9m++9neOAiFwiLDksXCLvvIvvvI3CscOXXCJdLFtcIjgxODBcIixcIsO377yd4omg77yc77ye4omm4omn4oie4oi04pmC4pmAwrDigLLigLPihIPvv6XvvITvv6Dvv6HvvIXvvIPvvIbvvIrvvKDCp+KYhuKYheKXi+KXj+KXjuKXh+KXhuKWoeKWoOKWs+KWsuKWveKWvOKAu+OAkuKGkuKGkOKGkeKGk+OAk1wiXSxbXCI4MWI4XCIsXCLiiIjiiIviiobiiofiioLiioPiiKriiKlcIl0sW1wiODFjOFwiLFwi4oin4oio77+i4oeS4oeU4oiA4oiDXCJdLFtcIjgxZGFcIixcIuKIoOKKpeKMkuKIguKIh+KJoeKJkuKJquKJq+KImuKIveKIneKIteKIq+KIrFwiXSxbXCI4MWYwXCIsXCLihKvigLDima/ima3imarigKDigKHCtlwiXSxbXCI4MWZjXCIsXCLil69cIl0sW1wiODI0ZlwiLFwi77yQXCIsOV0sW1wiODI2MFwiLFwi77yhXCIsMjVdLFtcIjgyODFcIixcIu+9gVwiLDI1XSxbXCI4MjlmXCIsXCLjgYFcIiw4Ml0sW1wiODM0MFwiLFwi44KhXCIsNjJdLFtcIjgzODBcIixcIuODoFwiLDIyXSxbXCI4MzlmXCIsXCLOkVwiLDE2LFwizqNcIiw2XSxbXCI4M2JmXCIsXCLOsVwiLDE2LFwiz4NcIiw2XSxbXCI4NDQwXCIsXCLQkFwiLDUsXCLQgdCWXCIsMjVdLFtcIjg0NzBcIixcItCwXCIsNSxcItGR0LZcIiw3XSxbXCI4NDgwXCIsXCLQvlwiLDE3XSxbXCI4NDlmXCIsXCLilIDilILilIzilJDilJjilJTilJzilKzilKTilLTilLzilIHilIPilI/ilJPilJvilJfilKPilLPilKvilLvilYvilKDilK/ilKjilLfilL/ilJ3ilLDilKXilLjilYJcIl0sW1wiODc0MFwiLFwi4pGgXCIsMTksXCLihaBcIiw5XSxbXCI4NzVmXCIsXCLjjYnjjJTjjKLjjY3jjJjjjKfjjIPjjLbjjZHjjZfjjI3jjKbjjKPjjKvjjYrjjLvjjpzjjp3jjp7jjo7jjo/jj4TjjqFcIl0sW1wiODc3ZVwiLFwi4427XCJdLFtcIjg3ODBcIixcIuOAneOAn+KEluOPjeKEoeOKpFwiLDQsXCLjiLHjiLLjiLnjjb7jjb3jjbziiZLiiaHiiKviiK7iiJHiiJriiqXiiKDiiJ/iir/iiLXiiKniiKpcIl0sW1wiODg5ZlwiLFwi5Lqc5ZSW5aiD6Zi/5ZOA5oSb5oyo5ae26YCi6JG16Iyc56mQ5oKq5o+h5ril5pet6JGm6Iqm6a+15qKT5Zyn5pah5omx5a6b5aeQ6Jm76aO057Wi57a+6a6O5oiW57Kf6KK35a6J5bq15oyJ5pqX5qGI6ZeH6Z6N5p2P5Lul5LyK5L2N5L6d5YGJ5Zuy5aS35aeU5aiB5bCJ5oOf5oSP5oWw5piT5qSF54K655WP55Ww56e757at57ev6IOD6JCO6KGj6KyC6YGV6YG65Yy75LqV5Lql5Z+f6IKy6YOB56Ov5LiA5aOx5rqi6YC456iy6Iyo6IqL6bCv5YWB5Y2w5ZK95ZOh5Zug5ae75byV6aOy5rer6IOk6JStXCJdLFtcIjg5NDBcIixcIumZoumZsOmaoOmfu+WQi+WPs+Wuh+eDj+e+vei/gumbqOWNr+m1nOequuS4keeik+iHvOa4puWYmOWUhOasneiUmumwu+WnpeWOqea1pueTnOmWj+WZguS6kemBi+mbsuiNj+mkjOWPoeWWtuWssOW9seaYoOabs+aghOawuOazs+a0qeeRm+ebiOepjumgtOiLseihm+ipoOmLrea2sueWq+ebiumnheaCpuisgei2iumWsuamjuWOreWGhlwiXSxbXCI4OTgwXCIsXCLlnJLloLDlpYTlrrTlu7bmgKjmjqnmj7Tmsr/mvJTngo7nhJTnhZnnh5XnjL/nuIHoibboi5HolpfpgaDpiZvptJvloanmlrzmsZrnlKXlh7nlpK7lpaXlvoDlv5zmirzml7rmqKrmrKfmrrTnjovnv4HopZbptKzptI7pu4TlsqHmspbojbvlhITlsYvmhrboh4bmobbniaHkuZnkv7rljbjmganmuKnnqY/pn7PkuIvljJbku67kvZXkvL3kvqHkvbPliqDlj6/lmInlpI/lq4Hlrrblr6Hnp5HmmofmnpzmnrbmrYzmsrPngavnj4Lnpo3npr7nqLznrofoirHoi5vojITojbfoj6/oj5PonaboqrLlmKnosqjov6bpgY7pnJ7omorkv4Tls6jmiJHniZnnlLvoh6Xoir3om77os4Dpm4XppJPpp5Xku4vkvJrop6Plm57loYrlo4rlu7vlv6vmgKrmgpTmgaLmh5DmiJLmi5DmlLlcIl0sW1wiOGE0MFwiLFwi6a2B5pmm5qKw5rW354Gw55WM55qG57W16Iql6J+56ZaL6ZqO6LKd5Yex5Yq+5aSW5ZKz5a6z5bSW5oWo5qaC5rav56KN6JOL6KGX6Kmy6Y6n6aq45rWs6aao6JuZ5Z6j5p+/6JuO6YiO5YqD5ZqH5ZCE5buT5ouh5pK55qC85qC45q67542y56K656mr6Kaa6KeS6LWr6LyD6YOt6Zaj6ZqU6Z2p5a2m5bKz5qW96aGN6aGO5o6b56yg5qirXCJdLFtcIjhhODBcIixcIuapv+aitumwjea9n+WJsuWWneaBsOaLrOa0u+a4h+a7keiRm+ikkOi9hOS4lOmwueWPtuakm+aouumehOagquWFnOerg+iSsumHnOmOjOWZm+m0qOagouiMheiQseeypeWIiOiLheeTpuS5vuS+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+ajhFwiXSxbXCI4YjQwXCIsXCLmqZ/luLDmr4XmsJfmsb3nlb/npYjlraPnqIDntIDlvr3opo/oqJjosrTotbfou4zovJ3po6LpqI7prLzkuoDlgb3lhIDlppPlrpzmiK/mioDmk6zmrLrniqDnlpHnpYfnvqnon7voqrzorbDmjqzoj4rpnqDlkInlkIPllqvmoZTmqZjoqbDnoKfmnbXpu43ljbTlrqLohJromZDpgIbkuJjkuYXku4fkvJHlj4rlkLjlrq7lvJPmgKXmlZFcIl0sW1wiOGI4MFwiLFwi5py95rGC5rGy5rOj54G455CD56m256qu56yI57Sa57O+57Wm5pen54mb5Y675bGF5beo5ouS5oug5oyZ5rig6Jma6Kix6Led6Yu45ryB56am6a2a5Lqo5Lqr5Lqs5L6b5L6g5YOR5YWH56u25YWx5Ye25Y2U5Yyh5Y2/5Y+r5Zas5aKD5bOh5by35b2K5oCv5oGQ5oGt5oyf5pWZ5qmL5rOB54uC54ut55+v6IO46ISF6IiI6JWO6YO36Y+h6Z+/6aWX6ama5Luw5Yed5bCt5pqB5qWt5bGA5puy5qW1546J5qGQ57KB5YOF5Yuk5Z2H5be+6Yym5pak5qyj5qy955C056aB56a9562L57eK6Iq56I+M6KG/6KWf6Ky56L+R6YeR5ZCf6YqA5Lmd5YC25Y+l5Yy654uX546W55+p6Ium6Lqv6aeG6aeI6aeS5YW35oSa6Jme5Zaw56m65YG25a+T6YGH6ZqF5Liy5qub6Yen5bGR5bGIXCJdLFtcIjhjNDBcIixcIuaOmOeqn+ayk+mdtOi9oeeqqueGiumaiOeyguagl+e5sOahkemNrOWLsuWQm+iWq+iok+e+pOi7jemDoeWNpuiiiOelgeS/guWCvuWIkeWFhOWVk+WcreePquWei+WlkeW9ouW+hOaBteaFtuaFp+aGqeaOsuaQuuaVrOaZr+ahgua4k+eVpueoveezu+e1jOe2mee5i+e9q+iMjuiNiuibjeioiOipo+itpui7vemgmum2j+iKuOi/jumvqFwiXSxbXCI4YzgwXCIsXCLliofmiJ/mkoPmv4DpmpnmoYHlgpHmrKDmsbrmvZTnqbTntZDooYDoqKPmnIjku7blgLnlgKblgaXlhbzliLjliaPllqflnI/loIXlq4zlu7rmhrLmh7jmi7PmjbLmpJzmqKnnib3niqznjK7noJTnoa/ntbnnnIzogqnopovorJnos6Lou5LpgaPpjbXpmbrpoZXpqJPpubjlhYPljp/ljrPlubvlvKbmuJvmupDnjoTnj77ntYPoiLfoqIDoq7rpmZDkuY7lgIvlj6Tlkbzlm7rlp5HlraTlt7HluqvlvKfmiLjmlYXmnq/muZbni5Dns4roorTogqHog6Hoj7DomY7oqofot6jpiLfpm4fpoafpvJPkupTkupLkvI3ljYjlkYnlkL7lqK/lvozlvqHmgp/moqfmqo7nkZrnooHoqp7oqqTorbfphpDkuZ7pr4nkuqTkvbzkvq/lgJnlgJblhYnlhazlip/lirnli77ljprlj6PlkJFcIl0sW1wiOGQ0MFwiLFwi5ZCO5ZaJ5Z2R5Z6i5aW95a2U5a2d5a6P5bel5ben5be35bm45bqD5bqa5bq35byY5oGS5oWM5oqX5ouY5o6n5pS75piC5pmD5pu05p2t5qCh5qKX5qeL5rGf5rSq5rWp5riv5rqd55Sy55qH56Gs56i/57Og57SF57SY57We57ax6ICV6ICD6IKv6IKx6IWU6IaP6Iiq6I2S6KGM6KGh6Kyb6LKi6LO86YOK6YW16Ymx56C/6Yu86Zak6ZmNXCJdLFtcIjhkODBcIixcIumghemmmemrmOm0u+WJm+WKq+WPt+WQiOWjleaLt+a/oOixqui9n+m6ueWFi+WIu+WRiuWbveepgOmFt+m1oOm7kueNhOa8ieiFsOeUkeW/veaDmumqqOeLm+i+vOatpOmgg+S7iuWbsOWdpOWivuWpmuaBqOaHh+aYj+aYhuagueaisea3t+eXlee0uuiJrumtguS6m+S9kOWPieWUhuW1r+W3puW3ruafu+aymeeRs+egguipkOmOluijn+WdkOW6p+aMq+WCteWCrOWGjeacgOWTieWhnuWmu+WusOW9qeaJjeaOoeagveats+a4iOeBvemHh+eKgOegleegpuelreaWjue0sOiPnOijgei8iemam+WJpOWcqOadkOe9quiyoeWGtOWdgumYquWguuamiuiCtOWSsuW0juWfvOeilem3uuS9nOWJiuWSi+aQvuaYqOaclOafteeqhOetlue0oumMr+ahnOmureesueWMmeWGiuWIt1wiXSxbXCI4ZTQwXCIsXCLlr5/mi7bmkq7mk6bmnK3mrrrolqnpm5HnmpDpr5bmjYzpjIbprqvnmr/mmZLkuInlgpjlj4LlsbHmg6jmkpLmlaPmoZ/nh6bnj4rnlKPnrpfnuoLompXoroPos5vphbjppJDmlqzmmqvmrovku5Xku5TkvLrkvb/liLrlj7jlj7Lll6Plm5vlo6vlp4vlp4nlp7/lrZDlsY3luILluKvlv5fmgJ3mjIfmlK/lrZzmlq/mlr3ml6jmnp3mraJcIl0sW1wiOGU4MFwiLFwi5q275rCP542F56WJ56eB57O457SZ57Sr6IKi6ISC6Iez6KaW6Kme6Kmp6Kmm6KqM6Kuu6LOH6LOc6ZuM6aO85q2v5LqL5Ly85L6N5YWQ5a2X5a+65oWI5oyB5pmC5qyh5ruL5rK754i+55K955eU56OB56S66ICM6ICz6Ieq6JKU6L6e5rGQ6bm/5byP6K2Y6bSr56u66Lu45a6N6Zur5LiD5Y+x5Z+35aSx5auJ5a6k5oKJ5rm/5ryG55a+6LOq5a6f6JSA56+g5YGy5p+06Iqd5bGh6JWK57ie6IiO5YaZ5bCE5o2o6LWm5pac54Wu56S+57SX6ICF6Kyd6LuK6YGu6JuH6YKq5YCf5Yu65bC65p2T54G854i16YWM6YeI6Yyr6Iul5a+C5byx5oO55Li75Y+W5a6I5omL5pyx5q6K54up54+g56iu6IWr6Laj6YWS6aaW5YSS5Y+X5ZGq5a+/5o6I5qi557as6ZyA5Zua5Y+O5ZGoXCJdLFtcIjhmNDBcIixcIuWul+WwseW3nuS/ruaEgeaLvua0suengOeni+e1gue5jee/kuiHreiIn+iSkOihhuilsuiukOi5tOi8r+mAsemFi+mFrOmbhumGnOS7gOS9j+WFheWNgeW+k+aIjuaflOaxgea4i+eNo+e4pumHjemKg+WPlOWkmeWuv+a3keelnee4rueym+WhvueGn+WHuuihk+i/sOS/iuWzu+aYpeeerOero+iInOmnv+WHhuW+quaXrOalr+auiea3s1wiXSxbXCI4ZjgwXCIsXCLmupbmvaTnm77ntJTlt6HpgbXphofpoIblh6bliJ3miYDmmpHmm5nmuJrlurbnt5LnvbLmm7jolq/ol7foq7jliqnlj5nlpbPluo/lvpDmgZXpi6TpmaTlgrflhJ/li53ljKDljYflj6zlk6jllYbllLHlmJflpajlpr7lqLzlrrXlsIblsI/lsJHlsJrluoTluorlu6DlvbDmib/mioTmi5vmjozmjbfmmIfmmIzmmK3mmbbmnb7moqLmqJ/mqLXmsrzmtojmuInmuZjnhLznhKbnhafnl4fnnIHnoZ3npIHnpaXnp7Dnq6DnrJHnsqfntLnogpboj5bokovolYnooZ3oo7PoqJ/oqLzoqZToqbPosaHos57phqTpiabpjb7pkJjpmpzpnpjkuIrkuIjkuJ7kuZflhpflibDln47loLTlo4zlrKLluLjmg4Xmk77mnaHmnZbmtYTnirbnlbPnqaPokrjorbLphrjpjKDlmLHln7Tpo75cIl0sW1wiOTA0MFwiLFwi5out5qSN5q6W54et57mU6IG36Imy6Kem6aOf6J2V6L6x5bC75Ly45L+h5L615ZSH5aig5a+d5a+p5b+D5oWO5oyv5paw5pmL5qOu5qab5rW45rex55Sz55a555yf56We56em57Sz6Iej6Iqv6Jaq6Kaq6Ki66Lqr6L6b6YCy6Yed6ZyH5Lq65LuB5YiD5aG15aOs5bCL55Sa5bC96IWO6KiK6L+F6Zmj6Z2t56yl6KuP6aCI6YWi5Zuz5Y6oXCJdLFtcIjkwODBcIixcIumAl+WQueWeguW4peaOqOawtOeCiuedoeeyi+e/oOihsOmBgumFlOmMkOmMmOmaj+eRnumrhOW0h+W1qeaVsOaeoui2qOmbm+aNruadieakmeiPhemgl+mbgOijvua+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+euree3mlwiXSxbXCI5MTQwXCIsXCLnuYrnvqjohbroiJvoiLnolqboqa7os47ot7Xpgbjpgbfpiq3pipHploPprq7liY3lloTmvLjnhLblhajnpoXnuZXohrPns47lmYzloZHlsqjmjqrmm77mm73mpZrni5nnlo/nlo7npI7npZbnp5/nspfntKDntYTomIfoqLTpmLvpgaHpvKDlg6flibXlj4zlj6LlgInllqrlo67lpY/niL3lrovlsaTljJ3mg6Pmg7PmjZzmjoPmjL/mjrtcIl0sW1wiOTE4MFwiLFwi5pON5pep5pu55bej5qeN5qe95ryV54el5LqJ55ep55u456qT57Of57eP57ac6IGh6I2J6I2Y6JGs6JK86Je76KOF6LWw6YCB6YGt6Y6X6Zyc6aiS5YOP5aKX5oaO6IeT6JS16LSI6YCg5L+D5YG05YmH5Y2z5oGv5o2J5p2f5ris6Laz6YCf5L+X5bGe6LOK5peP57aa5Y2S6KKW5YW25o+D5a2Y5a2r5bCK5pCN5p2R6YGc5LuW5aSa5aSq5rGw6KmR5ZS+5aCV5aal5oOw5omT5p+B6Ii15qWV6ZmA6aeE6aio5L2T5aCG5a++6ICQ5bKx5biv5b6F5oCg5oWL5oi05pu/5rOw5rue6IOO6IW/6IuU6KKL6LK46YCA6YCu6ZqK6bub6a+b5Luj5Y+w5aSn56ys6YaN6aGM6be55rud54Cn5Y2T5ZWE5a6F5omY5oqe5ouT5rKi5r+v55Ci6KiX6ZC45r+B6Ku+6Iy45Yen6Ju45Y+qXCJdLFtcIjkyNDBcIixcIuWPqeS9humBlOi+sOWlquiEseW3veerqui+v+ajmuiwt+eLuOmxiOaoveiqsOS4ueWNmOWYhuWdpuaLheaOouaXpuatjua3oea5m+eCreefreerr+euque2u+iAveiDhuibi+iqlemNm+Wbo+Wjh+W8vuaWreaaluaqgOauteeUt+irh+WApOefpeWcsOW8m+aBpeaZuuaxoOeXtOeomue9ruiHtOicmOmBhemms+evieeVnOerueetkeiThFwiXSxbXCI5MjgwXCIsXCLpgJDnp6nnqpLojLblq6HnnYDkuK3ku7Llrpnlv6Dmir3mmLzmn7Hms6jomavoobfoqLvphY7pi7Ppp5DmqJfngKbnjKroi6fokZfosq/kuIHlhYblh4vllovlr7XluJbluLPluoHlvJTlvLXlvavlvrTmh7LmjJHmmqLmnJ3mva7niZLnlLrnnLrogbTohLnohbjonbboqr/oq5zotoXot7PpiprplbfpoILps6Xli4XmjZfnm7TmnJXmsojnj43os4Ppjq7pmbPmtKXlopzmpI7mp4zov73pjprnl5vpgJrloZrmoILmjrTmp7vkvYPmvKzmn5jovrvolKbntrTpjZTmpL/mvbDlnarlo7flrKzntKzniKrlkIrph6PptrTkuq3kvY7lgZzlgbXliYPosp7lkYjloKTlrprluJ3lupXluq3lu7flvJ/mgozmirXmjLrmj5Dmoq/msYDnoofnpo7nqIvnt6DoiYfoqILoq6bouYTpgJNcIl0sW1wiOTM0MFwiLFwi6YK46YSt6YeY6byO5rOl5pGY5pOi5pW15ru055qE56yb6YGp6Y+R5rq65ZOy5b655pKk6L2N6L+t6YmE5YW45aGr5aSp5bGV5bqX5re757qP55Sc6LK86Lui6aGb54K55Lyd5q6/5r6x55Sw6Zu75YWO5ZCQ5aC15aGX5aas5bGg5b6S5paX5p2c5rih55m76I+f6LOt6YCU6YO96Y2N56Cl56C65Yqq5bqm5Zyf5aW05oCS5YCS5YWa5YasXCJdLFtcIjkzODBcIixcIuWHjeWIgOWUkOWhlOWhmOWll+WuleWztuW2i+aCvOaKleaQreadseahg+aivOajn+ebl+a3mOa5r+a2m+eBr+eHiOW9k+eXmOelt+etieetlOetkuezlue1seWIsOiRo+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+WFpVwiXSxbXCI5NDQwXCIsXCLlpoLlsL/pn67ku7vlporlv43oqo3mv6HnprDnpaLlr6fokbHnjKvnhrHlubTlv7Xmjbvmkprnh4PnspjkuYPlu7zkuYvln5zlmqLmgqnmv4PntI3og73ohLPohr/ovrLoppfomqTlt7Tmiormkq3opofmnbfms6LmtL7nkLbnoLTlqYbnvbXoiq3ppqzkv7Plu4Pmi53mjpLmlZfmna/nm4PniYzog4zogrrovKnphY3lgI3ln7nlqpLmooVcIl0sW1wiOTQ4MFwiLFwi5qWz54Wk54u96LK35aOy6LOg6Zmq6YCZ6J2/56ek55+n6JCp5Lyv5Yml5Y2a5ouN5p+P5rOK55m9566U57KV6Ii26JaE6L+r5pud5ryg54iG57ib6I6r6aeB6bqm5Ye9566x56Gy56646IKH562I5quo5bmh6IKM55WR55Wg5YWr6Ymi5rqM55m66YaX6auq5LyQ572w5oqc562P6Zal6bOp5Zm65aGZ6Juk6Zq85Ly05Yik5Y2K5Y+N5Y+b5biG5pCs5paR5p2/5rC+5rGO54mI54qv54+t55WU57mB6Iis6Jep6LKp56+E6YeG54Wp6aCS6aOv5oy95pmp55Wq55uk56OQ6JWD6Juu5Yyq5Y2R5ZCm5aaD5bqH5b285oKy5omJ5om55oqr5paQ5q+U5rOM55ay55qu56KR56eY57eL57236IKl6KKr6Kq56LK76YG/6Z2e6aOb5qiL57C45YKZ5bC+5b6u5p6H5q+Y55C155yJ576OXCJdLFtcIjk1NDBcIixcIum8u+afiueol+WMueeWi+mrreW9puiGneiPseiCmOW8vOW/heeVouethumAvOahp+Wnq+Wqm+e0kOeZvuisrOS/teW9quaomeawt+a8gueTouelqOihqOipleixueW7n+aPj+eXheenkuiLl+mMqOmLsuiSnOibremwreWTgeW9rOaWjOa1nOeAleiyp+izk+mgu+aVj+eTtuS4jeS7mOWfoOWkq+WppuWvjOWGqOW4g+W6nOaAluaJtuaVt1wiXSxbXCI5NTgwXCIsXCLmlqfmma7mta7niLbnrKbohZDohproipnorZzosqDos6botbTpmJzpmYTkvq7mkqvmraboiJ7okaHolarpg6jlsIHmpZPpoqjokbrolZfkvI/lia/lvqnluYXmnI3npo/ohbnopIfopobmt7XlvJfmiZXmsrjku4/nianprpLliIblkLvlmbTlorPmhqTmia7nhJrlpa7nsonns57ntJvpm7DmlofogZ7kuJnkvbXlhbXloYDluaPlubPlvIrmn4TkuKbolL3plonpmZvnsbPpoIHlg7vlo4HnmZbnoqfliKXnnqXolJHnroblgY/lpInniYfnr4fnt6jovrrov5TpgY3kvr/li4nlqKnlvIHpnq3kv53oiJfpi6rlnIPmjZXmrannlKvoo5zovJTnqYLli5/lopPmhZXmiIrmmq7mr43nsL/oj6nlgKPkv7jljIXlkYbloLHlpYnlrp3ls7Dls6/ltKnlupbmirHmjafmlL7mlrnmnItcIl0sW1wiOTY0MFwiLFwi5rOV5rOh54O556Cy57ir6IOe6Iqz6JCM6JOs6JyC6KSS6Kiq6LGK6YKm6YuS6aO96bOz6bWs5LmP5Lqh5YKN5YmW5Z2K5aao5bi95b+Y5b+Z5oi/5pq05pyb5p+Q5qOS5YaS57Sh6IKq6Iao6KyA6LKM6LK/6Ym+6Ziy5ZCg6aCs5YyX5YOV5Y2c5aKo5pKy5py054mn552m56mG6Yem5YuD5rKh5q6G5aCA5bmM5aWU5pys57+75Yeh55uGXCJdLFtcIjk2ODBcIixcIuaRqeejqOmtlOm6u+Wfi+WmueaYp+aemuavjuWTqeanmeW5leiGnOaelemuquafvumxkuahneS6puS/o+WPiOaKueacq+ayq+i/hOS+ree5rem6v+S4h+aFoua6gOa8q+iUk+WRs+acqumtheW3s+euleWyrOWvhuicnOa5iuiTkeeolOiEiOWmmeeyjeawkeecoOWLmeWkoueEoeeJn+efm+mcp+m1oeaki+Wpv+WomOWGpeWQjeWRveaYjuebn+i/t+mKmOmztOWnqueJnea7heWFjeajiee2v+e3rOmdoum6uuaRuOaooeiMguWmhOWtn+avm+eMm+ebsue2suiAl+iSmeWEsuacqOm7meebruadouWLv+mkheWwpOaIu+exvuiysOWVj+aCtue0i+mWgOWMgeS5n+WGtuWknOeIuuiAtumHjuW8peefouWOhOW9uee0hOiWrOios+i6jemdluafs+iWrumRk+aEieaEiOayueeZklwiXSxbXCI5NzQwXCIsXCLoq63ovLjllK/kvZHlhKrli4flj4vlrqXlub3mgqDmhoLmj5bmnInmn5rmuafmtoznjLbnjLfnlLHnpZDoo5XoqpjpgYrpgpHpg7Xpm4Tono3lpJXkuojkvZnkuI7oqonovL/poJDlgq3lubzlppblrrnlurjmj5rmj7rmk4Hmm5zmpYrmp5jmtIvmurbnhpTnlKjnqq/nvorogIDokYnok4nopoHorKHouIrpgaXpmb3ppIrmhb7mipHmrLJcIl0sW1wiOTc4MFwiLFwi5rKD5rW057+M57+85reA576F6J666KO45p2l6I6x6aC86Zu35rSb57Wh6JC96YWq5Lmx5Y215bWQ5qyE5r+r6JeN6Jit6Kan5Yip5ZCP5bGl5p2O5qKo55CG55KD55ei6KOP6KOh6YeM6Zui6Zm45b6L546H56uL6JGO5o6g55Wl5YqJ5rWB5rqc55CJ55WZ56Gr57KS6ZqG56uc6b6N5L625oWu5peF6Jmc5LqG5Lqu5YOa5Lih5YeM5a+u5paZ5qKB5ra854yf55mC556t56ic57On6Imv6KuS6YG86YeP6Zm16aCY5Yqb57eR5YCr5Y6Y5p6X5reL54eQ55Cz6Ieo6Lyq6Zqj6bGX6bqf55Gg5aGB5raZ57Sv6aGe5Luk5Ly25L6L5Ya35Yqx5ba65oCc546y56S86IuT6Yi06Zq36Zu26ZyK6bqX6b2i5pqm5q205YiX5Yqj54OI6KOC5buJ5oGL5oaQ5ryj54WJ57C+57e06IGvXCJdLFtcIjk4NDBcIixcIuiTrumAo+mMrOWRgumtr+ark+eCieizgui3r+mcsuWKtOWpgeW7iuW8hOacl+alvOamlOa1qua8j+eJoueLvOevreiAgeiBvuidi+mDjuWFrem6k+emhOiCi+mMsuirluWAreWSjOipseatquizhOiEh+aDkeaeoOm3suS6meS6mOmwkOipq+iXgeiVqOakgOa5vueil+iFlVwiXSxbXCI5ODlmXCIsXCLlvIzkuJDkuJXkuKrkuLHkuLbkuLzkuL/kuYLkuZbkuZjkuoLkuoXosavkuoroiJLlvI3kuo7kup7kup/kuqDkuqLkurDkurPkurbku47ku43ku4Tku4bku4Lku5fku57ku63ku5/ku7fkvInkvZrkvLDkvZvkvZ3kvZfkvYfkvbbkvojkvo/kvpjkvbvkvankvbDkvpHkva/kvobkvpblhJjkv5Tkv5/kv47kv5jkv5vkv5Hkv5rkv5Dkv6Tkv6XlgJrlgKjlgJTlgKrlgKXlgIXkvJzkv7blgKHlgKnlgKzkv77kv6/lgJHlgIblgYPlgYfmnIPlgZXlgZDlgYjlgZrlgZblgazlgbjlgoDlgprlgoXlgrTlgrJcIl0sW1wiOTk0MFwiLFwi5YOJ5YOK5YKz5YOC5YOW5YOe5YOl5YOt5YOj5YOu5YO55YO15YSJ5YSB5YSC5YSW5YSV5YSU5YSa5YSh5YS65YS35YS85YS75YS/5YWA5YWS5YWM5YWU5YWi56u45YWp5YWq5YWu5YaA5YaC5ZuY5YaM5YaJ5YaP5YaR5YaT5YaV5YaW5Yak5Yam5Yai5Yap5Yaq5Yar5Yaz5Yax5Yay5Yaw5Ya15Ya95YeF5YeJ5Yeb5Yeg6JmV5Yep5YetXCJdLFtcIjk5ODBcIixcIuWHsOWHteWHvuWIhOWIi+WIlOWIjuWIp+WIquWIruWIs+WIueWJj+WJhOWJi+WJjOWJnuWJlOWJquWJtOWJqeWJs+WJv+WJveWKjeWKlOWKkuWJseWKiOWKkei+qOi+p+WKrOWKreWKvOWKteWLgeWLjeWLl+WLnuWLo+WLpumjreWLoOWLs+WLteWLuOWLueWMhuWMiOeUuOWMjeWMkOWMj+WMleWMmuWMo+WMr+WMseWMs+WMuOWNgOWNhuWNheS4l+WNieWNjeWHluWNnuWNqeWNruWkmOWNu+WNt+WOguWOluWOoOWOpuWOpeWOruWOsOWOtuWPg+ewkumbmeWPn+abvOeHruWPruWPqOWPreWPuuWQgeWQveWRgOWQrOWQreWQvOWQruWQtuWQqeWQneWRjuWSj+WRteWSjuWRn+WRseWRt+WRsOWSkuWRu+WSgOWRtuWShOWSkOWShuWTh+WSouWSuOWSpeWSrOWThOWTiOWSqFwiXSxbXCI5YTQwXCIsXCLlkqvlk4LlkqTlkr7lkrzlk5jlk6Xlk6bllI/llJTlk73lk67lk63lk7rlk6LllLnllYDllaPllYzllK7llZzllYXllZbllZfllLjllLPllZ3llpnlloDlkq/llorllp/llbvllb7llpjllp7llq7llbzlloPllqnllofllqjll5rll4Xll5/ll4Tll5zll6Tll5TlmJTll7flmJbll77ll73lmJvll7nlmY7lmZDnh5/lmLTlmLblmLLlmLhcIl0sW1wiOWE4MFwiLFwi5Zmr5Zmk5Ziv5Zms5Zmq5ZqG5ZqA5ZqK5Zqg5ZqU5ZqP5Zql5Zqu5Zq25Zq05ZuC5Zq85ZuB5ZuD5ZuA5ZuI5ZuO5ZuR5ZuT5ZuX5Zuu5Zu55ZyA5Zu/5ZyE5ZyJ5ZyI5ZyL5ZyN5ZyT5ZyY5ZyW5ZeH5Zyc5Zym5Zy35Zy45Z2O5Zy75Z2A5Z2P5Z2p5Z+A5Z6I5Z2h5Z2/5Z6J5Z6T5Z6g5Z6z5Z6k5Z6q5Z6w5Z+D5Z+G5Z+U5Z+S5Z+T5aCK5Z+W5Z+j5aCL5aCZ5aCd5aGy5aCh5aGi5aGL5aGw5q+A5aGS5aC95aG55aKF5aK55aKf5aKr5aK65aOe5aK75aK45aKu5aOF5aOT5aOR5aOX5aOZ5aOY5aOl5aOc5aOk5aOf5aOv5aO65aO55aO75aO85aO95aSC5aSK5aSQ5aSb5qKm5aSl5aSs5aSt5aSy5aS45aS+56uS5aWV5aWQ5aWO5aWa5aWY5aWi5aWg5aWn5aWs5aWpXCJdLFtcIjliNDBcIixcIuWluOWmgeWmneS9nuS+q+Wmo+WmsuWnhuWnqOWnnOWmjeWnmeWnmuWopeWon+WokeWonOWoieWomuWpgOWprOWpieWoteWotuWpouWpquWqmuWqvOWqvuWri+WrguWqveWro+Wrl+WrpuWrqeWrluWruuWru+WsjOWsi+WsluWssuWrkOWsquWstuWsvuWtg+WtheWtgOWtkeWtleWtmuWtm+WtpeWtqeWtsOWts+WtteWtuOaWiOWtuuWugFwiXSxbXCI5YjgwXCIsXCLlroPlrqblrrjlr4Plr4flr4nlr5Tlr5Dlr6Tlr6blr6Llr57lr6Xlr6vlr7Dlr7blr7PlsIXlsIflsIjlsI3lsJPlsKDlsKLlsKjlsLjlsLnlsYHlsYblsY7lsZPlsZDlsY/lrbHlsazlsa7kuaLlsbblsbnlsozlspHlspTlppvlsqvlsrvlsrblsrzlsrfls4Xlsr7ls4fls5nls6nls73ls7rls63ltozls6rltIvltJXltJfltZzltJ/ltJvltJHltJTltKLltJrltJnltJjltYzltZLltY7ltYvltazltbPltbbltofltoTltoLltqLltp3ltqzltq7ltr3ltpDltrfltrzlt4nlt43lt5Plt5Llt5blt5vlt6vlt7Llt7XluIvluJrluJnluJHluJvluLbluLfluYTluYPluYDluY7luZfluZTluZ/luaLluaTluYflubXlubblubrpurzlub/luqDlu4Hlu4Llu4jlu5Dlu49cIl0sW1wiOWM0MFwiLFwi5buW5buj5bud5bua5bub5bui5buh5buo5bup5bus5bux5buz5buw5bu05bu45bu+5byD5byJ5b2d5b2c5byL5byR5byW5byp5byt5by45b2B5b2I5b2M5b2O5byv5b2R5b2W5b2X5b2Z5b2h5b2t5b2z5b235b6D5b6C5b2/5b6K5b6I5b6R5b6H5b6e5b6Z5b6Y5b6g5b6o5b6t5b685b+W5b+75b+k5b+45b+x5b+d5oKz5b+/5oCh5oGgXCJdLFtcIjljODBcIixcIuaAmeaAkOaAqeaAjuaAseaAm+aAleaAq+aApuaAj+aAuuaBmuaBgeaBquaBt+aBn+aBiuaBhuaBjeaBo+aBg+aBpOaBguaBrOaBq+aBmeaCgeaCjeaDp+aCg+aCmuaChOaCm+aCluaCl+aCkuaCp+aCi+aDoeaCuOaDoOaDk+aCtOW/sOaCveaDhuaCteaDmOaFjeaEleaEhuaDtuaDt+aEgOaDtOaDuuaEg+aEoeaDu+aDseaEjeaEjuaFh+aEvuaEqOaEp+aFiuaEv+aEvOaErOaEtOaEveaFguaFhOaFs+aFt+aFmOaFmeaFmuaFq+aFtOaFr+aFpeaFseaFn+aFneaFk+aFteaGmeaGluaGh+aGrOaGlOaGmuaGiuaGkeaGq+aGruaHjOaHiuaHieaHt+aHiOaHg+aHhuaGuuaHi+e9ueaHjeaHpuaHo+aHtuaHuuaHtOaHv+aHveaHvOaHvuaIgOaIiOaIieaIjeaIjOaIlOaIm1wiXSxbXCI5ZDQwXCIsXCLmiJ7miKHmiKrmiK7miLDmiLLmiLPmiYHmiY7miZ7miaPmiZvmiaDmiajmibzmioLmionmib7mipLmipPmipbmi5TmioPmipTmi5fmi5Hmirvmi4/mi7/mi4bmk5Tmi4jmi5zmi4zmi4rmi4Lmi4fmipvmi4nmjIzmi67mi7HmjKfmjILmjIjmi6/mi7XmjZDmjL7mjY3mkJzmjY/mjpbmjo7mjoDmjqvmjbbmjqPmjo/mjonmjp/mjrXmjatcIl0sW1wiOWQ4MFwiLFwi5o2p5o6+5o+p5o+A5o+G5o+j5o+J5o+S5o+25o+E5pCW5pC05pCG5pCT5pCm5pC25pSd5pCX5pCo5pCP5pGn5pGv5pG25pGO5pSq5pKV5pKT5pKl5pKp5pKI5pK85pOa5pOS5pOF5pOH5pK75pOY5pOC5pOx5pOn6IiJ5pOg5pOh5oqs5pOj5pOv5pSs5pO25pO05pOy5pO65pSA5pO95pSY5pSc5pSF5pSk5pSj5pSr5pS05pS15pS35pS25pS455WL5pWI5pWW5pWV5pWN5pWY5pWe5pWd5pWy5pW45paC5paD6K6K5pab5paf5par5pa35peD5peG5peB5peE5peM5peS5peb5peZ5peg5peh5pex5p2y5piK5piD5pe75p2z5pi15pi25pi05pic5pmP5pmE5pmJ5pmB5pme5pmd5pmk5pmn5pmo5pmf5pmi5pmw5pqD5pqI5pqO5pqJ5pqE5pqY5pqd5puB5pq55puJ5pq+5pq8XCJdLFtcIjllNDBcIixcIuabhOaauOabluabmuaboOaYv+abpuabqeabsOabteabt+acj+acluacnuacpuacp+mcuOacruacv+actuadgeacuOact+adhuadnuadoOadmeado+adpOaeieadsOaeqeadvOadquaejOaei+aepuaeoeaeheaet+afr+aetOafrOaes+afqeaeuOafpOafnuafneafouafruaeueafjuafhuafp+aqnOagnuahhuagqeahgOahjeagsuahjlwiXSxbXCI5ZTgwXCIsXCLmorPmoKvmoZnmoaPmobfmob/mop/moo/moq3mopTmop3mopvmooPmqq7mornmobTmorXmoqDmorrmpI/moo3mob7mpIHmo4rmpIjmo5jmpKLmpKbmo6HmpIzmo43mo5Tmo6fmo5XmpLbmpJLmpITmo5fmo6PmpKXmo7nmo6Dmo6/mpKjmpKrmpJrmpKPmpKHmo4bmpbnmpbfmpZzmpbjmpavmpZTmpb7mpa7mpLnmpbTmpL3mpZnmpLDmpaHmpZ7mpZ3mpoHmparmprLmpq7mp5Dmpr/mp4Hmp5Pmpr7mp47lr6jmp4rmp53mprvmp4PmpqfmqK7mppHmpqDmppzmppXmprTmp57mp6jmqILmqJvmp7/mrIrmp7nmp7Lmp6fmqIXmprHmqJ7mp63mqJTmp6vmqIrmqJLmq4HmqKPmqJPmqYTmqIzmqbLmqLbmqbjmqYfmqaLmqZnmqabmqYjmqLjmqKLmqpDmqo3mqqDmqoTmqqLmqqNcIl0sW1wiOWY0MFwiLFwi5qqX6JiX5qq75quD5quC5qq45qqz5qqs5que5quR5quf5qqq5qua5quq5qu75qyF6JiW5qu65qyS5qyW6ayx5qyf5qy45qy355uc5qy56aOu5q2H5q2D5q2J5q2Q5q2Z5q2U5q2b5q2f5q2h5q245q255q2/5q6A5q6E5q6D5q6N5q6Y5q6V5q6e5q6k5q6q5q6r5q6v5q6y5q6x5q6z5q635q685q+G5q+L5q+T5q+f5q+s5q+r5q+z5q+vXCJdLFtcIjlmODBcIixcIum6vuawiOawk+awlOawm+awpOawo+axnuaxleaxouaxquayguayjeaymuaygeaym+axvuaxqOaxs+aykuaykOazhOazseazk+ayveazl+azheazneayruayseayvuayuuazm+azr+azmeazqua0n+ihjea0tua0q+a0vea0uOa0mea0tea0s+a0kua0jOa1o+a2k+a1pOa1mua1uea1mea2jua2lea/pOa2hea3uea4lea4iua2tea3h+a3pua2uOa3hua3rOa3nua3jOa3qOa3kua3hea3uua3mea3pOa3lea3qua3rua4rea5rua4rua4mea5sua5n+a4vua4o+a5q+a4q+a5tua5jea4n+a5g+a4uua5jua4pOa7v+a4nea4uOa6gua6qua6mOa7iea6t+a7k+a6vea6r+a7hOa6sua7lOa7lea6j+a6pea7gua6n+a9gea8keeBjOa7rOa7uOa7vua8v+a7sua8sea7r+a8sua7jFwiXSxbXCJlMDQwXCIsXCLmvL7mvJPmu7fmvobmvbrmvbjmvoHmvoDmva/mvZvmv7Pmva3mvoLmvbzmvZjmvo7mvpHmv4LmvabmvrPmvqPmvqHmvqTmvrnmv4bmvqrmv5/mv5Xmv6zmv5Tmv5jmv7Hmv67mv5vngInngIvmv7rngJHngIHngI/mv77ngJvngJrmvbTngJ3ngJjngJ/ngLDngL7ngLLngZHngaPngpnngpLngq/ng7HngqzngrjngrPngq7ng5/ng4vng51cIl0sW1wiZTA4MFwiLFwi54OZ54SJ54O954Sc54SZ54Wl54WV54aI54Wm54Wi54WM54WW54Ws54aP54e754aE54aV54ao54as54eX54a554a+54eS54eJ54eU54eO54eg54es54en54e154e854e554e/54iN54iQ54ib54io54it54is54iw54iy54i754i854i/54mA54mG54mL54mY54m054m+54qC54qB54qH54qS54qW54qi54qn54q554qy54uD54uG54uE54uO54uS54ui54ug54uh54u554u35YCP54yX54yK54yc54yW54yd54y054yv54yp54yl54y+542O542P6buY542X542q542o542w542454215427542654+I546z54+O546754+A54+l54+u54+e55Ki55CF55Gv55Cl54+455Cy55C655GV55C/55Gf55GZ55GB55Gc55Gp55Gw55Gj55Gq55G255G+55KL55Ke55Kn55OK55OP55OU54+xXCJdLFtcImUxNDBcIixcIueToOeTo+eTp+eTqeeTrueTsueTsOeTseeTuOeTt+eUhOeUg+eUheeUjOeUjueUjeeUleeUk+eUnueUpueUrOeUvOeVhOeVjeeViueVieeVm+eVhueVmueVqeeVpOeVp+eVq+eVreeVuOeVtueWhueWh+eVtOeWiueWieeWgueWlOeWmueWneeWpeeWo+eXgueWs+eXg+eWteeWveeWuOeWvOeWseeXjeeXiueXkueXmeeXo+eXnueXvueXv1wiXSxbXCJlMTgwXCIsXCLnl7znmIHnl7Dnl7rnl7Lnl7PnmIvnmI3nmInnmJ/nmKfnmKDnmKHnmKLnmKTnmLTnmLDnmLvnmYfnmYjnmYbnmZznmZjnmaHnmaLnmajnmannmarnmafnmaznmbDnmbLnmbbnmbjnmbznmoDnmoPnmojnmovnmo7nmpbnmpPnmpnnmprnmrDnmrTnmrjnmrnnmrrnm4Lnm43nm5bnm5Lnm57nm6Hnm6Xnm6fnm6romK/nm7vnnIjnnIfnnITnnKnnnKTnnJ7nnKXnnKbnnJvnnLfnnLjnnYfnnZrnnajnnavnnZvnnaXnnb/nnb7nnbnnno7nnovnnpHnnqDnnp7nnrDnnrbnnrnnnr/nnrznnr3nnrvnn4fnn43nn5fnn5rnn5znn6Pnn67nn7znoIznoJLnpKbnoKDnpKrnoYXnoo7nobTnoobnobznoprnooznoqPnorXnoqrnoq/no5Hno4bno4vno5Tnor7norzno4Xno4rno6xcIl0sW1wiZTI0MFwiLFwi56On56Oa56O956O056SH56SS56SR56SZ56Ss56Sr56WA56Wg56WX56Wf56Wa56WV56WT56W656W/56aK56ad56an6b2L56aq56au56az56a556a656eJ56eV56en56es56eh56ej56iI56iN56iY56iZ56ig56if56aA56ix56i756i+56i356mD56mX56mJ56mh56mi56mp6b6d56mw56m556m956qI56qX56qV56qY56qW56qp56uI56qwXCJdLFtcImUyODBcIixcIueqtuerheerhOeqv+mCg+erh+eriuerjeerj+erleerk+ermeermuerneeroeerouerpuerreersOesguesj+esiueshuess+esmOesmeesnuesteesqOestuetkOetuueshOetjeesi+etjOetheetteetpeettOetp+etsOetseetrOetrueuneeumOeun+eujeeunOeumueui+eukueuj+etneeumeevi+evgeevjOevj+eutOevhuevneevqeewkeewlOevpuevpeexoOewgOewh+ewk+evs+evt+ewl+ewjeevtuewo+ewp+ewquewn+ewt+ewq+ewveexjOexg+exlOexj+exgOexkOexmOexn+expOexluexpeexrOexteeyg+eykOeypOeyreeyoueyq+eyoeeyqOeys+eysueyseeyrueyueeyveezgOezheezguezmOezkueznOezoumsu+ezr+ezsueztOeztuezuue0hlwiXSxbXCJlMzQwXCIsXCLntILntJzntJXntIrntYXntYvntK7ntLLntL/ntLXntYbntbPntZbntY7ntbLntajnta7ntY/ntaPntpPntonntZvnto/ntb3ntpvntrrntq7ntqPntrXnt4fntr3ntqvnuL3ntqLntq/nt5zntrjntp/ntrDnt5jnt53nt6Tnt57nt7vnt7Lnt6HnuIXnuIrnuKPnuKHnuJLnuLHnuJ/nuInnuIvnuKLnuYbnuabnuLvnuLXnuLnnuYPnuLdcIl0sW1wiZTM4MFwiLFwi57iy57i657mn57md57mW57me57mZ57ma57m557mq57mp57m857m757qD57eV57m96L6u57m/57qI57qJ57qM57qS57qQ57qT57qU57qW57qO57qb57qc57y457y6572F572M572N572O572Q572R572V572U572Y572f572g572o572p572n5724576C576G576D576I576H576M576U576e576d576a576j576v576y5765576u576257646K2x57+F57+G57+K57+V57+U57+h57+m57+p57+z57+56aOc6ICG6ICE6ICL6ICS6ICY6ICZ6ICc6ICh6ICo6IC/6IC76IGK6IGG6IGS6IGY6IGa6IGf6IGi6IGo6IGz6IGy6IGw6IG26IG56IG96IG/6IKE6IKG6IKF6IKb6IKT6IKa6IKt5YaQ6IKs6IOb6IOl6IOZ6IOd6IOE6IOa6IOW6ISJ6IOv6IOx6ISb6ISp6ISj6ISv6IWLXCJdLFtcImU0NDBcIixcIumai+iFhuiEvuiFk+iFkeiDvOiFseiFruiFpeiFpuiFtOiGg+iGiOiGiuiGgOiGguiGoOiGleiGpOiGo+iFn+iGk+iGqeiGsOiGteiGvuiGuOiGveiHgOiHguiGuuiHieiHjeiHkeiHmeiHmOiHiOiHmuiHn+iHoOiHp+iHuuiHu+iHvuiIgeiIguiIheiIh+iIiuiIjeiIkOiIluiIqeiIq+iIuOiIs+iJgOiJmeiJmOiJneiJmuiJn+iJpFwiXSxbXCJlNDgwXCIsXCLoiaLoiajoiaroiavoiK7oibHoibfoibjoib7oio3oipLoiqvoip/oirvoiqzoi6Hoi6Poi5/oi5Loi7Toi7Poi7rojpPojIPoi7voi7noi57ojIboi5zojInoi5nojLXojLTojJbojLLojLHojYDojLnojZDojYXojK/ojKvojJfojJjojoXojprojqrojp/ojqLojpbojKPojo7ojofojorojbzojrXojbPojbXojqDojonojqjoj7TokJPoj6voj47oj73okIPoj5jokIvoj4Hoj7fokIfoj6Doj7LokI3okKLokKDojr3okLjolIboj7voka3okKrokLzolZrokoTokbfokavokq3oka7okoLokanokYbokKzoka/okbnokLXok4rokaLokrnokr/okp/ok5nok43okrvok5rok5Dok4Hok4bok5bokqHolKHok7/ok7TolJfolJjolKzolJ/olJXolJTok7zolYDolaPolZjolYhcIl0sW1wiZTU0MFwiLFwi6JWB6JiC6JWL6JWV6JaA6Jak6JaI6JaR6JaK6Jao6JWt6JaU6Jab6Jeq6JaH6Jac6JW36JW+6JaQ6JeJ6Ja66JeP6Ja56JeQ6JeV6Jed6Jel6Jec6Je56JiK6JiT6JiL6Je+6Je66JiG6Jii6Jia6Jiw6Ji/6JmN5LmV6JmU6Jmf6Jmn6Jmx6JqT6Jqj6Jqp6Jqq6JqL6JqM6Jq26Jqv6JuE6JuG6Jqw6JuJ6KCj6Jqr6JuU6Jue6Jup6JusXCJdLFtcImU1ODBcIixcIuibn+ibm+ibr+ickuichuiciOicgOicg+ibu+ickeicieicjeibueiciuictOicv+ict+icu+icpeicqeicmuidoOidn+iduOidjOidjuidtOidl+idqOidruidmeidk+ido+idquigheieouien+ieguier+ifi+ieveifgOifkOmbluieq+ifhOies+ifh+ifhuieu+ifr+ifsuifoOigj+igjeifvuiftuift+igjuifkuigkeigluigleigouigoeigseigtuigueigp+igu+ihhOihguihkuihmeihnuihouihq+iigeihvuiinuihteihveiiteihsuiiguiil+iikuiiruiimeiiouiijeiipOiisOiiv+iiseijg+ijhOijlOijmOijmeijneijueikguijvOijtOijqOijsuikhOikjOikiuikk+ilg+iknuikpeikquikq+ilgeilhOiku+iktuikuOiljOikneiloOilnlwiXSxbXCJlNjQwXCIsXCLopabopaTopa3oparopa/opbTopbfopb7opoPopojoporoppPoppjopqHopqnopqbopqzopq/oprLoprropr3opr/op4Dop5rop5zop53op6fop7Top7joqIPoqJboqJDoqIzoqJvoqJ3oqKXoqLboqYHoqZvoqZLoqYboqYjoqbzoqa3oqazoqaLoqoXoqoLoqoToqqjoqqHoqpHoqqXoqqboqproqqPoq4Toq43oq4Loq5roq6voq7Poq6dcIl0sW1wiZTY4MFwiLFwi6Kuk6Kux6KyU6Kug6Kui6Ku36Kue6Kub6KyM6KyH6Kya6Kuh6KyW6KyQ6KyX6Kyg6Kyz6Z6r6Kym6Kyr6Ky+6Kyo6K2B6K2M6K2P6K2O6K2J6K2W6K2b6K2a6K2r6K2f6K2s6K2v6K206K296K6A6K6M6K6O6K6S6K6T6K6W6K6Z6K6a6LC66LGB6LC/6LGI6LGM6LGO6LGQ6LGV6LGi6LGs6LG46LG66LKC6LKJ6LKF6LKK6LKN6LKO6LKU6LG86LKY5oid6LKt6LKq6LK96LKy6LKz6LKu6LK26LOI6LOB6LOk6LOj6LOa6LO96LO66LO76LSE6LSF6LSK6LSH6LSP6LSN6LSQ6b2O6LST6LON6LSU6LSW6LWn6LWt6LWx6LWz6LaB6LaZ6LeC6La+6La66LeP6Lea6LeW6LeM6Leb6LeL6Leq6Ler6Lef6Lej6Le86LiI6LiJ6Le/6Lid6Lie6LiQ6Lif6LmC6Li16Liw6Li06LmKXCJdLFtcImU3NDBcIixcIui5h+i5iei5jOi5kOi5iOi5mei5pOi5oOi4qui5o+i5lei5tui5sui5vOi6gei6h+i6hei6hOi6i+i6iui6k+i6kei6lOi6mei6qui6oei6rOi6sOi7hui6sei6vui7hei7iOi7i+i7m+i7o+i7vOi7u+i7q+i7vui8iui8hei8lei8kui8mei8k+i8nOi8n+i8m+i8jOi8pui8s+i8u+i8uei9hei9gui8vui9jOi9iei9hui9jui9l+i9nFwiXSxbXCJlNzgwXCIsXCLovaLovaPovaTovpzovp/ovqPovq3ovq/ovrfov5rov6Xov6Lov6rov6/pgofov7TpgIXov7nov7rpgJHpgJXpgKHpgI3pgJ7pgJbpgIvpgKfpgLbpgLXpgLnov7jpgY/pgZDpgZHpgZLpgI7pgYnpgL7pgZbpgZjpgZ7pgajpga/pgbbpmqjpgbLpgoLpgb3pgoHpgoDpgorpgonpgo/pgqjpgq/pgrHpgrXpg6Lpg6TmiYjpg5vphILphJLphJnphLLphLDphYrphZbphZjphaPphaXphanphbPphbLphovphonphoLphqLphqvphq/phqrphrXphrTphrrph4Dph4Hph4nph4vph5Dph5bph5/ph6Hph5vph7zph7Xph7bpiJ7ph7/piJTpiKzpiJXpiJHpiZ7piZfpiYXpiYnpiaTpiYjpipXpiL/piYvpiZDpipzpipbpipPpipvpiZrpi4/pirnpirfpi6npjI/pi7rpjYTpjK5cIl0sW1wiZTg0MFwiLFwi6YyZ6Yyi6Yya6Yyj6Yy66Yy16Yy76Y2c6Y2g6Y286Y2u6Y2W6Y6w6Y6s6Y6t6Y6U6Y656Y+W6Y+X6Y+o6Y+l6Y+Y6Y+D6Y+d6Y+Q6Y+I6Y+k6ZCa6ZCU6ZCT6ZCD6ZCH6ZCQ6ZC26ZCr6ZC16ZCh6ZC66ZGB6ZGS6ZGE6ZGb6ZGg6ZGi6ZGe6ZGq6Yip6ZGw6ZG16ZG36ZG96ZGa6ZG86ZG+6ZKB6ZG/6ZaC6ZaH6ZaK6ZaU6ZaW6ZaY6ZaZXCJdLFtcImU4ODBcIixcIumWoOmWqOmWp+mWremWvOmWu+mWuemWvumXiua/tumXg+mXjemXjOmXlemXlOmXlumXnOmXoemXpemXoumYoemYqOmYrumYr+mZgumZjOmZj+mZi+mZt+mZnOmZnumZnemZn+mZpumZsumZrOmajemamOmalemal+maqumap+masemasumasOmatOmatumauOmauembjumbi+mbiembjeiljembnOmcjemblembuemchOmchumciOmck+mcjumckemcj+mclumcmemcpOmcqumcsOmcuemcvemcvumdhOmdhumdiOmdgumdiemdnOmdoOmdpOmdpumdqOWLkumdq+mdsemduemehemdvOmegemduumehumei+mej+mekOmenOmeqOmepumeo+mes+metOmfg+mfhumfiOmfi+mfnOmfrem9j+mfsuern+mftumftemgj+mgjOmguOmgpOmgoemgt+mgvemhhumhj+mhi+mhq+mhr+mhsFwiXSxbXCJlOTQwXCIsXCLpobHpobTpobPpoqrpoq/porHporbpo4Tpo4Ppo4bpo6npo6vppIPppInppJLppJTppJjppKHppJ3ppJ7ppKTppKDppKzppK7ppL3ppL7ppYLppYnppYXppZDppYvppZHppZLppYzppZXpppfpppjppqXppq3ppq7pprzpp5/pp5vpp53pp5jpp5Hpp63pp67pp7Hpp7Lpp7vpp7jpqIHpqI/pqIXpp6LpqJnpqKvpqLfpqYXpqYLpqYDpqYNcIl0sW1wiZTk4MFwiLFwi6ai+6amV6amN6amb6amX6amf6ami6aml6amk6amp6amr6amq6aqt6aqw6aq86auA6auP6auR6auT6auU6aue6auf6aui6auj6aum6auv6aur6auu6au06aux6au36au76ayG6ayY6aya6ayf6ayi6ayj6ayl6ayn6ayo6ayp6ayq6ayu6ayv6ayy6a2E6a2D6a2P6a2N6a2O6a2R6a2Y6a206a6T6a6D6a6R6a6W6a6X6a6f6a6g6a6o6a606a+A6a+K6a656a+G6a+P6a+R6a+S6a+j6a+i6a+k6a+U6a+h6bC66a+y6a+x6a+w6bCV6bCU6bCJ6bCT6bCM6bCG6bCI6bCS6bCK6bCE6bCu6bCb6bCl6bCk6bCh6bCw6bGH6bCy6bGG6bC+6bGa6bGg6bGn6bG26bG46bOn6bOs6bOw6bSJ6bSI6bOr6bSD6bSG6bSq6bSm6bav6bSj6bSf6bWE6bSV6bSS6bWB6bS/6bS+6bWG6bWIXCJdLFtcImVhNDBcIixcIum1nem1num1pOm1kem1kOm1mem1sum2iem2h+m2q+m1r+m1uum2mum2pOm2qem2sum3hOm3gem2u+m2uOm2uum3hum3j+m3gum3mem3k+m3uOm3pum3rem3r+m3vem4mum4m+m4num5tem5uem5vem6gem6iOm6i+m6jOm6kum6lem6kem6nem6pem6qem6uOm6qum6remdoem7jOm7jum7j+m7kOm7lOm7nOm7num7nem7oOm7pem7qOm7r1wiXSxbXCJlYTgwXCIsXCLpu7Tpu7bpu7fpu7npu7vpu7zpu73pvIfpvIjnmrfpvJXpvKHpvKzpvL7pvYrpvZLpvZTpvaPpvZ/pvaDpvaHpvabpvafpvazpvarpvbfpvbLpvbbpvpXpvpzpvqDloK/mp4fpgZnnkaTlh5znhplcIl0sW1wiZWQ0MFwiLFwi57qK6KSc6Y2I6YqI6JOc5L+J54K75pix5qOI6Yu55pu75b2F5Lio5Luh5Lu85LyA5LyD5Ly55L2W5L6S5L6K5L6a5L6U5L+N5YGA5YCi5L+/5YCe5YGG5YGw5YGC5YKU5YO05YOY5YWK5YWk5Yad5Ya+5Yes5YiV5Yqc5Yqm5YuA5Yub5YyA5YyH5Yyk5Y2y5Y6T5Y6y5Y+d76iO5ZKc5ZKK5ZKp5ZO/5ZaG5Z2Z5Z2l5Z6s5Z+I5Z+H76iPXCJdLFtcImVkODBcIixcIu+okOWinuWisuWki+Wlk+Wlm+WlneWlo+WmpOWmuuWtluWvgOeUr+WvmOWvrOWwnuWypuWyuuWzteW0p+W1k++okeW1guW1reW2uOW2ueW3kOW8oeW8tOW9p+W+t+W/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++oleeHgeeHvueKsVwiXSxbXCJlZTQwXCIsXCLnir7njKTvqJbnjbfnjr3nj4nnj5bnj6Pnj5LnkIfnj7XnkKbnkKrnkKnnkK7nkaLnkonnkp/nlIHnla/nmoLnmpznmp7nmpvnmqbvqJfnnYbliq/noKHnoY7noaTnobrnpLDvqJjvqJnvqJrnppTvqJvnppvnq5Hnq6fvqJznq6vnrp7vqJ3ntYjntZzntrfntqDnt5bnuZLnvYfnvqHvqJ7ojIHojaLojb/oj4foj7bokYjokrTolZPolZlcIl0sW1wiZWU4MFwiLFwi6JWr76if6Jaw76ig76ih6KCH6KO16KiS6Ki36Km56Kqn6Kq+6Kuf76ii6Ku26K2T6K2/6LOw6LO06LSS6LW276ij6LuP76ik76il6YGn6YOe76im6YSV6YSn6Yea6YeX6Yee6Yet6Yeu6Yek6Yel6YiG6YiQ6YiK6Yi66YmA6Yi86YmO6YmZ6YmR6Yi56Ymn6Yqn6Ym36Ym46Yun6YuX6YuZ6YuQ76in6YuV6Yug6YuT6Yyl6Yyh6Yu776io6Yye6Yu/6Yyd6YyC6Y2w6Y2X6Y6k6Y+G6Y+e6Y+46ZCx6ZGF6ZGI6ZaS76ec76ip6Zqd6Zqv6Zyz6Zy76Z2D6Z2N6Z2P6Z2R6Z2V6aGX6aGl76iq76ir6aSn76is6aae6amO6auZ6auc6a216a2y6a6P6a6x6a676bCA6bWw6bWr76it6biZ6buRXCJdLFtcImVlZWZcIixcIuKFsFwiLDksXCLvv6Lvv6TvvIfvvIJcIl0sW1wiZjA0MFwiLFwi7oCAXCIsNjJdLFtcImYwODBcIixcIu6Av1wiLDEyNF0sW1wiZjE0MFwiLFwi7oK8XCIsNjJdLFtcImYxODBcIixcIu6Du1wiLDEyNF0sW1wiZjI0MFwiLFwi7oW4XCIsNjJdLFtcImYyODBcIixcIu6Gt1wiLDEyNF0sW1wiZjM0MFwiLFwi7oi0XCIsNjJdLFtcImYzODBcIixcIu6Js1wiLDEyNF0sW1wiZjQ0MFwiLFwi7ouwXCIsNjJdLFtcImY0ODBcIixcIu6Mr1wiLDEyNF0sW1wiZjU0MFwiLFwi7o6sXCIsNjJdLFtcImY1ODBcIixcIu6Pq1wiLDEyNF0sW1wiZjY0MFwiLFwi7pGoXCIsNjJdLFtcImY2ODBcIixcIu6Sp1wiLDEyNF0sW1wiZjc0MFwiLFwi7pSkXCIsNjJdLFtcImY3ODBcIixcIu6Vo1wiLDEyNF0sW1wiZjg0MFwiLFwi7pegXCIsNjJdLFtcImY4ODBcIixcIu6Yn1wiLDEyNF0sW1wiZjk0MFwiLFwi7pqcXCJdLFtcImZhNDBcIixcIuKFsFwiLDksXCLihaBcIiw5LFwi77+i77+k77yH77yC44ix4oSW4oSh4oi157qK6KSc6Y2I6YqI6JOc5L+J54K75pix5qOI6Yu55pu75b2F5Lio5Luh5Lu85LyA5LyD5Ly55L2W5L6S5L6K5L6a5L6U5L+N5YGA5YCi5L+/5YCe5YGG5YGw5YGC5YKU5YO05YOY5YWKXCJdLFtcImZhODBcIixcIuWFpOWGneWGvuWHrOWIleWKnOWKpuWLgOWLm+WMgOWMh+WMpOWNsuWOk+WOsuWPne+ojuWSnOWSiuWSqeWTv+WWhuWdmeWdpeWerOWfiOWfh++oj++okOWinuWisuWki+Wlk+Wlm+WlneWlo+WmpOWmuuWtluWvgOeUr+WvmOWvrOWwnuWypuWyuuWzteW0p+W1k++okeW1guW1reW2uOW2ueW3kOW8oeW8tOW9p+W+t+W/nuaBneaCheaCiuaDnuaDleaEoOaDsuaEkeaEt+aEsOaGmOaIk+aKpuaPteaRoOaSneaTjuaVjuaYgOaYleaYu+aYieaYruaYnuaYpOaZpeaZl+aZme+okuaZs+aameaaoOaasuaav+abuuacju+kqeadpuaeu+ahkuafgOaggeahhOajj++ok+alqO+olOammOanouaosOapq+aphuaps+apvuarouarpOavluawv+axnOayhuaxr+azmua0hOa2h+a1r1wiXSxbXCJmYjQwXCIsXCLmtpbmtqzmt4/mt7jmt7Lmt7zmuLnmuZzmuKfmuLzmur/mvojmvrXmv7XngIXngIfngKjngoXngqvnhI/nhITnhZznhYbnhYfvqJXnh4Hnh77nirHnir7njKTvqJbnjbfnjr3nj4nnj5bnj6Pnj5LnkIfnj7XnkKbnkKrnkKnnkK7nkaLnkonnkp/nlIHnla/nmoLnmpznmp7nmpvnmqbvqJfnnYbliq/noKHnoY7noaTnobrnpLDvqJjvqJlcIl0sW1wiZmI4MFwiLFwi76ia56aU76ib56ab56uR56un76ic56ur566e76id57WI57Wc57a357ag57eW57mS572H576h76ie6IyB6I2i6I2/6I+H6I+26JGI6JK06JWT6JWZ6JWr76if6Jaw76ig76ih6KCH6KO16KiS6Ki36Km56Kqn6Kq+6Kuf76ii6Ku26K2T6K2/6LOw6LO06LSS6LW276ij6LuP76ik76il6YGn6YOe76im6YSV6YSn6Yea6YeX6Yee6Yet6Yeu6Yek6Yel6YiG6YiQ6YiK6Yi66YmA6Yi86YmO6YmZ6YmR6Yi56Ymn6Yqn6Ym36Ym46Yun6YuX6YuZ6YuQ76in6YuV6Yug6YuT6Yyl6Yyh6Yu776io6Yye6Yu/6Yyd6YyC6Y2w6Y2X6Y6k6Y+G6Y+e6Y+46ZCx6ZGF6ZGI6ZaS76ec76ip6Zqd6Zqv6Zyz6Zy76Z2D6Z2N6Z2P6Z2R6Z2V6aGX6aGl76iq76ir6aSn76is6aae6amO6auZXCJdLFtcImZjNDBcIixcIumrnOmttemtsumuj+musemuu+mwgOm1sOm1q++orem4mem7kVwiXV1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdGFibGVzL3NoaWZ0amlzLmpzb25cbi8vIG1vZHVsZSBpZCA9IDE0NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFtbXCIwXCIsXCJcXHUwMDAwXCIsMTI3XSxbXCI4ZWExXCIsXCLvvaFcIiw2Ml0sW1wiYTFhMVwiLFwi44CA44CB44CC77yM77yO44O777ya77yb77yf77yB44Kb44KcwrTvvYDCqO+8vu+/o++8v+ODveODvuOCneOCnuOAg+S7neOAheOAhuOAh+ODvOKAleKAkO+8j++8vO+9nuKIpe+9nOKApuKApeKAmOKAmeKAnOKAne+8iO+8ieOAlOOAle+8u++8ve+9m++9neOAiFwiLDksXCLvvIvvvI3CscOXw7fvvJ3iiaDvvJzvvJ7iiabiiafiiJ7iiLTimYLimYDCsOKAsuKAs+KEg++/pe+8hO+/oO+/oe+8he+8g++8hu+8iu+8oMKn4piG4piF4peL4peP4peO4peHXCJdLFtcImEyYTFcIixcIuKXhuKWoeKWoOKWs+KWsuKWveKWvOKAu+OAkuKGkuKGkOKGkeKGk+OAk1wiXSxbXCJhMmJhXCIsXCLiiIjiiIviiobiiofiioLiioPiiKriiKlcIl0sW1wiYTJjYVwiLFwi4oin4oio77+i4oeS4oeU4oiA4oiDXCJdLFtcImEyZGNcIixcIuKIoOKKpeKMkuKIguKIh+KJoeKJkuKJquKJq+KImuKIveKIneKIteKIq+KIrFwiXSxbXCJhMmYyXCIsXCLihKvigLDima/ima3imarigKDigKHCtlwiXSxbXCJhMmZlXCIsXCLil69cIl0sW1wiYTNiMFwiLFwi77yQXCIsOV0sW1wiYTNjMVwiLFwi77yhXCIsMjVdLFtcImEzZTFcIixcIu+9gVwiLDI1XSxbXCJhNGExXCIsXCLjgYFcIiw4Ml0sW1wiYTVhMVwiLFwi44KhXCIsODVdLFtcImE2YTFcIixcIs6RXCIsMTYsXCLOo1wiLDZdLFtcImE2YzFcIixcIs6xXCIsMTYsXCLPg1wiLDZdLFtcImE3YTFcIixcItCQXCIsNSxcItCB0JZcIiwyNV0sW1wiYTdkMVwiLFwi0LBcIiw1LFwi0ZHQtlwiLDI1XSxbXCJhOGExXCIsXCLilIDilILilIzilJDilJjilJTilJzilKzilKTilLTilLzilIHilIPilI/ilJPilJvilJfilKPilLPilKvilLvilYvilKDilK/ilKjilLfilL/ilJ3ilLDilKXilLjilYJcIl0sW1wiYWRhMVwiLFwi4pGgXCIsMTksXCLihaBcIiw5XSxbXCJhZGMwXCIsXCLjjYnjjJTjjKLjjY3jjJjjjKfjjIPjjLbjjZHjjZfjjI3jjKbjjKPjjKvjjYrjjLvjjpzjjp3jjp7jjo7jjo/jj4TjjqFcIl0sW1wiYWRkZlwiLFwi442744Cd44Cf4oSW44+N4oSh44qkXCIsNCxcIuOIseOIsuOIueONvuONveONvOKJkuKJoeKIq+KIruKIkeKImuKKpeKIoOKIn+KKv+KIteKIqeKIqlwiXSxbXCJiMGExXCIsXCLkupzllJblqIPpmL/lk4DmhJvmjKjlp7bpgKLokbXojJznqZDmgqrmj6HmuKXml63okaboiqbpr7XmopPlnKfmlqHmibHlrpvlp5Dombvpo7TntaLntr7pro7miJbnsp/oorflronlurXmjInmmpfmoYjpl4fpno3mnY/ku6XkvIrkvY3kvp3lgYnlm7LlpLflp5TlqIHlsInmg5/mhI/mhbDmmJPmpIXngrrnlY/nlbDnp7vntq3nt6/og4PokI7ooaPorILpgZXpgbrljLvkupXkuqXln5/ogrLpg4Hno6/kuIDlo7HmuqLpgLjnqLLojKjoiovpsK/lhYHljbDlkr3lk6Hlm6Dlp7vlvJXpo7Lmt6vog6TolK1cIl0sW1wiYjFhMVwiLFwi6Zmi6Zmw6Zqg6Z+75ZCL5Y+z5a6H54OP57696L+C6Zuo5Y2v6bWc56q65LiR56KT6Ie85rim5ZiY5ZSE5qyd6JSa6bC75ael5Y6p5rWm55Oc6ZaP5ZmC5LqR6YGL6Zuy6I2P6aSM5Y+h5Za25ayw5b2x5pig5puz5qCE5rC45rOz5rSp55Gb55uI56mO6aC06Iux6KGb6Kmg6Yut5ray55ar55uK6aeF5oKm6KyB6LaK6Zay5qaO5Y6t5YaG5ZyS5aCw5aWE5a605bu25oCo5o6p5o+05rK/5ryU54KO54SU54WZ54eV54y/57iB6Im26IuR6JaX6YGg6Ymb6bSb5aGp5pa85rGa55Sl5Ye55aSu5aWl5b6A5b+cXCJdLFtcImIyYTFcIixcIuaKvOaXuuaoquasp+autOeOi+e/geillum0rOm0jum7hOWyoeayluiNu+WEhOWxi+aGtuiHhuahtueJoeS5meS/uuWNuOaBqea4qeepj+mfs+S4i+WMluS7ruS9leS8veS+oeS9s+WKoOWPr+WYieWkj+WrgeWutuWvoeenkeaah+aenOaetuatjOays+eBq+ePguemjeemvueovOeuh+iKseiLm+iMhOiNt+iPr+iPk+idpuiqsuWYqeiyqOi/pumBjumcnuiaiuS/hOWzqOaIkeeJmeeUu+iHpeiKveibvuizgOmbhemkk+mnleS7i+S8muino+WbnuWhiuWjiuW7u+W/q+aAquaClOaBouaHkOaIkuaLkOaUuVwiXSxbXCJiM2ExXCIsXCLprYHmmabmorDmtbfngbDnlYznmobntbXoiqXon7nplovpmo7osp3lh7Hlir7lpJblkrPlrrPltJbmhajmpoLmtq/noo3ok4vooZfoqbLpjqfpqrjmtazppqjom5nlnqPmn7/om47piI7lioPlmoflkITlu5Pmi6HmkrnmoLzmoLjmrrvnjbLnorrnqavopprop5LotavovIPpg63plqPpmpTpnanlrablsrPmpb3poY3poY7mjpvnrKDmqKvmqb/morbpsI3mvZ/libLllp3mgbDmi6zmtLvmuIfmu5HokZvopJDovYTkuJTpsLnlj7bmpJvmqLrpnoTmoKrlhZznq4PokrLph5zpjozlmZvptKjmoKLojIXokLFcIl0sW1wiYjRhMVwiLFwi57Kl5YiI6IuF55Om5Lm+5L6D5Yag5a+S5YiK5YuY5Yun5be75Zaa5aCq5aem5a6M5a6Y5a+b5bmy5bm55oKj5oSf5oWj5oa+5o+b5pWi5p+R5qGT5qO65qy+5q2T5rGX5ryi5r6X5r2F55Kw55SY55uj55yL56u/566h57Ch57ep57y257+w6IKd6Imm6I6e6Kaz6KuM6LKr6YKE6ZGR6ZaT6ZaR6Zai6Zml6Z+T6aSo6IiY5Li45ZCr5bK45beM546p55mM55y85bKp57+r6LSL6ZuB6aCR6aGU6aGY5LyB5LyO5Y2x5Zac5Zmo5Z+65aWH5ayJ5a+E5bKQ5biM5bm+5b+M5o+u5py65peX5pei5pyf5qOL5qOEXCJdLFtcImI1YTFcIixcIuapn+W4sOavheawl+axveeVv+eliOWto+eogOe0gOW+veimj+iomOiytOi1t+i7jOi8nemjoumojumsvOS6gOWBveWEgOWmk+WunOaIr+aKgOaTrOasuueKoOeWkeelh+e+qeifu+iqvOitsOaOrOiPiumeoOWQieWQg+WWq+ahlOapmOipsOegp+adtem7jeWNtOWuouiEmuiZkOmAhuS4mOS5heS7h+S8keWPiuWQuOWuruW8k+aApeaVkeacveaxguaxsuazo+eBuOeQg+eptueqruesiOe0muezvue1puaXp+eJm+WOu+WxheW3qOaLkuaLoOaMmea4oOiZmuiosei3nemLuOa8geempumtmuS6qOS6q+S6rFwiXSxbXCJiNmExXCIsXCLkvpvkvqDlg5HlhYfnq7blhbHlh7bljZTljKHljb/lj6vllqzlooPls6HlvLflvYrmgK/mgZDmga3mjJ/mlZnmqYvms4Hni4Lni63nn6/og7johIXoiIjolY7pg7fpj6Hpn7/ppZfpqZrku7Dlh53lsK3mmoHmpa3lsYDmm7LmpbXnjonmoZDnsoHlg4Xli6TlnYflt77pjKbmlqTmrKPmrL3nkLTnpoHnpr3nrYvnt4roirnoj4zoob/opZ/orLnov5Hph5HlkJ/pioDkuZ3lgLblj6XljLrni5fnjpbnn6noi6bouq/pp4bpp4jpp5LlhbfmhJromZ7llrDnqbrlgbblr5PpgYfpmoXkuLLmq5vph6flsZHlsYhcIl0sW1wiYjdhMVwiLFwi5o6Y56qf5rKT6Z206L2h56qq54aK6ZqI57KC5qCX57mw5qGR6Y2s5Yuy5ZCb6Jar6KiT576k6LuN6YOh5Y2m6KKI56WB5L+C5YK+5YiR5YWE5ZWT5Zyt54+q5Z6L5aWR5b2i5b6E5oG15oW25oWn5oap5o6y5pC65pWs5pmv5qGC5riT55Wm56i957O757WM57aZ57mL572r6IyO6I2K6JuN6KiI6Kmj6K2m6Lu96aCa6baP6Iq46L+O6a+o5YqH5oif5pKD5r+A6ZqZ5qGB5YKR5qyg5rG65r2U56m057WQ6KGA6Kij5pyI5Lu25YC55YCm5YGl5YW85Yi45Ymj5Zan5ZyP5aCF5auM5bu65oay5oe45ouz5o2yXCJdLFtcImI4YTFcIixcIuaknOaoqeeJveeKrOeMrueglOehr+e1ueecjOiCqeimi+ismeizoui7kumBo+mNtemZuumhlemok+m5uOWFg+WOn+WOs+W5u+W8pua4m+a6kOeOhOePvue1g+iIt+iogOiruumZkOS5juWAi+WPpOWRvOWbuuWnkeWtpOW3seW6q+W8p+aIuOaVheaer+a5lueLkOeziuiitOiCoeiDoeiPsOiZjuiqh+i3qOmIt+mbh+mhp+m8k+S6lOS6kuS8jeWNiOWRieWQvuWor+W+jOW+oeaCn+aip+aqjueRmueigeiqnuiqpOitt+mGkOS5numvieS6pOS9vOS+r+WAmeWAluWFieWFrOWKn+WKueWLvuWOmuWPo+WQkVwiXSxbXCJiOWExXCIsXCLlkI7llonlnZHlnqLlpb3lrZTlrZ3lro/lt6Xlt6flt7flubjluoPluprlurflvJjmgZLmhYzmipfmi5jmjqfmlLvmmILmmYPmm7Tmna3moKHmopfmp4vmsZ/mtKrmtanmuK/mup3nlLLnmofnoaznqL/ns6DntIXntJjntZ7ntrHogJXogIPogq/ogrHohZToho/oiKrojZLooYzooaHorJvosqLos7zpg4rphbXpibHnoL/pi7zplqTpmY3poIXpppnpq5jptLvliZvliqvlj7flkIjlo5Xmi7fmv6DosarovZ/purnlhYvliLvlkYrlm73nqYDphbfptaDpu5LnjYTmvInohbDnlJHlv73mg5rpqqjni5vovrxcIl0sW1wiYmFhMVwiLFwi5q2k6aCD5LuK5Zuw5Z2k5aK+5ama5oGo5oeH5piP5piG5qC55qKx5re355eV57S66Imu6a2C5Lqb5L2Q5Y+J5ZSG5bWv5bem5beu5p+75rKZ55Gz56CC6KmQ6Y6W6KOf5Z2Q5bqn5oyr5YK15YKs5YaN5pyA5ZOJ5aGe5aa75a6w5b2p5omN5o6h5qC95q2z5riI54G96YeH54qA56CV56Cm56Wt5paO57Sw6I+c6KOB6LyJ6Zqb5Ymk5Zyo5p2Q572q6LKh5Ya05Z2C6Ziq5aC65qaK6IK05ZKy5bSO5Z+856KV6be65L2c5YmK5ZKL5pC+5pio5pyU5p+156qE562W57Si6Yyv5qGc6a6t56y55YyZ5YaK5Yi3XCJdLFtcImJiYTFcIixcIuWvn+aLtuaSruaTpuacreauuuiWqembkeeakOmvluaNjOmMhumuq+eav+aZkuS4ieWCmOWPguWxseaDqOaSkuaVo+ahn+eHpuePiueUo+eul+e6guialeiug+izm+mFuOmkkOaWrOaaq+aui+S7leS7lOS8uuS9v+WIuuWPuOWPsuWXo+Wbm+Wjq+Wni+WnieWnv+WtkOWxjeW4guW4q+W/l+aAneaMh+aUr+WtnOaWr+aWveaXqOaeneatouatu+awj+eNheelieengeezuOe0mee0q+iCouiEguiHs+imluipnuipqeippuiqjOirruizh+iznOmbjOmjvOatr+S6i+S8vOS+jeWFkOWtl+WvuuaFiOaMgeaZglwiXSxbXCJiY2ExXCIsXCLmrKHmu4vmsrvniL7nkr3nl5Tno4HnpLrogIzogLPoh6rokpTovp7msZDpub/lvI/orZjptKvnq7rou7jlro3pm6vkuIPlj7Hln7flpLHlq4nlrqTmgonmub/mvIbnlr7os6rlrp/olIDnr6DlgbLmn7Toip3lsaHolYrnuJ7oiI7lhpnlsITmjajotabmlpznha7npL7ntJfogIXorJ3ou4rpga7om4fpgqrlgJ/li7rlsLrmnZPngbzniLXphYzph4jpjKvoi6Xlr4LlvLHmg7nkuLvlj5blrojmiYvmnLHmrorni6nnj6DnqK7ohavotqPphZLpppblhJLlj5flkarlr7/mjojmqLnntqzpnIDlm5rlj47lkahcIl0sW1wiYmRhMVwiLFwi5a6X5bCx5bee5L+u5oSB5ou+5rSy56eA56eL57WC57mN57+S6Iet6Iif6JKQ6KGG6KWy6K6Q6Lm06Lyv6YCx6YWL6YWs6ZuG6Yac5LuA5L2P5YWF5Y2B5b6T5oiO5p+U5rGB5riL542j57im6YeN6YqD5Y+U5aSZ5a6/5reR56Wd57iu57Kb5aG+54af5Ye66KGT6L+w5L+K5bO75pil556s56uj6Iic6ae/5YeG5b6q5pes5qWv5q6J5rez5rqW5r2k55u+57SU5beh6YG16YaH6aCG5Yem5Yid5omA5pqR5puZ5ria5bq257eS572y5pu46Jav6Je36Ku45Yqp5Y+Z5aWz5bqP5b6Q5oGV6Yuk6Zmk5YK35YSfXCJdLFtcImJlYTFcIixcIuWLneWMoOWNh+WPrOWTqOWVhuWUseWYl+WlqOWmvuWovOWuteWwhuWwj+WwkeWwmuW6hOW6iuW7oOW9sOaJv+aKhOaLm+aOjOaNt+aYh+aYjOaYreaZtuadvuaiouaon+aoteayvOa2iOa4iea5mOeEvOeEpueFp+eXh+ecgeehneekgeelpeensOeroOeskeeyp+e0ueiCluiPluiSi+iVieihneijs+ion+iovOiplOips+ixoeiznumGpOmJpumNvumQmOmanOmemOS4iuS4iOS4nuS5l+WGl+WJsOWfjuWgtOWjjOWsouW4uOaDheaTvuadoeadlua1hOeKtueVs+epo+iSuOitsumGuOmMoOWYseWftOmjvlwiXSxbXCJiZmExXCIsXCLmi63mpI3mrpbnh63nuZTogbfoibLop6bpo5/onZXovrHlsLvkvLjkv6HkvrXllIflqKDlr53lr6nlv4PmhY7mjK/mlrDmmYvmo67mppvmtbjmt7HnlLPnlrnnnJ/npZ7np6bntLPoh6Poiq/olqropqroqLrouqvovpvpgLLph53pnIfkurrku4HliIPlobXlo6zlsIvnlJrlsL3ohY7oqIrov4XpmaPpna3nrKXoq4/poIjphaLlm7PljqjpgJflkLnlnoLluKXmjqjmsLTngornnaHnsovnv6DoobDpgYLphZTpjJDpjJjpmo/nkZ7pq4TltIfltanmlbDmnqLotqjpm5vmja7mnYnmpJnoj4XpoJfpm4Doo75cIl0sW1wiYzBhMVwiLFwi5r6E5pG65a+45LiW54Cs55Wd5piv5YeE5Yi25Yui5aeT5b6B5oCn5oiQ5pS/5pW05pif5pm05qOy5qCW5q2j5riF54my55Sf55ub57K+6IGW5aOw6KO96KW/6Kqg6KqT6KuL6YCd6YaS6Z2S6Z2Z5paJ56iO6ISG6Zq75bit5oOc5oia5pal5piU5p6Q55+z56mN57GN57i+6ISK6LKs6LWk6Leh6Lmf56Kp5YiH5ouZ5o6l5pGC5oqY6Kit56qD56+A6Kqs6Zuq57W26IiM6J2J5LuZ5YWI5Y2D5Y2g5a6j5bCC5bCW5bed5oim5omH5pKw5qCT5qC05rOJ5rWF5rSX5p+T5r2c54WO54W95peL56m/566t57eaXCJdLFtcImMxYTFcIixcIue5iue+qOiFuuiIm+iIueiWpuipruizjui3temBuOmBt+mKremKkemWg+muruWJjeWWhOa8uOeEtuWFqOemhee5leiGs+ezjuWZjOWhkeWyqOaOquabvuabvealmueLmeeWj+eWjuekjuelluenn+eyl+e0oOe1hOiYh+iotOmYu+mBoem8oOWDp+WJteWPjOWPouWAieWWquWjruWlj+eIveWui+WxpOWMneaDo+aDs+aNnOaOg+aMv+aOu+aTjeaXqeabueW3o+anjeanvea8leeHpeS6ieeXqeebuOeqk+ezn+e3j+e2nOiBoeiNieiNmOiRrOiSvOiXu+ijhei1sOmAgemBremOl+mcnOmokuWDj+Wil+aGjlwiXSxbXCJjMmExXCIsXCLoh5PolLXotIjpgKDkv4PlgbTliYfljbPmga/mjYnmnZ/muKzotrPpgJ/kv5flsZ7os4rml4/ntprljZLoopblhbbmj4PlrZjlravlsIrmkI3mnZHpgZzku5blpJrlpKrmsbDoqZHllL7loJXlpqXmg7DmiZPmn4HoiLXmpZXpmYDpp4TpqKjkvZPloIblr77ogJDlsrHluK/lvoXmgKDmhYvmiLTmm7/ms7Dmu57og47ohb/oi5TooovosrjpgIDpgK7pmorpu5vpr5vku6Plj7DlpKfnrKzpho3poYzpt7nmu53ngKfljZPllYTlroXmiZjmip7mi5PmsqLmv6/nkKLoqJfpkLjmv4Hoq77ojLjlh6fom7jlj6pcIl0sW1wiYzNhMVwiLFwi5Y+p5L2G6YGU6L6w5aWq6ISx5be956uq6L6/5qOa6LC354u46bGI5qi96Kqw5Li55Y2Y5ZiG5Z2m5ouF5o6i5pem5q2O5reh5rmb54Kt55+t56uv566q57a76IC96IOG6JuL6KqV6Y2b5Zuj5aOH5by+5pat5pqW5qqA5q6155S36KuH5YCk55+l5Zyw5byb5oGl5pm65rGg55e056ia572u6Ie06JyY6YGF6aaz56+J55Wc56u5562R6JOE6YCQ56ep56qS6Iy25auh552A5Lit5Luy5a6Z5b+g5oq95pi85p+x5rOo6Jmr6KG36Ki76YWO6Yuz6aeQ5qiX54Cm54yq6Iun6JGX6LKv5LiB5YWG5YeL5ZaL5a+1XCJdLFtcImM0YTFcIixcIuW4luW4s+W6geW8lOW8teW9q+W+tOaHsuaMkeaaouacnea9rueJkueUuuecuuiBtOiEueiFuOidtuiqv+irnOi2hei3s+mKmumVt+mggumzpeWLheaNl+ebtOacleayiOePjeizg+mOrumZs+a0peWinOakjuanjOi/vemOmueXm+mAmuWhmuagguaOtOanu+S9g+a8rOafmOi+u+iUpue2tOmNlOakv+a9sOWdquWjt+WsrOe0rOeIquWQiumHo+m2tOS6reS9juWBnOWBteWJg+iynuWRiOWgpOWumuW4neW6leW6reW7t+W8n+aCjOaKteaMuuaPkOair+axgOeih+emjueoi+e3oOiJh+ioguirpui5hOmAk1wiXSxbXCJjNWExXCIsXCLpgrjphK3ph5jpvI7ms6XmkZjmk6LmlbXmu7TnmoTnrJvpganpj5Hmurrlk7LlvrnmkqTovY3ov63piYTlhbjloavlpKnlsZXlupfmt7vnuo/nlJzosrzou6LpoZvngrnkvJ3mrr/mvrHnlLDpm7vlhY7lkJDloLXloZflpqzlsaDlvpLmlpfmnZzmuKHnmbvoj5/os63pgJTpg73pjY3noKXnoLrliqrluqblnJ/lpbTmgJLlgJLlhZrlhqzlh43liIDllJDloZTloZjlpZflrpXls7bltovmgrzmipXmkK3mnbHmoYPmorzmo5/nm5fmt5jmua/mtpvnga/nh4jlvZPnl5jnpbfnrYnnrZTnrZLns5bntbHliLBcIl0sW1wiYzZhMVwiLFwi6JGj6JWp6Jek6KiO6KyE6LGG6LiP6YCD6YCP6ZCZ6Zm26aCt6aiw6ZeY5YON5YuV5ZCM5aCC5bCO5oan5pKe5rSe556z56ul6IO06JCE6YGT6YqF5bOg6bSH5Yy/5b6X5b6z5rac54m5552j56a/56+k5q+S54us6Kqt5qCD5qmh5Ye456qB5qS05bGK6bO26Iur5a+F6YWJ54Ce5Zm45bGv5oOH5pWm5rKM6LGa6YGB6aCT5ZGR5puH6YiN5aWI6YKj5YaF5LmN5Yeq6JaZ6KyO54GY5o266Y2L5qWi6aa057iE55W35Y2X5qWg6Luf6Zuj5rGd5LqM5bC85byQ6L+p5YyC6LOR6IKJ6Jm55bu/5pel5Lmz5YWlXCJdLFtcImM3YTFcIixcIuWmguWwv+mfruS7u+WmiuW/jeiqjea/oeemsOelouWvp+iRseeMq+eGseW5tOW/teaNu+aSmueHg+eymOS5g+W7vOS5i+WfnOWaouaCqea/g+e0jeiDveiEs+iGv+i+suiml+iapOW3tOaKiuaSreimh+adt+azoua0vueQtuegtOWphue9teiKremmrOS/s+W7g+aLneaOkuaVl+adr+ebg+eJjOiDjOiCuui8qemFjeWAjeWfueWqkuaiheals+eFpOeLveiyt+WjsuizoOmZqumAmeidv+enpOefp+iQqeS8r+WJpeWNmuaLjeafj+aziueZveeulOeyleiItuiWhOi/q+abnea8oOeIhue4m+iOq+mngem6plwiXSxbXCJjOGExXCIsXCLlh73nrrHnobLnrrjogofnrYjmq6jluaHogoznlZHnlaDlhavpiaLmuoznmbrphpfpq6rkvJDnvbDmipznrY/plqXps6nlmbrloZnom6TpmrzkvLTliKTljYrlj43lj5vluIbmkKzmlpHmnb/msL7msY7niYjniq/nj63nlZTnuYHoiKzol6nosqnnr4Tph4bnhanpoJLpo6/mjL3mmannlarnm6Tno5DolYPom67ljKrljZHlkKblpoPluoflvbzmgrLmiYnmibnmiqvmlpDmr5Tms4znlrLnmq7nopHnp5jnt4vnvbfogqXooqvoqrnosrvpgb/pnZ7po5vmqIvnsLjlgpnlsL7lvq7mnofmr5jnkLXnnInnvo5cIl0sW1wiYzlhMVwiLFwi6by75p+K56iX5Yy555aL6aut5b2m6Iad6I+x6IKY5by85b+F55Wi562G6YC85qGn5aer5aqb57SQ55m+6Kys5L+15b2q5qiZ5rC35ryC55Oi56Wo6KGo6KmV6LG55buf5o+P55eF56eS6IuX6Yyo6Yuy6JKc6Jut6bCt5ZOB5b2s5paM5rWc54CV6LKn6LOT6aC75pWP55O25LiN5LuY5Z+g5aSr5amm5a+M5Yao5biD5bqc5oCW5om25pW35pan5pmu5rWu54i256ym6IWQ6Iaa6IqZ6K2c6LKg6LOm6LW06Zic6ZmE5L6u5pKr5q2m6Iie6JGh6JWq6YOo5bCB5qWT6aKo6JG66JWX5LyP5Ymv5b6p5bmF5pyNXCJdLFtcImNhYTFcIixcIuemj+iFueikh+imhua3teW8l+aJleayuOS7j+eJqemukuWIhuWQu+WZtOWis+aGpOaJrueEmuWlrueyieeznue0m+mbsOaWh+iBnuS4meS9teWFteWhgOW5o+W5s+W8iuafhOS4puiUvemWiemZm+exs+mggeWDu+WjgeeZlueip+WIpeeepeiUkeeuhuWBj+WkieeJh+evh+e3qOi+uui/lOmBjeS+v+WLieWoqeW8gemereS/neiIl+mLquWcg+aNleatqeeUq+ijnOi8lOepguWLn+Wik+aFleaIiuaaruavjeewv+iPqeWAo+S/uOWMheWRhuWgseWlieWuneWzsOWzr+W0qeW6luaKseaNp+aUvuaWueaci1wiXSxbXCJjYmExXCIsXCLms5Xms6Hng7nnoLLnuKvog57oirPokIzok6zonILopJLoqKrosYrpgqbpi5Lpo73ps7PptazkuY/kuqHlgo3liZblnYrlpqjluL3lv5jlv5nmiL/mmrTmnJvmn5Dmo5LlhpLntKHogqrohqjorIDosozosr/pib7pmLLlkKDpoKzljJflg5XljZzloqjmkrLmnLTniafnnabnqYbph6bli4PmsqHmrobloIDluYzlpZTmnKznv7vlh6Hnm4bmkanno6jprZTpurvln4vlprnmmKfmnprmr47lk6nmp5nluZXohpzmnpXprqrmn77psZLmoZ3kuqbkv6Plj4jmirnmnKvmsqvov4Tkvq3nua3pur/kuIfmhaLmuoBcIl0sW1wiY2NhMVwiLFwi5ryr6JST5ZGz5pyq6a2F5bez566V5bKs5a+G6Jyc5rmK6JOR56iU6ISI5aaZ57KN5rCR55yg5YuZ5aSi54Sh54mf55+b6Zyn6bWh5qSL5am/5aiY5Yal5ZCN5ZG95piO55uf6L+36YqY6bO05aeq54md5ruF5YWN5qOJ57a/57es6Z2i6bq65pG45qih6IyC5aaE5a2f5q+b54yb55uy57ay6ICX6JKZ5YSy5pyo6buZ55uu5p2i5Yu/6aSF5bCk5oi757G+6LKw5ZWP5oK257SL6ZaA5YyB5Lmf5Ya25aSc54i66IC26YeO5byl55+i5Y6E5b2557SE6Jas6Kiz6LqN6Z2W5p+z6Jau6ZGT5oSJ5oSI5rK555mSXCJdLFtcImNkYTFcIixcIuirrei8uOWUr+S9keWEquWLh+WPi+WupeW5veaCoOaGguaPluacieafmua5p+a2jOeMtueMt+eUseelkOijleiqmOmBiumCkemDtembhOiejeWkleS6iOS9meS4juiqiei8v+mgkOWCreW5vOWmluWuueW6uOaPmuaPuuaTgeabnOaliuanmOa0i+a6tueGlOeUqOeqr+e+iuiAgOiRieiTieimgeisoei4iumBpemZvemkiuaFvuaKkeassuayg+a1tOe/jOe/vOa3gOe+heieuuijuOadpeiOsemgvOmbt+a0m+e1oeiQvemFquS5seWNteW1kOashOa/q+iXjeiYreimp+WIqeWQj+WxpeadjuaiqOeQhueSg1wiXSxbXCJjZWExXCIsXCLnl6Loo4/oo6Hph4zpm6Lpmbjlvovnjofnq4vokY7mjqDnlaXlionmtYHmupznkInnlZnnoavnspLpmobnq5zpvo3kvrbmha7ml4XomZzkuobkuq7lg5rkuKHlh4zlr67mlpnmooHmtrznjJ/nmYLnnq3nqJzns6foia/oq5Lpgbzph4/pmbXpoJjlipvnt5HlgKvljpjmnpfmt4vnh5DnkLPoh6jovKrpmqPpsZfpup/nkaDloYHmtpnntK/poZ7ku6TkvLbkvovlhrflirHltrrmgJznjrLnpLzoi5PpiLTpmrfpm7bpnIrpupfpvaLmmqbmrbTliJfliqPng4joo4Llu4nmgYvmhpDmvKPnhYnnsL7nt7Toga9cIl0sW1wiY2ZhMVwiLFwi6JOu6YCj6Yys5ZGC6a2v5quT54KJ6LOC6Lev6Zyy5Yq05amB5buK5byE5pyX5qW85qaU5rWq5ryP54mi54u856+t6ICB6IG+6J2L6YOO5YWt6bqT56aE6IKL6Yyy6KuW5YCt5ZKM6Kmx5q2q6LOE6ISH5oOR5p6g6bey5LqZ5LqY6bCQ6Kmr6JeB6JWo5qSA5rm+56KX6IWVXCJdLFtcImQwYTFcIixcIuW8jOS4kOS4leS4quS4seS4tuS4vOS4v+S5guS5luS5mOS6guS6heixq+S6iuiIkuW8jeS6juS6nuS6n+S6oOS6ouS6sOS6s+S6tuS7juS7jeS7hOS7huS7guS7l+S7nuS7reS7n+S7t+S8ieS9muS8sOS9m+S9neS9l+S9h+S9tuS+iOS+j+S+mOS9u+S9qeS9sOS+keS9r+S+huS+luWEmOS/lOS/n+S/juS/mOS/m+S/keS/muS/kOS/pOS/peWAmuWAqOWAlOWAquWApeWAheS8nOS/tuWAoeWAqeWArOS/vuS/r+WAkeWAhuWBg+WBh+acg+WBleWBkOWBiOWBmuWBluWBrOWBuOWCgOWCmuWCheWCtOWCslwiXSxbXCJkMWExXCIsXCLlg4nlg4rlgrPlg4Llg5blg57lg6Xlg63lg6Plg67lg7nlg7XlhInlhIHlhILlhJblhJXlhJTlhJrlhKHlhLrlhLflhLzlhLvlhL/lhYDlhZLlhYzlhZTlhaLnq7jlhanlharlha7lhoDlhoLlm5jlhozlhonlho/lhpHlhpPlhpXlhpblhqTlhqblhqLlhqnlhqrlhqvlhrPlhrHlhrLlhrDlhrXlhr3lh4Xlh4nlh5vlh6DomZXlh6nlh63lh7Dlh7Xlh77liITliIvliJTliI7liKfliKrliK7liLPliLnliY/liYTliYvliYzliZ7liZTliarlibTlianlibPlib/lib3lio3lipTlipLlibHliojlipHovqhcIl0sW1wiZDJhMVwiLFwi6L6n5Yqs5Yqt5Yq85Yq15YuB5YuN5YuX5Yue5Yuj5Yum6aOt5Yug5Yuz5Yu15Yu45Yu55YyG5YyI55S45YyN5YyQ5YyP5YyV5Yya5Yyj5Yyv5Yyx5Yyz5Yy45Y2A5Y2G5Y2F5LiX5Y2J5Y2N5YeW5Y2e5Y2p5Y2u5aSY5Y275Y235Y6C5Y6W5Y6g5Y6m5Y6l5Y6u5Y6w5Y625Y+D57CS6ZuZ5Y+f5pu854eu5Y+u5Y+o5Y+t5Y+65ZCB5ZC95ZGA5ZCs5ZCt5ZC85ZCu5ZC25ZCp5ZCd5ZGO5ZKP5ZG15ZKO5ZGf5ZGx5ZG35ZGw5ZKS5ZG75ZKA5ZG25ZKE5ZKQ5ZKG5ZOH5ZKi5ZK45ZKl5ZKs5ZOE5ZOI5ZKoXCJdLFtcImQzYTFcIixcIuWSq+WTguWSpOWSvuWSvOWTmOWTpeWTpuWUj+WUlOWTveWTruWTreWTuuWTouWUueWVgOWVo+WVjOWUruWVnOWVheWVluWVl+WUuOWUs+WVneWWmeWWgOWSr+WWiuWWn+WVu+WVvuWWmOWWnuWWruWVvOWWg+WWqeWWh+WWqOWXmuWXheWXn+WXhOWXnOWXpOWXlOWYlOWXt+WYluWXvuWXveWYm+WXueWZjuWZkOeHn+WYtOWYtuWYsuWYuOWZq+WZpOWYr+WZrOWZquWahuWagOWaiuWaoOWalOWaj+WapeWaruWatuWatOWbguWavOWbgeWbg+WbgOWbiOWbjuWbkeWbk+Wbl+WbruWbueWcgOWbv+WchOWciVwiXSxbXCJkNGExXCIsXCLlnIjlnIvlnI3lnJPlnJjlnJbll4flnJzlnKblnLflnLjlnY7lnLvlnYDlnY/lnanln4DlnojlnaHlnb/lnonlnpPlnqDlnrPlnqTlnqrlnrDln4Pln4bln5Tln5Lln5PloIrln5bln6PloIvloJnloJ3lobLloKHloaLloYvlobDmr4DloZLloL3lobnlooXlornlop/loqvlorrlo57lorvlorjloq7lo4Xlo5Plo5Hlo5flo5nlo5jlo6Xlo5zlo6Tlo5/lo6/lo7rlo7nlo7vlo7zlo73lpILlpIrlpJDlpJvmoqblpKXlpKzlpK3lpLLlpLjlpL7nq5LlpZXlpZDlpY7lpZrlpZjlpaLlpaDlpaflpazlpalcIl0sW1wiZDVhMVwiLFwi5aW45aaB5aad5L2e5L6r5aaj5aay5aeG5aeo5aec5aaN5aeZ5aea5ail5aif5aiR5aic5aiJ5aia5amA5ams5amJ5ai15ai25ami5amq5aqa5aq85aq+5auL5auC5aq95auj5auX5aum5aup5auW5au65au75ayM5ayL5ayW5ayy5auQ5ayq5ay25ay+5a2D5a2F5a2A5a2R5a2V5a2a5a2b5a2l5a2p5a2w5a2z5a215a245paI5a265a6A5a6D5a6m5a645a+D5a+H5a+J5a+U5a+Q5a+k5a+m5a+i5a+e5a+l5a+r5a+w5a+25a+z5bCF5bCH5bCI5bCN5bCT5bCg5bCi5bCo5bC45bC55bGB5bGG5bGO5bGTXCJdLFtcImQ2YTFcIixcIuWxkOWxj+WtseWxrOWxruS5ouWxtuWxueWyjOWykeWylOWmm+Wyq+Wyu+WytuWyvOWyt+WzheWyvuWzh+WzmeWzqeWzveWzuuWzreW2jOWzquW0i+W0leW0l+W1nOW0n+W0m+W0keW0lOW0ouW0muW0meW0mOW1jOW1kuW1juW1i+W1rOW1s+W1tuW2h+W2hOW2guW2ouW2neW2rOW2ruW2veW2kOW2t+W2vOW3ieW3jeW3k+W3kuW3luW3m+W3q+W3suW3teW4i+W4muW4meW4keW4m+W4tuW4t+W5hOW5g+W5gOW5juW5l+W5lOW5n+W5ouW5pOW5h+W5teW5tuW5uum6vOW5v+W6oOW7geW7guW7iOW7kOW7j1wiXSxbXCJkN2ExXCIsXCLlu5blu6Plu53lu5rlu5vlu6Llu6Hlu6jlu6nlu6zlu7Hlu7Plu7Dlu7Tlu7jlu77lvIPlvInlvZ3lvZzlvIvlvJHlvJblvKnlvK3lvLjlvYHlvYjlvYzlvY7lvK/lvZHlvZblvZflvZnlvaHlva3lvbPlvbflvoPlvoLlvb/lvorlvojlvpHlvoflvp7lvpnlvpjlvqDlvqjlvq3lvrzlv5blv7vlv6Tlv7jlv7Hlv53mgrPlv7/mgKHmgaDmgJnmgJDmgKnmgI7mgLHmgJvmgJXmgKvmgKbmgI/mgLrmgZrmgYHmgarmgbfmgZ/mgYrmgYbmgY3mgaPmgYPmgaTmgYLmgazmgavmgZnmgoHmgo3mg6fmgoPmgppcIl0sW1wiZDhhMVwiLFwi5oKE5oKb5oKW5oKX5oKS5oKn5oKL5oOh5oK45oOg5oOT5oK05b+w5oK95oOG5oK15oOY5oWN5oSV5oSG5oO25oO35oSA5oO05oO65oSD5oSh5oO75oOx5oSN5oSO5oWH5oS+5oSo5oSn5oWK5oS/5oS85oSs5oS05oS95oWC5oWE5oWz5oW35oWY5oWZ5oWa5oWr5oW05oWv5oWl5oWx5oWf5oWd5oWT5oW15oaZ5oaW5oaH5oas5oaU5oaa5oaK5oaR5oar5oau5oeM5oeK5oeJ5oe35oeI5oeD5oeG5oa65oeL57255oeN5oem5oej5oe25oe65oe05oe/5oe95oe85oe+5oiA5oiI5oiJ5oiN5oiM5oiU5oibXCJdLFtcImQ5YTFcIixcIuaInuaIoeaIquaIruaIsOaIsuaIs+aJgeaJjuaJnuaJo+aJm+aJoOaJqOaJvOaKguaKieaJvuaKkuaKk+aKluaLlOaKg+aKlOaLl+aLkeaKu+aLj+aLv+aLhuaTlOaLiOaLnOaLjOaLiuaLguaLh+aKm+aLieaMjOaLruaLseaMp+aMguaMiOaLr+aLteaNkOaMvuaNjeaQnOaNj+aOluaOjuaOgOaOq+aNtuaOo+aOj+aOieaOn+aOteaNq+aNqeaOvuaPqeaPgOaPhuaPo+aPieaPkuaPtuaPhOaQluaQtOaQhuaQk+aQpuaQtuaUneaQl+aQqOaQj+aRp+aRr+aRtuaRjuaUquaSleaSk+aSpeaSqeaSiOaSvFwiXSxbXCJkYWExXCIsXCLmk5rmk5Lmk4Xmk4fmkrvmk5jmk4Lmk7Hmk6foiInmk6Dmk6Hmiqzmk6Pmk6/mlKzmk7bmk7Tmk7Lmk7rmlIDmk73mlJjmlJzmlIXmlKTmlKPmlKvmlLTmlLXmlLfmlLbmlLjnlYvmlYjmlZbmlZXmlY3mlZjmlZ7mlZ3mlbLmlbjmloLmloPorormlpvmlp/mlqvmlrfml4Pml4bml4Hml4Tml4zml5Lml5vml5nml6Dml6Hml7HmnbLmmIrmmIPml7vmnbPmmLXmmLbmmLTmmJzmmY/mmYTmmYnmmYHmmZ7mmZ3mmaTmmafmmajmmZ/mmaLmmbDmmoPmmojmmo7mmonmmoTmmpjmmp3mm4Hmmrnmm4nmmr7mmrxcIl0sW1wiZGJhMVwiLFwi5puE5pq45puW5pua5pug5pi/5pum5pup5puw5pu15pu35pyP5pyW5pye5pym5pyn6Zy45pyu5py/5py25p2B5py45py35p2G5p2e5p2g5p2Z5p2j5p2k5p6J5p2w5p6p5p285p2q5p6M5p6L5p6m5p6h5p6F5p635p+v5p605p+s5p6z5p+p5p645p+k5p+e5p+d5p+i5p+u5p655p+O5p+G5p+n5qqc5qCe5qGG5qCp5qGA5qGN5qCy5qGO5qKz5qCr5qGZ5qGj5qG35qG/5qKf5qKP5qKt5qKU5qKd5qKb5qKD5qqu5qK55qG05qK15qKg5qK65qSP5qKN5qG+5qSB5qOK5qSI5qOY5qSi5qSm5qOh5qSM5qONXCJdLFtcImRjYTFcIixcIuajlOajp+ajleaktuakkuakhOajl+ajo+akpeajueajoOajr+akqOakquakmuako+akoeajhualuealt+alnOaluOalq+allOalvualruakuealtOakvealmeaksOaloealnualneamgealquamsuamruankOamv+angeank+amvuanjuWvqOaniuanneamu+ang+amp+aoruamkeamoOamnOamleamtOannuanqOaoguaom+anv+asiuanueansuanp+aoheamseaonuanreaolOanq+aoiuaokuargeaoo+aok+aphOaojOapsuaotuapuOaph+apouapmeappuapiOaouOaoouaqkOaqjeaqoOaqhOaqouaqo1wiXSxbXCJkZGExXCIsXCLmqpfomJfmqrvmq4Pmq4LmqrjmqrPmqqzmq57mq5Hmq5/mqqrmq5rmq6rmq7vmrIXomJbmq7rmrJLmrJbprLHmrJ/mrLjmrLfnm5zmrLnpo67mrYfmrYPmrYnmrZDmrZnmrZTmrZvmrZ/mraHmrbjmrbnmrb/mroDmroTmroPmro3mrpjmrpXmrp7mrqTmrqrmrqvmrq/mrrLmrrHmrrPmrrfmrrzmr4bmr4vmr5Pmr5/mr6zmr6vmr7Pmr6/pur7msIjmsJPmsJTmsJvmsKTmsKPmsZ7msZXmsaLmsarmsoLmso3msprmsoHmspvmsb7msajmsbPmspLmspDms4Tms7Hms5Pmsr3ms5fms4Xms53msq7msrHmsr5cIl0sW1wiZGVhMVwiLFwi5rK65rOb5rOv5rOZ5rOq5rSf6KGN5rS25rSr5rS95rS45rSZ5rS15rSz5rSS5rSM5rWj5raT5rWk5rWa5rW55rWZ5raO5raV5r+k5raF5re55riV5riK5ra15reH5rem5ra45reG5res5ree5reM5reo5reS5reF5re65reZ5rek5reV5req5reu5rit5rmu5riu5riZ5rmy5rmf5ri+5rij5rmr5rir5rm25rmN5rif5rmD5ri65rmO5rik5ru/5rid5ri45rqC5rqq5rqY5ruJ5rq35ruT5rq95rqv5ruE5rqy5ruU5ruV5rqP5rql5ruC5rqf5r2B5ryR54GM5rus5ru45ru+5ry/5ruy5ryx5ruv5ryy5ruMXCJdLFtcImRmYTFcIixcIua8vua8k+a7t+a+hua9uua9uOa+gea+gOa9r+a9m+a/s+a9rea+gua9vOa9mOa+jua+kea/gua9pua+s+a+o+a+oea+pOa+uea/hua+qua/n+a/lea/rOa/lOa/mOa/sea/rua/m+eAieeAi+a/uueAkeeAgeeAj+a/vueAm+eAmua9tOeAneeAmOeAn+eAsOeAvueAsueBkeeBo+eCmeeCkueCr+eDseeCrOeCuOeCs+eCrueDn+eDi+eDneeDmeeEieeDveeEnOeEmeeFpeeFleeGiOeFpueFoueFjOeFlueFrOeGj+eHu+eGhOeGleeGqOeGrOeHl+eGueeGvueHkueHieeHlOeHjueHoOeHrOeHp+eHteeHvFwiXSxbXCJlMGExXCIsXCLnh7nnh7/niI3niJDniJvniKjniK3niKzniLDniLLniLvniLzniL/niYDniYbniYvniZjnibTnib7nioLnioHniofnipLnipbniqLniqfnirnnirLni4Pni4bni4Tni47ni5Lni6Lni6Dni6Hni7nni7flgI/njJfnjIrnjJznjJbnjJ3njLTnjK/njKnnjKXnjL7njY7njY/pu5jnjZfnjarnjajnjbDnjbjnjbXnjbvnjbrnj4jnjrPnj47njrvnj4Dnj6Xnj67nj57nkqLnkIXnka/nkKXnj7jnkLLnkLrnkZXnkL/nkZ/nkZnnkYHnkZznkannkbDnkaPnkarnkbbnkb7nkovnkp7nkqfnk4rnk4/nk5Tnj7FcIl0sW1wiZTFhMVwiLFwi55Og55Oj55On55Op55Ou55Oy55Ow55Ox55O455O355SE55SD55SF55SM55SO55SN55SV55ST55Se55Sm55Ss55S855WE55WN55WK55WJ55Wb55WG55Wa55Wp55Wk55Wn55Wr55Wt55W455W255aG55aH55W055aK55aJ55aC55aU55aa55ad55al55aj55eC55az55eD55a155a955a455a855ax55eN55eK55eS55eZ55ej55ee55e+55e/55e855iB55ew55e655ey55ez55iL55iN55iJ55if55in55ig55ih55ii55ik55i055iw55i755mH55mI55mG55mc55mY55mh55mi55mo55mp55mq55mn55ms55mwXCJdLFtcImUyYTFcIixcIueZsueZtueZuOeZvOeagOeag+eaiOeai+eajuealueak+eameeamueasOeatOeauOeaueeauuebguebjeebluebkuebnueboeebpeebp+ebquiYr+ebu+eciOech+echOecqeecpOecnuecpeecpuecm+ect+ecuOedh+edmuedqOedq+edm+edpeedv+edvuedueeejueei+eekeeeoOeenueesOeetueeueeev+eevOeeveeeu+efh+efjeefl+efmuefnOefo+efruefvOegjOegkuekpuegoOekquehheeijuehtOeihuehvOeimueijOeio+eiteeiqueir+ejkeejhueji+ejlOeivueivOejheejiuejrFwiXSxbXCJlM2ExXCIsXCLno6fno5rno73no7TnpIfnpJLnpJHnpJnnpKznpKvnpYDnpaDnpZfnpZ/npZrnpZXnpZPnpbrnpb/npornpp3npqfpvYvnpqrnpq7nprPnprnnprrnp4nnp5Xnp6fnp6znp6Hnp6PnqIjnqI3nqJjnqJnnqKDnqJ/npoDnqLHnqLvnqL7nqLfnqYPnqZfnqYnnqaHnqaLnqanpvp3nqbDnqbnnqb3nqojnqpfnqpXnqpjnqpbnqqnnq4jnqrDnqrbnq4Xnq4Tnqr/pgoPnq4fnq4rnq43nq4/nq5Xnq5Pnq5nnq5rnq53nq6Hnq6Lnq6bnq63nq7DnrILnrI/nrIrnrIbnrLPnrJjnrJnnrJ7nrLXnrKjnrLbnrZBcIl0sW1wiZTRhMVwiLFwi562656yE562N56yL562M562F5621562l5620562n562w562x562s562u566d566Y566f566N566c566a566L566S566P562d566Z56+L56+B56+M56+P566056+G56+d56+p57CR57CU56+m56+l57Gg57CA57CH57CT56+z56+357CX57CN56+257Cj57Cn57Cq57Cf57C357Cr57C957GM57GD57GU57GP57GA57GQ57GY57Gf57Gk57GW57Gl57Gs57G157KD57KQ57Kk57Kt57Ki57Kr57Kh57Ko57Kz57Ky57Kx57Ku57K557K957OA57OF57OC57OY57OS57Oc57Oi6ay757Ov57Oy57O057O257O657SGXCJdLFtcImU1YTFcIixcIue0gue0nOe0lee0iue1hee1i+e0rue0sue0v+e0tee1hue1s+e1lue1jue1sue1qOe1rue1j+e1o+e2k+e2iee1m+e2j+e1vee2m+e2uue2rue2o+e2tee3h+e2vee2q+e4vee2oue2r+e3nOe2uOe2n+e2sOe3mOe3nee3pOe3nue3u+e3sue3oee4hee4iue4o+e4oee4kue4see4n+e4iee4i+e4oue5hue5pue4u+e4tee4uee5g+e4t+e4sue4uue5p+e5nee5lue5nue5mee5mue5uee5que5qee5vOe5u+e6g+e3lee5vei+rue5v+e6iOe6iee6jOe6kue6kOe6k+e6lOe6lue6jue6m+e6nOe8uOe8ulwiXSxbXCJlNmExXCIsXCLnvYXnvYznvY3nvY7nvZDnvZHnvZXnvZTnvZjnvZ/nvaDnvajnvannvafnvbjnvoLnvobnvoPnvojnvofnvoznvpTnvp7nvp3nvprnvqPnvq/nvrLnvrnnvq7nvrbnvrjorbHnv4Xnv4bnv4rnv5Xnv5Tnv6Hnv6bnv6nnv7Pnv7npo5zogIbogITogIvogJLogJjogJnogJzogKHogKjogL/ogLvogYrogYbogZLogZjogZrogZ/ogaLogajogbPogbLogbDogbbogbnogb3ogb/ogoTogobogoXogpvogpPogprogq3lhpDogqzog5vog6Xog5nog53og4Tog5rog5bohInog6/og7HohJvohKnohKPohK/ohYtcIl0sW1wiZTdhMVwiLFwi6ZqL6IWG6IS+6IWT6IWR6IO86IWx6IWu6IWl6IWm6IW06IaD6IaI6IaK6IaA6IaC6Iag6IaV6Iak6Iaj6IWf6IaT6Iap6Iaw6Ia16Ia+6Ia46Ia96IeA6IeC6Ia66IeJ6IeN6IeR6IeZ6IeY6IeI6Iea6Ief6Ieg6Ien6Ie66Ie76Ie+6IiB6IiC6IiF6IiH6IiK6IiN6IiQ6IiW6Iip6Iir6Ii46Iiz6ImA6ImZ6ImY6Imd6Ima6Imf6Imk6Imi6Imo6Imq6Imr6Iiu6Imx6Im36Im46Im+6IqN6IqS6Iqr6Iqf6Iq76Iqs6Iuh6Iuj6Iuf6IuS6Iu06Iuz6Iu66I6T6IyD6Iu76Iu56Iue6IyG6Iuc6IyJ6IuZXCJdLFtcImU4YTFcIixcIuiMteiMtOiMluiMsuiMseiNgOiMueiNkOiNheiMr+iMq+iMl+iMmOiOheiOmuiOquiOn+iOouiOluiMo+iOjuiOh+iOiuiNvOiOteiNs+iNteiOoOiOieiOqOiPtOiQk+iPq+iPjuiPveiQg+iPmOiQi+iPgeiPt+iQh+iPoOiPsuiQjeiQouiQoOiOveiQuOiUhuiPu+iRreiQquiQvOiVmuiShOiRt+iRq+iSreiRruiSguiRqeiRhuiQrOiRr+iRueiQteiTiuiRouiSueiSv+iSn+iTmeiTjeiSu+iTmuiTkOiTgeiThuiTluiSoeiUoeiTv+iTtOiUl+iUmOiUrOiUn+iUleiUlOiTvOiVgOiVo+iVmOiViFwiXSxbXCJlOWExXCIsXCLolYHomILolYvolZXoloDolqTolojolpHolorolqjola3olpTolpvol6rolofolpzolbfolb7olpDol4nolrrol4/olrnol5Dol5Xol53ol6Xol5zol7nomIromJPomIvol77ol7romIbomKLomJromLDomL/omY3kuZXomZTomZ/omafombHompPomqPomqnomqromovomozomrbomq/om4Tom4bomrDom4nooKPomqvom5Tom57om6nom6zom5/om5vom6/onJLonIbonIjonIDonIPom7vonJHonInonI3om7nonIronLTonL/onLfonLvonKXonKnonJronaDonZ/onbjonYzonY7onbTonZfonajona7onZlcIl0sW1wiZWFhMVwiLFwi6J2T6J2j6J2q6KCF6J6i6J6f6J6C6J6v6J+L6J696J+A6J+Q6ZuW6J6r6J+E6J6z6J+H6J+G6J676J+v6J+y6J+g6KCP6KCN6J++6J+26J+36KCO6J+S6KCR6KCW6KCV6KCi6KCh6KCx6KC26KC56KCn6KC76KGE6KGC6KGS6KGZ6KGe6KGi6KGr6KKB6KG+6KKe6KG16KG96KK16KGy6KKC6KKX6KKS6KKu6KKZ6KKi6KKN6KKk6KKw6KK/6KKx6KOD6KOE6KOU6KOY6KOZ6KOd6KO56KSC6KO86KO06KOo6KOy6KSE6KSM6KSK6KST6KWD6KSe6KSl6KSq6KSr6KWB6KWE6KS76KS26KS46KWM6KSd6KWg6KWeXCJdLFtcImViYTFcIixcIuilpuilpOilreilquilr+iltOilt+ilvuimg+imiOimiuimk+immOimoeimqeimpuimrOimr+imsuimuuimveimv+ingOinmuinnOinneinp+intOinuOiog+ioluiokOiojOiom+ioneiopeiotuipgeipm+ipkuiphuipiOipvOipreiprOipouiqheiqguiqhOiqqOiqoeiqkeiqpeiqpuiqmuiqo+irhOirjeirguirmuirq+irs+irp+irpOirseislOiroOirouirt+irnuirm+isjOish+ismuiroeisluiskOisl+isoOiss+meq+ispuisq+isvuisqOitgeitjOitj+itjuitieitluitm+itmuitq1wiXSxbXCJlY2ExXCIsXCLorZ/orazora/orbTorb3oroDorozoro7orpLorpPorpborpnorprosLrosYHosL/osYjosYzosY7osZDosZXosaLosazosbjosbrosoLosonosoXosoroso3oso7ospTosbzospjmiJ3osq3osqrosr3osrLosrPosq7osrbos4jos4Hos6Tos6Pos5ros73os7ros7votITotIXotIrotIfotI/otI3otJDpvY7otJPos43otJTotJbotafota3otbHotbPotoHotpnot4Lotr7otrrot4/ot5rot5bot4zot5vot4vot6rot6vot5/ot6Pot7zouIjouInot7/ouJ3ouJ7ouJDouJ/ouYLouLXouLDouLTouYpcIl0sW1wiZWRhMVwiLFwi6LmH6LmJ6LmM6LmQ6LmI6LmZ6Lmk6Lmg6Liq6Lmj6LmV6Lm26Lmy6Lm86LqB6LqH6LqF6LqE6LqL6LqK6LqT6LqR6LqU6LqZ6Lqq6Lqh6Lqs6Lqw6LuG6Lqx6Lq+6LuF6LuI6LuL6Lub6Luj6Lu86Lu76Lur6Lu+6LyK6LyF6LyV6LyS6LyZ6LyT6Lyc6Lyf6Lyb6LyM6Lym6Lyz6Ly76Ly56L2F6L2C6Ly+6L2M6L2J6L2G6L2O6L2X6L2c6L2i6L2j6L2k6L6c6L6f6L6j6L6t6L6v6L636L+a6L+l6L+i6L+q6L+v6YKH6L+06YCF6L+56L+66YCR6YCV6YCh6YCN6YCe6YCW6YCL6YCn6YC26YC16YC56L+4XCJdLFtcImVlYTFcIixcIumBj+mBkOmBkemBkumAjumBiemAvumBlumBmOmBnumBqOmBr+mBtumaqOmBsumCgumBvemCgemCgOmCiumCiemCj+mCqOmCr+mCsemCtemDoumDpOaJiOmDm+mEgumEkumEmemEsumEsOmFiumFlumFmOmFo+mFpemFqemFs+mFsumGi+mGiemGgumGoumGq+mGr+mGqumGtemGtOmGuumHgOmHgemHiemHi+mHkOmHlumHn+mHoemHm+mHvOmHtemHtumInumHv+mIlOmIrOmIlemIkemJnumJl+mJhemJiemJpOmJiOmKlemIv+mJi+mJkOmKnOmKlumKk+mKm+mJmumLj+mKuemKt+mLqemMj+mLuumNhOmMrlwiXSxbXCJlZmExXCIsXCLpjJnpjKLpjJrpjKPpjLrpjLXpjLvpjZzpjaDpjbzpja7pjZbpjrDpjqzpjq3pjpTpjrnpj5bpj5fpj6jpj6Xpj5jpj4Ppj53pj5Dpj4jpj6TpkJrpkJTpkJPpkIPpkIfpkJDpkLbpkKvpkLXpkKHpkLrpkYHpkZLpkYTpkZvpkaDpkaLpkZ7pkarpiKnpkbDpkbXpkbfpkb3pkZrpkbzpkb7pkoHpkb/ploLplofplorplpTplpbplpjplpnplqDplqjplqfplq3plrzplrvplrnplr7pl4rmv7bpl4Ppl43pl4zpl5Xpl5Tpl5bpl5zpl6Hpl6Xpl6LpmKHpmKjpmK7pmK/pmYLpmYzpmY/pmYvpmbfpmZzpmZ5cIl0sW1wiZjBhMVwiLFwi6Zmd6Zmf6Zmm6Zmy6Zms6ZqN6ZqY6ZqV6ZqX6Zqq6Zqn6Zqx6Zqy6Zqw6Zq06Zq26Zq46Zq56ZuO6ZuL6ZuJ6ZuN6KWN6Zuc6ZyN6ZuV6Zu56ZyE6ZyG6ZyI6ZyT6ZyO6ZyR6ZyP6ZyW6ZyZ6Zyk6Zyq6Zyw6Zy56Zy96Zy+6Z2E6Z2G6Z2I6Z2C6Z2J6Z2c6Z2g6Z2k6Z2m6Z2o5YuS6Z2r6Z2x6Z256Z6F6Z286Z6B6Z266Z6G6Z6L6Z6P6Z6Q6Z6c6Z6o6Z6m6Z6j6Z6z6Z606Z+D6Z+G6Z+I6Z+L6Z+c6Z+t6b2P6Z+y56uf6Z+26Z+16aCP6aCM6aC46aCk6aCh6aC36aC96aGG6aGP6aGL6aGr6aGv6aGwXCJdLFtcImYxYTFcIixcIumhsemhtOmhs+miqumir+misemitumjhOmjg+mjhumjqemjq+mkg+mkiemkkumklOmkmOmkoemknemknumkpOmkoOmkrOmkrumkvemkvumlgumliemlhemlkOmli+mlkemlkumljOmllemml+mmmOmmpemmremmrummvOmnn+mnm+mnnemnmOmnkemnremnrumnsemnsumnu+mnuOmogemoj+mohemnoumomemoq+mot+mphempgumpgOmpg+movumplempjempm+mpl+mpn+mpoumppemppOmpqempq+mpqumqremqsOmqvOmrgOmrj+mrkemrk+mrlOmrnumrn+mroumro+mrpumrr+mrq+mrrumrtOmrsemrt1wiXSxbXCJmMmExXCIsXCLpq7vprIbprJjprJrprJ/prKLprKPprKXprKfprKjprKnprKrprK7prK/prLLprYTprYPprY/prY3prY7prZHprZjprbTprpPproPprpHprpbprpfprp/prqDprqjprrTpr4Dpr4rprrnpr4bpr4/pr5Hpr5Lpr6Ppr6Lpr6Tpr5Tpr6HpsLrpr7Lpr7Hpr7DpsJXpsJTpsInpsJPpsIzpsIbpsIjpsJLpsIrpsITpsK7psJvpsKXpsKTpsKHpsLDpsYfpsLLpsYbpsL7psZrpsaDpsafpsbbpsbjps6fps6zps7DptInptIjps6vptIPptIbptKrptKbptq/ptKPptJ/ptYTptJXptJLptYHptL/ptL7ptYbptYhcIl0sW1wiZjNhMVwiLFwi6bWd6bWe6bWk6bWR6bWQ6bWZ6bWy6baJ6baH6bar6bWv6bW66baa6bak6bap6bay6beE6beB6ba76ba46ba66beG6beP6beC6beZ6beT6be46bem6bet6bev6be96bia6bib6bie6bm16bm56bm96bqB6bqI6bqL6bqM6bqS6bqV6bqR6bqd6bql6bqp6bq46bqq6bqt6Z2h6buM6buO6buP6buQ6buU6buc6bue6bud6bug6bul6buo6buv6bu06bu26bu36bu56bu76bu86bu96byH6byI55q36byV6byh6bys6by+6b2K6b2S6b2U6b2j6b2f6b2g6b2h6b2m6b2n6b2s6b2q6b236b2y6b226b6V6b6c6b6gXCJdLFtcImY0YTFcIixcIuWgr+anh+mBmeeRpOWHnOeGmVwiXSxbXCJmOWExXCIsXCLnuoropJzpjYjpiojok5zkv4nngrvmmLHmo4jpi7nmm7vlvYXkuKjku6Hku7zkvIDkvIPkvLnkvZbkvpLkvorkvprkvpTkv43lgYDlgKLkv7/lgJ7lgYblgbDlgYLlgpTlg7Tlg5jlhYrlhaTlhp3lhr7lh6zliJXlipzliqbli4Dli5vljIDljIfljKTljbLljpPljrLlj53vqI7lkpzlkorlkqnlk7/lloblnZnlnaXlnqzln4jln4fvqI/vqJDlop7lorLlpIvlpZPlpZvlpZ3lpaPlpqTlprrlrZblr4DnlK/lr5jlr6zlsJ7lsqblsrrls7XltKfltZPvqJHltYLlta3ltrjltrnlt5DlvKHlvLTlvaflvrdcIl0sW1wiZmFhMVwiLFwi5b+e5oGd5oKF5oKK5oOe5oOV5oSg5oOy5oSR5oS35oSw5oaY5oiT5oqm5o+15pGg5pKd5pOO5pWO5piA5piV5pi75piJ5piu5pie5pik5pml5pmX5pmZ76iS5pmz5pqZ5pqg5pqy5pq/5pu65pyO76Sp5p2m5p675qGS5p+A5qCB5qGE5qOP76iT5qWo76iU5qaY5qei5qiw5qmr5qmG5qmz5qm+5qui5quk5q+W5rC/5rGc5rKG5rGv5rOa5rSE5raH5rWv5raW5ras5reP5re45rey5re85ri55rmc5rin5ri85rq/5r6I5r615r+154CF54CH54Co54KF54Kr54SP54SE54Wc54WG54WH76iV54eB54e+54qxXCJdLFtcImZiYTFcIixcIueKvueMpO+olueNt+eOveePieePluePo+ePkueQh+ePteeQpueQqueQqeeQrueRoueSieeSn+eUgeeVr+eagueanOeanueam+eapu+ol+edhuWKr+egoeehjuehpOehuueksO+omO+ome+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+mHmlwiXSxbXCJmY2ExXCIsXCLph5fph57ph63ph67ph6Tph6XpiIbpiJDpiIrpiLrpiYDpiLzpiY7piZnpiZHpiLnpiafpiqfpibfpibjpi6fpi5fpi5npi5DvqKfpi5Xpi6Dpi5PpjKXpjKHpi7vvqKjpjJ7pi7/pjJ3pjILpjbDpjZfpjqTpj4bpj57pj7jpkLHpkYXpkYjplpLvp5zvqKnpmp3pmq/pnLPpnLvpnYPpnY3pnY/pnZHpnZXpoZfpoaXvqKrvqKvppKfvqKzppp7pqY7pq5npq5zprbXprbLpro/prrHprrvpsIDptbDptavvqK3puJnpu5FcIl0sW1wiZmNmMVwiLFwi4oWwXCIsOSxcIu+/ou+/pO+8h++8glwiXSxbXCI4ZmEyYWZcIixcIsuYy4fCuMuZy53Cr8uby5rvvZ7OhM6FXCJdLFtcIjhmYTJjMlwiLFwiwqHCpsK/XCJdLFtcIjhmYTJlYlwiLFwiwrrCqsKpwq7ihKLCpOKEllwiXSxbXCI4ZmE2ZTFcIixcIs6GzojOic6KzqpcIl0sW1wiOGZhNmU3XCIsXCLOjFwiXSxbXCI4ZmE2ZTlcIixcIs6OzqtcIl0sW1wiOGZhNmVjXCIsXCLOj1wiXSxbXCI4ZmE2ZjFcIixcIs6szq3Ors6vz4rOkM+Mz4LPjc+LzrDPjlwiXSxbXCI4ZmE3YzJcIixcItCCXCIsMTAsXCLQjtCPXCJdLFtcIjhmYTdmMlwiLFwi0ZJcIiwxMCxcItGe0Z9cIl0sW1wiOGZhOWExXCIsXCLDhsSQXCJdLFtcIjhmYTlhNFwiLFwixKZcIl0sW1wiOGZhOWE2XCIsXCLEslwiXSxbXCI4ZmE5YThcIixcIsWBxL9cIl0sW1wiOGZhOWFiXCIsXCLFisOYxZJcIl0sW1wiOGZhOWFmXCIsXCLFpsOeXCJdLFtcIjhmYTljMVwiLFwiw6bEkcOwxKfEscSzxLjFgsWAxYnFi8O4xZPDn8Wnw75cIl0sW1wiOGZhYWExXCIsXCLDgcOAw4TDgsSCx43EgMSEw4XDg8SGxIjEjMOHxIrEjsOJw4jDi8OKxJrElsSSxJhcIl0sW1wiOGZhYWJhXCIsXCLEnMSexKLEoMSkw43DjMOPw47Hj8SwxKrErsSoxLTEtsS5xL3Eu8WDxYfFhcORw5PDksOWw5THkcWQxYzDlcWUxZjFlsWaxZzFoMWexaTFosOaw5nDnMObxazHk8WwxarFssWuxajHl8ebx5nHlcW0w53FuMW2xbnFvcW7XCJdLFtcIjhmYWJhMVwiLFwiw6HDoMOkw6LEg8eOxIHEhcOlw6PEh8SJxI3Dp8SLxI/DqcOow6vDqsSbxJfEk8SZx7XEncSfXCJdLFtcIjhmYWJiZFwiLFwixKHEpcOtw6zDr8Oux5BcIl0sW1wiOGZhYmM1XCIsXCLEq8SvxKnEtcS3xLrEvsS8xYTFiMWGw7HDs8Oyw7bDtMeSxZHFjcO1xZXFmcWXxZvFncWhxZ/FpcWjw7rDucO8w7vFrceUxbHFq8Wzxa/FqceYx5zHmseWxbXDvcO/xbfFusW+xbxcIl0sW1wiOGZiMGExXCIsXCLkuILkuITkuIXkuIzkuJLkuJ/kuKPkuKTkuKjkuKvkuK7kuK/kuLDkuLXkuYDkuYHkuYTkuYfkuZHkuZrkuZzkuaPkuajkuankubTkubXkubnkub/kuo3kupbkupfkup3kuq/kurnku4Pku5Dku5rku5vku6Dku6Hku6Lku6jku6/ku7Hku7Pku7Xku73ku77ku7/kvIDkvILkvIPkvIjkvIvkvIzkvJLkvJXkvJbkvJfkvJnkvK7kvLHkvaDkvLPkvLXkvLfkvLnkvLvkvL7kvYDkvYLkvYjkvYnkvYvkvYzkvZLkvZTkvZbkvZjkvZ/kvaPkvarkvazkva7kvbHkvbfkvbjkvbnkvbrkvb3kvb7kvoHkvoLkvoRcIl0sW1wiOGZiMWExXCIsXCLkvoXkvonkvorkvozkvo7kvpDkvpLkvpPkvpTkvpfkvpnkvprkvp7kvp/kvrLkvrfkvrnkvrvkvrzkvr3kvr7kv4Dkv4Hkv4Xkv4bkv4jkv4nkv4vkv4zkv43kv4/kv5Lkv5zkv6Dkv6Lkv7Dkv7Lkv7zkv73kv7/lgIDlgIHlgITlgIflgIrlgIzlgI7lgJDlgJPlgJflgJjlgJvlgJzlgJ3lgJ7lgKLlgKflgK7lgLDlgLLlgLPlgLXlgYDlgYHlgYLlgYXlgYblgYrlgYzlgY7lgZHlgZLlgZPlgZflgZnlgZ/lgaDlgaLlgaPlgablgaflgarlga3lgbDlgbHlgLvlgoHlgoPlgoTlgoblgorlgo7lgo/lgpBcIl0sW1wiOGZiMmExXCIsXCLlgpLlgpPlgpTlgpblgpvlgpzlgp5cIiw0LFwi5YKq5YKv5YKw5YK55YK65YK95YOA5YOD5YOE5YOH5YOM5YOO5YOQ5YOT5YOU5YOY5YOc5YOd5YOf5YOi5YOk5YOm5YOo5YOp5YOv5YOx5YO25YO65YO+5YSD5YSG5YSH5YSI5YSL5YSM5YSN5YSO5YOy5YSQ5YSX5YSZ5YSb5YSc5YSd5YSe5YSj5YSn5YSo5YSs5YSt5YSv5YSx5YSz5YS05YS15YS45YS55YWC5YWK5YWP5YWT5YWV5YWX5YWY5YWf5YWk5YWm5YW+5YaD5YaE5YaL5YaO5YaY5Yad5Yah5Yaj5Yat5Ya45Ya65Ya85Ya+5Ya/5YeCXCJdLFtcIjhmYjNhMVwiLFwi5YeI5YeP5YeR5YeS5YeT5YeV5YeY5Yee5Yei5Yel5Yeu5Yey5Yez5Ye05Ye35YiB5YiC5YiF5YiS5YiT5YiV5YiW5YiY5Yii5Yio5Yix5Yiy5Yi15Yi85YmF5YmJ5YmV5YmX5YmY5Yma5Ymc5Ymf5Ymg5Ymh5Ymm5Ymu5Ym35Ym45Ym55YqA5YqC5YqF5YqK5YqM5YqT5YqV5YqW5YqX5YqY5Yqa5Yqc5Yqk5Yql5Yqm5Yqn5Yqv5Yqw5Yq25Yq35Yq45Yq65Yq75Yq95YuA5YuE5YuG5YuI5YuM5YuP5YuR5YuU5YuW5Yub5Yuc5Yuh5Yul5Yuo5Yup5Yuq5Yus5Yuw5Yux5Yu05Yu25Yu35YyA5YyD5YyK5YyLXCJdLFtcIjhmYjRhMVwiLFwi5YyM5YyR5YyT5YyY5Yyb5Yyc5Yye5Yyf5Yyl5Yyn5Yyo5Yyp5Yyr5Yys5Yyt5Yyw5Yyy5Yy15Yy85Yy95Yy+5Y2C5Y2M5Y2L5Y2Z5Y2b5Y2h5Y2j5Y2l5Y2s5Y2t5Y2y5Y255Y2+5Y6D5Y6H5Y6I5Y6O5Y6T5Y6U5Y6Z5Y6d5Y6h5Y6k5Y6q5Y6r5Y6v5Y6y5Y605Y615Y635Y645Y665Y695Y+A5Y+F5Y+P5Y+S5Y+T5Y+V5Y+a5Y+d5Y+e5Y+g5Y+m5Y+n5Y+15ZCC5ZCT5ZCa5ZCh5ZCn5ZCo5ZCq5ZCv5ZCx5ZC05ZC15ZGD5ZGE5ZGH5ZGN5ZGP5ZGe5ZGi5ZGk5ZGm5ZGn5ZGp5ZGr5ZGt5ZGu5ZG05ZG/XCJdLFtcIjhmYjVhMVwiLFwi5ZKB5ZKD5ZKF5ZKI5ZKJ5ZKN5ZKR5ZKV5ZKW5ZKc5ZKf5ZKh5ZKm5ZKn5ZKp5ZKq5ZKt5ZKu5ZKx5ZK35ZK55ZK65ZK75ZK/5ZOG5ZOK5ZON5ZOO5ZOg5ZOq5ZOs5ZOv5ZO25ZO85ZO+5ZO/5ZSA5ZSB5ZSF5ZSI5ZSJ5ZSM5ZSN5ZSO5ZSV5ZSq5ZSr5ZSy5ZS15ZS25ZS75ZS85ZS95ZWB5ZWH5ZWJ5ZWK5ZWN5ZWQ5ZWR5ZWY5ZWa5ZWb5ZWe5ZWg5ZWh5ZWk5ZWm5ZW/5ZaB5ZaC5ZaG5ZaI5ZaO5ZaP5ZaR5ZaS5ZaT5ZaU5ZaX5Zaj5Zak5Zat5Zay5Za/5ZeB5ZeD5ZeG5ZeJ5ZeL5ZeM5ZeO5ZeR5ZeSXCJdLFtcIjhmYjZhMVwiLFwi5ZeT5ZeX5ZeY5Zeb5Zee5Zei5Zep5Ze25Ze/5ZiF5ZiI5ZiK5ZiNXCIsNSxcIuWYmeWYrOWYsOWYs+WYteWYt+WYueWYu+WYvOWYveWYv+WZgOWZgeWZg+WZhOWZhuWZieWZi+WZjeWZj+WZlOWZnuWZoOWZoeWZouWZo+WZpuWZqeWZreWZr+WZseWZsuWZteWahOWaheWaiOWai+WajOWaleWameWamuWaneWanuWan+WapuWap+WaqOWaqeWaq+WarOWareWaseWas+Wat+WavuWbheWbieWbiuWbi+Wbj+WbkOWbjOWbjeWbmeWbnOWbneWbn+WboeWbpFwiLDQsXCLlm7Hlm6vlm61cIl0sW1wiOGZiN2ExXCIsXCLlm7blm7flnIHlnILlnIflnIrlnIzlnJHlnJXlnJrlnJvlnJ3lnKDlnKLlnKPlnKTlnKXlnKnlnKrlnKzlnK7lnK/lnLPlnLTlnL3lnL7lnL/lnYXlnYblnYzlnY3lnZLlnaLlnaXlnaflnajlnavlna1cIiw0LFwi5Z2z5Z205Z215Z235Z255Z265Z275Z285Z2+5Z6B5Z6D5Z6M5Z6U5Z6X5Z6Z5Z6a5Z6c5Z6d5Z6e5Z6f5Z6h5Z6V5Z6n5Z6o5Z6p5Z6s5Z645Z695Z+H5Z+I5Z+M5Z+P5Z+V5Z+d5Z+e5Z+k5Z+m5Z+n5Z+p5Z+t5Z+w5Z+15Z+25Z+45Z+95Z++5Z+/5aCD5aCE5aCI5aCJ5Z+hXCJdLFtcIjhmYjhhMVwiLFwi5aCM5aCN5aCb5aCe5aCf5aCg5aCm5aCn5aCt5aCy5aC55aC/5aGJ5aGM5aGN5aGP5aGQ5aGV5aGf5aGh5aGk5aGn5aGo5aG45aG85aG/5aKA5aKB5aKH5aKI5aKJ5aKK5aKM5aKN5aKP5aKQ5aKU5aKW5aKd5aKg5aKh5aKi5aKm5aKp5aKx5aKy5aOE5aK85aOC5aOI5aON5aOO5aOQ5aOS5aOU5aOW5aOa5aOd5aOh5aOi5aOp5aOz5aSF5aSG5aSL5aSM5aSS5aST5aSU6JmB5aSd5aSh5aSj5aSk5aSo5aSv5aSw5aSz5aS15aS25aS/5aWD5aWG5aWS5aWT5aWZ5aWb5aWd5aWe5aWf5aWh5aWj5aWr5aWtXCJdLFtcIjhmYjlhMVwiLFwi5aWv5aWy5aW15aW25aW55aW75aW85aaL5aaM5aaO5aaS5aaV5aaX5aaf5aak5aan5aat5aau5aav5aaw5aaz5aa35aa65aa85aeB5aeD5aeE5aeI5aeK5aeN5aeS5aed5aee5aef5aej5aek5aen5aeu5aev5aex5aey5ae05ae35aiA5aiE5aiM5aiN5aiO5aiS5aiT5aie5aij5aik5ain5aio5aiq5ait5aiw5amE5amF5amH5amI5amM5amQ5amV5ame5amj5aml5amn5amt5am35am65am75am+5aqL5aqQ5aqT5aqW5aqZ5aqc5aqe5aqf5aqg5aqi5aqn5aqs5aqx5aqy5aqz5aq15aq45aq65aq75aq/XCJdLFtcIjhmYmFhMVwiLFwi5auE5auG5auI5auP5aua5auc5aug5aul5auq5auu5au15au25au95ayA5ayB5ayI5ayX5ay05ayZ5ayb5ayd5ayh5ayl5ayt5ay45a2B5a2L5a2M5a2S5a2W5a2e5a2o5a2u5a2v5a285a295a2+5a2/5a6B5a6E5a6G5a6K5a6O5a6Q5a6R5a6T5a6U5a6W5a6o5a6p5a6s5a6t5a6v5a6x5a6y5a635a665a685a+A5a+B5a+N5a+P5a+WXCIsNCxcIuWvoOWvr+WvseWvtOWvveWwjOWwl+WwnuWwn+Wwo+WwpuWwqeWwq+WwrOWwruWwsOWwsuWwteWwtuWxmeWxmuWxnOWxouWxo+Wxp+WxqOWxqVwiXSxbXCI4ZmJiYTFcIixcIuWxreWxsOWxtOWxteWxuuWxu+WxvOWxveWyh+WyiOWyiuWyj+WykuWyneWyn+WyoOWyouWyo+WypuWyquWysuWytOWyteWyuuWzieWzi+WzkuWzneWzl+WzruWzseWzsuWztOW0geW0huW0jeW0kuW0q+W0o+W0pOW0puW0p+W0seW0tOW0ueW0veW0v+W1guW1g+W1huW1iOW1leW1keW1meW1iuW1n+W1oOW1oeW1ouW1pOW1quW1reW1sOW1ueW1uuW1vuW1v+W2geW2g+W2iOW2iuW2kuW2k+W2lOW2leW2meW2m+W2n+W2oOW2p+W2q+W2sOW2tOW2uOW2ueW3g+W3h+W3i+W3kOW3juW3mOW3meW3oOW3pFwiXSxbXCI4ZmJjYTFcIixcIuW3qeW3uOW3ueW4gOW4h+W4jeW4kuW4lOW4leW4mOW4n+W4oOW4ruW4qOW4suW4teW4vuW5i+W5kOW5ieW5keW5luW5mOW5m+W5nOW5nuW5qOW5qlwiLDQsXCLlubDluoDluovluo7luqLluqTluqXluqjluqrluqzlurHlurPlur3lur7lur/lu4blu4zlu4vlu47lu5Hlu5Llu5Tlu5Xlu5zlu57lu6Xlu6vlvILlvIblvIflvIjlvI7lvJnlvJzlvJ3lvKHlvKLlvKPlvKTlvKjlvKvlvKzlvK7lvLDlvLTlvLblvLvlvL3lvL/lvYDlvYTlvYXlvYflvY3lvZDlvZTlvZjlvZvlvaDlvaPlvaTlvadcIl0sW1wiOGZiZGExXCIsXCLlva/lvbLlvbTlvbXlvbjlvbrlvb3lvb7lvonlvo3lvo/lvpblvpzlvp3lvqLlvqflvqvlvqTlvqzlvq/lvrDlvrHlvrjlv4Tlv4flv4jlv4nlv4vlv5BcIiw0LFwi5b+e5b+h5b+i5b+o5b+p5b+q5b+s5b+t5b+u5b+v5b+y5b+z5b+25b+65b+85oCH5oCK5oCN5oCT5oCU5oCX5oCY5oCa5oCf5oCk5oCt5oCz5oC15oGA5oGH5oGI5oGJ5oGM5oGR5oGU5oGW5oGX5oGd5oGh5oGn5oGx5oG+5oG/5oKC5oKG5oKI5oKK5oKO5oKR5oKT5oKV5oKY5oKd5oKe5oKi5oKk5oKl5oKo5oKw5oKx5oK3XCJdLFtcIjhmYmVhMVwiLFwi5oK75oK+5oOC5oOE5oOI5oOJ5oOK5oOL5oOO5oOP5oOU5oOV5oOZ5oOb5oOd5oOe5oOi5oOl5oOy5oO15oO45oO85oO95oSC5oSH5oSK5oSM5oSQXCIsNCxcIuaEluaEl+aEmeaEnOaEnuaEouaEquaEq+aEsOaEseaEteaEtuaEt+aEueaFgeaFheaFhuaFieaFnuaFoOaFrOaFsuaFuOaFu+aFvOaFv+aGgOaGgeaGg+aGhOaGi+aGjeaGkuaGk+aGl+aGmOaGnOaGneaGn+aGoOaGpeaGqOaGquaGreaGuOaGueaGvOaHgOaHgeaHguaHjuaHj+aHleaHnOaHneaHnuaHn+aHoeaHouaHp+aHqeaHpVwiXSxbXCI4ZmJmYTFcIixcIuaHrOaHreaHr+aIgeaIg+aIhOaIh+aIk+aIleaInOaIoOaIouaIo+aIp+aIqeaIq+aIueaIveaJguaJg+aJhOaJhuaJjOaJkOaJkeaJkuaJlOaJluaJmuaJnOaJpOaJreaJr+aJs+aJuuaJveaKjeaKjuaKj+aKkOaKpuaKqOaKs+aKtuaKt+aKuuaKvuaKv+aLhOaLjuaLleaLluaLmuaLquaLsuaLtOaLvOaLveaMg+aMhOaMiuaMi+aMjeaMkOaMk+aMluaMmOaMqeaMquaMreaMteaMtuaMueaMvOaNgeaNguaNg+aNhOaNhuaNiuaNi+aNjuaNkuaNk+aNlOaNmOaNm+aNpeaNpuaNrOaNreaNseaNtOaNtVwiXSxbXCI4ZmMwYTFcIixcIuaNuOaNvOaNveaNv+aOguaOhOaOh+aOiuaOkOaOlOaOleaOmeaOmuaOnuaOpOaOpuaOreaOruaOr+aOveaPgeaPheaPiOaPjuaPkeaPk+aPlOaPleaPnOaPoOaPpeaPquaPrOaPsuaPs+aPteaPuOaPueaQieaQiuaQkOaQkuaQlOaQmOaQnuaQoOaQouaQpOaQpeaQqeaQquaQr+aQsOaQteaQveaQv+aRi+aRj+aRkeaRkuaRk+aRlOaRmuaRm+aRnOaRneaRn+aRoOaRoeaRo+aRreaRs+aRtOaRu+aRveaSheaSh+aSj+aSkOaSkeaSmOaSmeaSm+aSneaSn+aSoeaSo+aSpuaSqOaSrOaSs+aSveaSvuaSv1wiXSxbXCI4ZmMxYTFcIixcIuaThOaTieaTiuaTi+aTjOaTjuaTkOaTkeaTleaTl+aTpOaTpeaTqeaTquaTreaTsOaTteaTt+aTu+aTv+aUgeaUhOaUiOaUieaUiuaUj+aUk+aUlOaUluaUmeaUm+aUnuaUn+aUouaUpuaUqeaUruaUseaUuuaUvOaUveaVg+aVh+aVieaVkOaVkuaVlOaVn+aVoOaVp+aVq+aVuuaVveaWgeaWheaWiuaWkuaWleaWmOaWneaWoOaWo+aWpuaWruaWsuaWs+aWtOaWv+aXguaXiOaXieaXjuaXkOaXlOaXluaXmOaXn+aXsOaXsuaXtOaXteaXueaXvuaXv+aYgOaYhOaYiOaYieaYjeaYkeaYkuaYleaYluaYnVwiXSxbXCI4ZmMyYTFcIixcIuaYnuaYoeaYouaYo+aYpOaYpuaYqeaYquaYq+aYrOaYruaYsOaYseaYs+aYueaYt+aZgOaZheaZhuaZiuaZjOaZkeaZjuaZl+aZmOaZmeaZm+aZnOaZoOaZoeabu+aZquaZq+aZrOaZvuaZs+aZteaZv+aZt+aZuOaZueaZu+aagOaZvOaai+aajOaajeaakOaakuaameaamuaam+aanOaan+aaoOaapOaareaaseaasuaateaau+aav+abgOabguabg+abiOabjOabjuabj+ablOabm+abn+abqOabq+abrOabruabuuacheach+acjuack+acmeacnOacoOacouacs+acvuadheadh+adiOadjOadlOadleadnVwiXSxbXCI4ZmMzYTFcIixcIuadpuadrOadruadtOadtuadu+aegeaehOaejuaej+aekeaek+aeluaemOaemeaem+aesOaeseaesuaeteaeu+aevOaeveafueafgOafguafg+afheafiOafieafkuafl+afmeafnOafoeafpuafsOafsuaftuaft+ahkuaglOagmeagneagn+agqOagp+agrOagreagr+agsOagseags+agu+agv+ahhOahheahiuahjOahleahl+ahmOahm+ahq+ahrlwiLDQsXCLmobXmobnmobrmobvmobzmooLmooTmoobmoojmopbmopjmoprmopzmoqHmoqPmoqXmoqnmoqrmoq7morLmorvmo4Xmo4jmo4zmo49cIl0sW1wiOGZjNGExXCIsXCLmo5Dmo5Hmo5Pmo5bmo5nmo5zmo53mo6Xmo6jmo6rmo6vmo6zmo63mo7Dmo7Hmo7Xmo7bmo7vmo7zmo73mpIbmpInmpIrmpJDmpJHmpJPmpJbmpJfmpLHmpLPmpLXmpLjmpLvmpYLmpYXmpYnmpY7mpZfmpZvmpaPmpaTmpaXmpabmpajmpanmpazmpbDmpbHmpbLmpbrmpbvmpb/mpoDmpo3mppLmppbmppjmpqHmpqXmpqbmpqjmpqvmpq3mpq/mprfmprjmprrmprzmp4Xmp4jmp5Hmp5bmp5fmp6Lmp6Xmp67mp6/mp7Hmp7Pmp7Xmp77mqIDmqIHmqIPmqI/mqJHmqJXmqJrmqJ3mqKDmqKTmqKjmqLDmqLJcIl0sW1wiOGZjNWExXCIsXCLmqLTmqLfmqLvmqL7mqL/mqYXmqYbmqYnmqYrmqY7mqZDmqZHmqZLmqZXmqZbmqZvmqaTmqafmqarmqbHmqbPmqb7mqoHmqoPmqobmqofmqonmqovmqpHmqpvmqp3mqp7mqp/mqqXmqqvmqq/mqrDmqrHmqrTmqr3mqr7mqr/mq4bmq4nmq4jmq4zmq5Dmq5Tmq5Xmq5bmq5zmq53mq6Tmq6fmq6zmq7Dmq7Hmq7Lmq7zmq73mrILmrIPmrIbmrIfmrInmrI/mrJDmrJHmrJfmrJvmrJ7mrKTmrKjmrKvmrKzmrK/mrLXmrLbmrLvmrL/mrYbmrYrmrY3mrZLmrZbmrZjmrZ3mraDmrafmravmra7mrbDmrbXmrb1cIl0sW1wiOGZjNmExXCIsXCLmrb7mroLmroXmrpfmrpvmrp/mrqDmrqLmrqPmrqjmrqnmrqzmrq3mrq7mrrDmrrjmrrnmrr3mrr7mr4Pmr4Tmr4nmr4zmr5bmr5rmr6Hmr6Pmr6bmr6fmr67mr7Hmr7fmr7nmr7/msILmsITmsIXmsInmsI3msI7msJDmsJLmsJnmsJ/msKbmsKfmsKjmsKzmsK7msLPmsLXmsLbmsLrmsLvmsL/msYrmsYvmsY3msY/msZLmsZTmsZnmsZvmsZzmsavmsa3msa/msbTmsbbmsbjmsbnmsbvmsoXmsobmsofmsonmspTmspXmspfmspjmspzmsp/msrDmsrLmsrTms4Lms4bms43ms4/ms5Dms5Hms5Lms5Tms5ZcIl0sW1wiOGZjN2ExXCIsXCLms5rms5zms6Dms6fms6nms6vms6zms67ms7Lms7TmtITmtIfmtIrmtI7mtI/mtJHmtJPmtJrmtKbmtKfmtKjmsafmtK7mtK/mtLHmtLnmtLzmtL/mtZfmtZ7mtZ/mtaHmtaXmtafmta/mtbDmtbzmtoLmtofmtpHmtpLmtpTmtpbmtpfmtpjmtqrmtqzmtrTmtrfmtrnmtr3mtr/mt4Tmt4jmt4rmt47mt4/mt5bmt5vmt53mt5/mt6Dmt6Lmt6Xmt6nmt6/mt7Dmt7Tmt7bmt7zmuIDmuITmuJ7muKLmuKfmuLLmuLbmuLnmuLvmuLzmuYTmuYXmuYjmuYnmuYvmuY/muZHmuZLmuZPmuZTmuZfmuZzmuZ3muZ5cIl0sW1wiOGZjOGExXCIsXCLmuaLmuaPmuajmubPmubvmub3muo3mupPmupnmuqDmuqfmuq3muq7murHmurPmurvmur/mu4Dmu4Hmu4Pmu4fmu4jmu4rmu43mu47mu4/mu6vmu63mu67mu7nmu7vmu73mvITmvIjmvIrmvIzmvI3mvJbmvJjmvJrmvJvmvKbmvKnmvKrmvK/mvLDmvLPmvLbmvLvmvLzmvK3mvY/mvZHmvZLmvZPmvZfmvZnmvZrmvZ3mvZ7mvaHmvaLmvajmvazmvb3mvb7mvoPmvofmvojmvovmvozmvo3mvpDmvpLmvpPmvpTmvpbmvprmvp/mvqDmvqXmvqbmvqfmvqjmvq7mvq/mvrDmvrXmvrbmvrzmv4Xmv4fmv4jmv4pcIl0sW1wiOGZjOWExXCIsXCLmv5rmv57mv6jmv6nmv7Dmv7Xmv7nmv7zmv73ngIDngIXngIbngIfngI3ngJfngKDngKPngK/ngLTngLfngLnngLzngYPngYTngYjngYnngYrngYvngZTngZXngZ3ngZ7ngY7ngaTngaXngaznga7ngbXngbbngb7ngoHngoXngobngpRcIiw0LFwi54Kb54Kk54Kr54Kw54Kx54K054K354OK54OR54OT54OU54OV54OW54OY54Oc54Ok54O654SDXCIsNCxcIueEi+eEjOeEj+eEnueEoOeEq+eEreeEr+eEsOeEseeEuOeFgeeFheeFhueFh+eFiueFi+eFkOeFkueFl+eFmueFnOeFnueFoFwiXSxbXCI4ZmNhYTFcIixcIueFqOeFueeGgOeGheeGh+eGjOeGkueGmueGm+eGoOeGoueGr+eGsOeGsueGs+eGuueGv+eHgOeHgeeHhOeHi+eHjOeHk+eHlueHmeeHmueHnOeHuOeHvueIgOeIh+eIiOeIieeIk+eIl+eImueIneeIn+eIpOeIq+eIr+eItOeIuOeIueeJgeeJgueJg+eJheeJjueJj+eJkOeJk+eJleeJlueJmueJnOeJnueJoOeJo+eJqOeJq+eJrueJr+eJseeJt+eJuOeJu+eJvOeJv+eKhOeKieeKjeeKjueKk+eKm+eKqOeKreeKrueKseeKtOeKvueLgeeLh+eLieeLjOeLleeLlueLmOeLn+eLpeeLs+eLtOeLuueLu1wiXSxbXCI4ZmNiYTFcIixcIueLvueMgueMhOeMheeMh+eMi+eMjeeMkueMk+eMmOeMmeeMnueMoueMpOeMp+eMqOeMrOeMseeMsueMteeMuueMu+eMveeNg+eNjeeNkOeNkueNlueNmOeNneeNnueNn+eNoOeNpueNp+eNqeeNq+eNrOeNrueNr+eNseeNt+eNueeNvOeOgOeOgeeOg+eOheeOhueOjueOkOeOk+eOleeOl+eOmOeOnOeOnueOn+eOoOeOoueOpeeOpueOqueOq+eOreeOteeOt+eOueeOvOeOveeOv+ePheePhuePieePi+ePjOePj+ePkuePk+ePluePmeePneePoeePo+ePpuePp+ePqeePtOePteePt+ePueePuuePu+ePvVwiXSxbXCI4ZmNjYTFcIixcIuePv+eQgOeQgeeQhOeQh+eQiueQkeeQmueQm+eQpOeQpueQqFwiLDksXCLnkLnnkYDnkYPnkYTnkYbnkYfnkYvnkY3nkZHnkZLnkZfnkZ3nkaLnkabnkafnkajnkavnka3nka7nkbHnkbLnkoDnkoHnkoXnkobnkofnkonnko/nkpDnkpHnkpLnkpjnkpnnkprnkpznkp/nkqDnkqHnkqPnkqbnkqjnkqnnkqrnkqvnkq7nkq/nkrHnkrLnkrXnkrnnkrvnkr/nk4jnk4nnk4znk5Dnk5Pnk5jnk5rnk5vnk57nk5/nk6Tnk6jnk6rnk6vnk6/nk7Tnk7rnk7vnk7znk7/nlIZcIl0sW1wiOGZjZGExXCIsXCLnlJLnlJbnlJfnlKDnlKHnlKTnlKfnlKnnlKrnlK/nlLbnlLnnlL3nlL7nlL/nlYDnlYPnlYfnlYjnlY7nlZDnlZLnlZfnlZ7nlZ/nlaHnla/nlbHnlblcIiw1LFwi55aB55aF55aQ55aS55aT55aV55aZ55ac55ai55ak55a055a655a/55eA55eB55eE55eG55eM55eO55eP55eX55ec55ef55eg55eh55ek55en55es55eu55ev55ex55e555iA55iC55iD55iE55iH55iI55iK55iM55iP55iS55iT55iV55iW55iZ55ib55ic55id55ie55ij55il55im55ip55it55iy55iz55i155i455i5XCJdLFtcIjhmY2VhMVwiLFwi55i655i855mK55mA55mB55mD55mE55mF55mJ55mL55mV55mZ55mf55mk55ml55mt55mu55mv55mx55m055qB55qF55qM55qN55qV55qb55qc55qd55qf55qg55qiXCIsNixcIueaqueareeaveebgeebheebieebi+ebjOebjueblOebmeeboOebpuebqOebrOebsOebseebtuebueebvOecgOechueciuecjueckueclOecleecl+ecmeecmuecnOecouecqOecreecruecr+ectOecteectuecueecveecvuedguedheedhuediuedjeedjuedj+edkuedluedl+ednOednuedn+edoOedolwiXSxbXCI4ZmNmYTFcIixcIuedpOedp+edquedrOedsOedsueds+edtOeduuedveeegOeehOeejOeejeeelOeeleeelueemueen+eeoueep+eequeerueer+eeseeeteeevuefg+efieefkeefkuefleefmeefnuefn+efoOefpOefpuefquefrOefsOefseeftOefuOefu+egheeghuegieegjeegjuegkeegneegoeegouego+egreegruegsOegteegt+ehg+ehhOehh+ehiOehjOehjuehkuehnOehnuehoOehoeeho+ehpOehqOehquehruehuuehvueiiueij+eilOeimOeioeeineeinuein+eipOeiqOeirOeireeisOeiseeisueis1wiXSxbXCI4ZmQwYTFcIixcIueiu+eiveeiv+ejh+ejiOejieejjOejjuejkuejk+ejleejluejpOejm+ejn+ejoOejoeejpuejquejsuejs+ekgOejtuejt+ejuueju+ejv+ekhuekjOekkOekmueknOeknuekn+ekoOekpeekp+ekqeekreekseektOekteeku+ekveekv+elhOelheelhueliueli+elj+elkeellOelmOelm+elnOelp+elqeelq+elsuelueelu+elvOelvuemi+emjOemkeemk+emlOemleemluemmOemm+emnOemoeemqOemqeemq+emr+emseemtOemuOemu+enguenhOenh+eniOeniuenj+enlOenluenmuenneennlwiXSxbXCI4ZmQxYTFcIixcIuenoOenouenpeenquenq+enreenseenuOenvOeogueog+eoh+eoieeoiueojOeokeeoleeom+eonueooeeop+eoq+eoreeor+eosOeotOeoteeouOeoueeouuephOepheeph+epiOepjOepleepluepmeepnOepneepn+epoOeppeepp+epquepreepteepuOepvueqgOeqgueqheeqhueqiueqi+eqkOeqkeeqlOeqnueqoOeqo+eqrOeqs+eqteequeequ+eqvOerhuerieerjOerjuerkeerm+erqOerqeerq+errOerseertOeru+erveervuesh+eslOesn+eso+esp+esqeesquesq+esreesruesr+essFwiXSxbXCI4ZmQyYTFcIixcIuesseestOesveesv+etgOetgeeth+etjuetleetoOetpOetpuetqeetquetreetr+etsuets+ett+euhOeuieeujueukOeukeeulueum+eunueuoOeupeeurOeur+eusOeusueuteeutueuuueuu+euvOeuveevguevheeviOeviuevlOevluevl+evmeevmuevm+evqOevquevsuevtOevteevuOevueevuuevvOevvuewgeewguewg+ewhOewhuewieewi+ewjOewjuewj+ewmeewm+ewoOewpeewpuewqOewrOewseews+ewtOewtuewueewuuexhuexiuexleexkeexkuexk+exmVwiLDVdLFtcIjhmZDNhMVwiLFwi57Gh57Gj57Gn57Gp57Gt57Gu57Gw57Gy57G557G857G957KG57KH57KP57KU57Ke57Kg57Km57Kw57K257K357K657K757K857K/57OE57OH57OI57OJ57ON57OP57OT57OU57OV57OX57OZ57Oa57Od57Om57Op57Or57O157SD57SH57SI57SJ57SP57SR57SS57ST57SW57Sd57Se57Sj57Sm57Sq57St57Sx57S857S957S+57WA57WB57WH57WI57WN57WR57WT57WX57WZ57Wa57Wc57Wd57Wl57Wn57Wq57Ww57W457W657W757W/57aB57aC57aD57aF57aG57aI57aL57aM57aN57aR57aW57aX57adXCJdLFtcIjhmZDRhMVwiLFwi57ae57am57an57aq57az57a257a357a557eCXCIsNCxcIue3jOe3jee3jue3l+e3mee4gOe3oue3pee3pue3que3q+e3ree3see3tee3tue3uee3uue4iOe4kOe4kee4lee4l+e4nOe4nee4oOe4p+e4qOe4rOe4ree4r+e4s+e4tue4v+e5hOe5hee5h+e5jue5kOe5kue5mOe5n+e5oee5oue5pee5q+e5rue5r+e5s+e5uOe5vue6gee6hue6h+e6iue6jee6kee6lee6mOe6mue6nee6nue8vOe8u+e8vee8vue8v+e9g+e9hOe9h+e9j+e9kue9k+e9m+e9nOe9nee9oee9o+e9pOe9pee9pue9rVwiXSxbXCI4ZmQ1YTFcIixcIue9see9vee9vue9v+e+gOe+i+e+jee+j+e+kOe+kee+lue+l+e+nOe+oee+oue+pue+que+ree+tOe+vOe+v+e/gOe/g+e/iOe/jue/j+e/m+e/n+e/o+e/pee/qOe/rOe/rue/r+e/sue/uue/vee/vue/v+iAh+iAiOiAiuiAjeiAjuiAj+iAkeiAk+iAlOiAluiAneiAnuiAn+iAoOiApOiApuiArOiAruiAsOiAtOiAteiAt+iAueiAuuiAvOiAvuiBgOiBhOiBoOiBpOiBpuiBreiBseiBteiCgeiCiOiCjuiCnOiCnuiCpuiCp+iCq+iCuOiCueiDiOiDjeiDj+iDkuiDlOiDleiDl+iDmOiDoOiDreiDrlwiXSxbXCI4ZmQ2YTFcIixcIuiDsOiDsuiDs+iDtuiDueiDuuiDvuiEg+iEi+iEluiEl+iEmOiEnOiEnuiEoOiEpOiEp+iErOiEsOiEteiEuuiEvOiFheiFh+iFiuiFjOiFkuiFl+iFoOiFoeiFp+iFqOiFqeiFreiFr+iFt+iGgeiGkOiGhOiGheiGhuiGi+iGjuiGluiGmOiGm+iGnuiGouiGruiGsuiGtOiGu+iHi+iHg+iHheiHiuiHjuiHj+iHleiHl+iHm+iHneiHnuiHoeiHpOiHq+iHrOiHsOiHseiHsuiHteiHtuiHuOiHueiHveiHv+iIgOiIg+iIj+iIk+iIlOiImeiImuiIneiIoeiIouiIqOiIsuiItOiIuuiJg+iJhOiJheiJhlwiXSxbXCI4ZmQ3YTFcIixcIuiJi+iJjuiJj+iJkeiJluiJnOiJoOiJo+iJp+iJreiJtOiJu+iJveiJv+iKgOiKgeiKg+iKhOiKh+iKieiKiuiKjuiKkeiKlOiKluiKmOiKmuiKm+iKoOiKoeiKo+iKpOiKp+iKqOiKqeiKquiKruiKsOiKsuiKtOiKt+iKuuiKvOiKvuiKv+iLhuiLkOiLleiLmuiLoOiLouiLpOiLqOiLquiLreiLr+iLtuiLt+iLveiLvuiMgOiMgeiMh+iMiOiMiuiMi+iNlOiMm+iMneiMnuiMn+iMoeiMouiMrOiMreiMruiMsOiMs+iMt+iMuuiMvOiMveiNguiNg+iNhOiNh+iNjeiNjuiNkeiNleiNluiNl+iNsOiNuFwiXSxbXCI4ZmQ4YTFcIixcIuiNveiNv+iOgOiOguiOhOiOhuiOjeiOkuiOlOiOleiOmOiOmeiOm+iOnOiOneiOpuiOp+iOqeiOrOiOvuiOv+iPgOiPh+iPieiPj+iPkOiPkeiPlOiPneiNk+iPqOiPquiPtuiPuOiPueiPvOiQgeiQhuiQiuiQj+iQkeiQleiQmeiOreiQr+iQueiRheiRh+iRiOiRiuiRjeiRj+iRkeiRkuiRluiRmOiRmeiRmuiRnOiRoOiRpOiRpeiRp+iRquiRsOiRs+iRtOiRtuiRuOiRvOiRveiSgeiSheiSkuiSk+iSleiSnuiSpuiSqOiSqeiSquiSr+iSseiStOiSuuiSveiSvuiTgOiTguiTh+iTiOiTjOiTj+iTk1wiXSxbXCI4ZmQ5YTFcIixcIuiTnOiTp+iTquiTr+iTsOiTseiTsuiTt+iUsuiTuuiTu+iTveiUguiUg+iUh+iUjOiUjuiUkOiUnOiUnuiUouiUo+iUpOiUpeiUp+iUquiUq+iUr+iUs+iUtOiUtuiUv+iVhuiVj1wiLDQsXCLolZbolZnolZxcIiw2LFwi6JWk6JWr6JWv6JW56JW66JW76JW96JW/6JaB6JaF6JaG6JaJ6JaL6JaM6JaP6JaT6JaY6Jad6Jaf6Jag6Jai6Jal6Jan6Ja06Ja26Ja36Ja46Ja86Ja96Ja+6Ja/6JeC6JeH6JeK6JeL6JeO6Jat6JeY6Jea6Jef6Jeg6Jem6Jeo6Jet6Jez6Je26Je8XCJdLFtcIjhmZGFhMVwiLFwi6Je/6JiA6JiE6JiF6JiN6JiO6JiQ6JiR6JiS6JiY6JiZ6Jib6Jie6Jih6Jin6Jip6Ji26Ji46Ji66Ji86Ji96JmA6JmC6JmG6JmS6JmT6JmW6JmX6JmY6JmZ6Jmd6JmgXCIsNCxcIuiZqeiZrOiZr+iZteiZtuiZt+iZuuiajeiakeialuiamOiamuianOiaoeiapuiap+iaqOiareiaseias+iatOiateiat+iauOiaueiav+ibgOibgeibg+ibheibkeibkuibleibl+ibmuibnOiboOibo+ibpeibp+iaiOibuuibvOibveichOicheich+ici+icjuicj+ickOick+iclOicmeicnuicn+icoeico1wiXSxbXCI4ZmRiYTFcIixcIuicqOicruicr+icseicsuicueicuuicvOicveicvuidgOidg+idheidjeidmOidneidoeidpOidpeidr+idseidsuidu+ieg1wiLDYsXCLonovonozonpDonpPonpXonpfonpjonpnonp7onqDonqPonqfonqzonq3onq7onrHonrXonr7onr/on4Hon4jon4non4ron47on5Xon5bon5non5ron5zon5/on6Lon6Pon6Ton6ron6von63on7Hon7Pon7jon7ron7/ooIHooIPooIbooInooIrooIvooJDooJnooJLooJPooJTooJjooJrooJvooJzooJ7ooJ/ooKjooK3ooK7ooLDooLLooLVcIl0sW1wiOGZkY2ExXCIsXCLooLrooLzooYHooYPooYXooYjooYnooYrooYvooY7ooZHooZXooZbooZjooZrooZzooZ/ooaDooaTooanoobHoobnoobvoooDoopjooproopvoopzoop/ooqDooqjooqroorroor3oor7oo4Doo4pcIiw0LFwi6KOR6KOS6KOT6KOb6KOe6KOn6KOv6KOw6KOx6KO16KO36KSB6KSG6KSN6KSO6KSP6KSV6KSW6KSY6KSZ6KSa6KSc6KSg6KSm6KSn6KSo6KSw6KSx6KSy6KS16KS56KS66KS+6KWA6KWC6KWF6KWG6KWJ6KWP6KWS6KWX6KWa6KWb6KWc6KWh6KWi6KWj6KWr6KWu6KWw6KWz6KW16KW6XCJdLFtcIjhmZGRhMVwiLFwi6KW76KW86KW96KaJ6KaN6KaQ6KaU6KaV6Kab6Kac6Kaf6Kag6Kal6Kaw6Ka06Ka16Ka26Ka36Ka86KeUXCIsNCxcIuinpeinqeinq+inreinseins+intuinueinveinv+iohOioheioh+ioj+iokeiokuiolOioleionuiooOioouiopOiopuioq+iorOior+ioteiot+ioveiovuipgOipg+ipheiph+ipieipjeipjuipk+ipluipl+ipmOipnOipneipoeippeipp+ipteiptuipt+ipueipuuipu+ipvuipv+iqgOiqg+iqhuiqi+iqj+iqkOiqkuiqluiql+iqmeiqn+iqp+iqqeiqruiqr+iqs1wiXSxbXCI4ZmRlYTFcIixcIuiqtuiqt+iqu+iqvuirg+irhuiriOirieiriuirkeirk+irlOirleirl+irneirn+irrOirsOirtOirteirtuirvOirv+isheishuisi+iskeisnOisnuisn+isiuisreissOist+isvOitglwiLDQsXCLorYjorZLorZPorZTorZnorY3orZ7oraPora3orbborbjorbnorbzorb7oroHoroToroXorovoro3oro/orpTorpXorpzorp7orp/osLjosLnosL3osL7osYXosYfosYnosYvosY/osZHosZPosZTosZfosZjosZvosZ3osZnosaPosaTosabosajosanosa3osbPosbXosbbosbvosb7osoZcIl0sW1wiOGZkZmExXCIsXCLosofosovospDospLospPospnospvospzosqTosrnosrros4Xos4bos4nos4vos4/os5bos5Xos5nos53os6Hos6jos6zos6/os7Dos7Los7Xos7fos7jos77os7/otIHotIPotInotJLotJfotJvotaXotanotazota7otb/otoLotoTotojoto3otpDotpHotpXotp7otp/otqDotqbotqvotqzotq/otrLotrXotrfotrnotrvot4Dot4Xot4bot4fot4jot4rot47ot5Hot5Tot5Xot5fot5not6Tot6Xot6fot6zot7Dotrzot7Hot7Lot7Tot73ouIHouITouIXouIbouIvouJHouJTouJbouKDouKHouKJcIl0sW1wiOGZlMGExXCIsXCLouKPouKbouKfouLHouLPouLbouLfouLjouLnouL3ouYDouYHouYvouY3ouY7ouY/ouZTouZvouZzouZ3ouZ7ouaHouaLouanouazoua3oua/oubDoubHoubnoubroubvouoLouoPouonoupDoupLoupXouproupvoup3oup7ouqLouqfouqnouq3ouq7ourPourXourrourvou4Dou4Hou4Pou4Tou4fou4/ou5Hou5Tou5zou6jou67ou7Dou7Hou7fou7nou7rou63ovIDovILovIfovIjovI/ovJDovJbovJfovJjovJ7ovKDovKHovKPovKXovKfovKjovKzovK3ovK7ovLTovLXovLbovLfovLrovYDovYFcIl0sW1wiOGZlMWExXCIsXCLovYPovYfovY/ovZFcIiw0LFwi6L2Y6L2d6L2e6L2l6L6d6L6g6L6h6L6k6L6l6L6m6L616L626L646L6+6L+A6L+B6L+G6L+K6L+L6L+N6L+Q6L+S6L+T6L+V6L+g6L+j6L+k6L+o6L+u6L+x6L+16L+26L+76L++6YCC6YCE6YCI6YCM6YCY6YCb6YCo6YCp6YCv6YCq6YCs6YCt6YCz6YC06YC36YC/6YGD6YGE6YGM6YGb6YGd6YGi6YGm6YGn6YGs6YGw6YG06YG56YKF6YKI6YKL6YKM6YKO6YKQ6YKV6YKX6YKY6YKZ6YKb6YKg6YKh6YKi6YKl6YKw6YKy6YKz6YK06YK26YK96YOM6YK+6YODXCJdLFtcIjhmZTJhMVwiLFwi6YOE6YOF6YOH6YOI6YOV6YOX6YOY6YOZ6YOc6YOd6YOf6YOl6YOS6YO26YOr6YOv6YOw6YO06YO+6YO/6YSA6YSE6YSF6YSG6YSI6YSN6YSQ6YSU6YSW6YSX6YSY6YSa6YSc6YSe6YSg6YSl6YSi6YSj6YSn6YSp6YSu6YSv6YSx6YS06YS26YS36YS56YS66YS86YS96YWD6YWH6YWI6YWP6YWT6YWX6YWZ6YWa6YWb6YWh6YWk6YWn6YWt6YW06YW56YW66YW76YaB6YaD6YaF6YaG6YaK6YaO6YaR6YaT6YaU6YaV6YaY6Yae6Yah6Yam6Yao6Yas6Yat6Yau6Yaw6Yax6Yay6Yaz6Ya26Ya76Ya86Ya96Ya/XCJdLFtcIjhmZTNhMVwiLFwi6YeC6YeD6YeF6YeT6YeU6YeX6YeZ6Yea6Yee6Yek6Yel6Yep6Yeq6YesXCIsNSxcIumHt+mHuemHu+mHvemIgOmIgemIhOmIhemIhumIh+mIiemIiumIjOmIkOmIkumIk+mIlumImOmInOmInemIo+mIpOmIpemIpumIqOmIrumIr+mIsOmIs+mItemItumIuOmIuemIuumIvOmIvumJgOmJgumJg+mJhumJh+mJiumJjemJjumJj+mJkemJmOmJmemJnOmJnemJoOmJoemJpemJp+mJqOmJqemJrumJr+mJsOmJtVwiLDQsXCLpibvpibzpib3pib/piojpionpiorpio3pio7pipLpipdcIl0sW1wiOGZlNGExXCIsXCLpipnpip/piqDpiqTpiqXpiqfpiqjpiqvpiq/pirLpirbpirjpirrpirvpirzpir3pir9cIiw0LFwi6YuF6YuG6YuH6YuI6YuL6YuM6YuN6YuO6YuQ6YuT6YuV6YuX6YuY6YuZ6Yuc6Yud6Yuf6Yug6Yuh6Yuj6Yul6Yun6Yuo6Yus6Yuu6Yuw6Yu56Yu76Yu/6YyA6YyC6YyI6YyN6YyR6YyU6YyV6Yyc6Yyd6Yye6Yyf6Yyh6Yyk6Yyl6Yyn6Yyp6Yyq6Yyz6Yy06Yy26Yy36Y2H6Y2I6Y2J6Y2Q6Y2R6Y2S6Y2V6Y2X6Y2Y6Y2a6Y2e6Y2k6Y2l6Y2n6Y2p6Y2q6Y2t6Y2v6Y2w6Y2x6Y2z6Y206Y22XCJdLFtcIjhmZTVhMVwiLFwi6Y266Y296Y2/6Y6A6Y6B6Y6C6Y6I6Y6K6Y6L6Y6N6Y6P6Y6S6Y6V6Y6Y6Y6b6Y6e6Y6h6Y6j6Y6k6Y6m6Y6o6Y6r6Y606Y616Y626Y666Y6p6Y+B6Y+E6Y+F6Y+G6Y+H6Y+JXCIsNCxcIumPk+mPmemPnOmPnumPn+mPoumPpumPp+mPuemPt+mPuOmPuumPu+mPvemQgemQgumQhOmQiOmQiemQjemQjumQj+mQlemQlumQl+mQn+mQrumQr+mQsemQsumQs+mQtOmQu+mQv+mQvemRg+mRhemRiOmRiumRjOmRlemRmemRnOmRn+mRoemRo+mRqOmRq+mRremRrumRr+mRsemRsumShOmSg+mVuOmVuVwiXSxbXCI4ZmU2YTFcIixcIumVvumWhOmWiOmWjOmWjemWjumWnemWnumWn+mWoemWpumWqemWq+mWrOmWtOmWtumWuumWvemWv+mXhumXiOmXiemXi+mXkOmXkemXkumXk+mXmemXmumXnemXnumXn+mXoOmXpOmXpumYnemYnumYoumYpOmYpemYpumYrOmYsemYs+mYt+mYuOmYuemYuumYvOmYvemZgemZkumZlOmZlumZl+mZmOmZoemZrumZtOmZu+mZvOmZvumZv+magemagumag+mahOmaiemakemalumamumaneman+mapOmapemapumaqemarumar+mas+mauumbiumbkuW2sumbmOmbmumbnembnumbn+mbqembr+mbsembuumcglwiXSxbXCI4ZmU3YTFcIixcIumcg+mchemciemcmumcm+mcnemcoemcoumco+mcqOmcsemcs+mdgemdg+mdiumdjumdj+mdlemdl+mdmOmdmumdm+mdo+mdp+mdqumdrumds+mdtumdt+mduOmdu+mdvemdv+megOmeiemelemelumel+memememumenumen+meoumerOmerumesemesumetemetumeuOmeuemeuumevOmevumev+mfgemfhOmfhemfh+mfiemfiumfjOmfjemfjumfkOmfkemflOmfl+mfmOmfmemfnemfnumfoOmfm+mfoemfpOmfr+mfsemftOmft+mfuOmfuumgh+mgiumgmemgjemgjumglOmglumgnOmgnumgoOmgo+mgplwiXSxbXCI4ZmU4YTFcIixcIumgq+mgrumgr+mgsOmgsumgs+mgtemgpemgvumhhOmhh+mhiumhkemhkumhk+mhlumhl+mhmemhmumhoumho+mhpemhpumhqumhrOmiq+miremirumisOmitOmit+miuOmiuumiu+miv+mjgumjhemjiOmjjOmjoemjo+mjpemjpumjp+mjqumjs+mjtumkgumkh+mkiOmkkemklemklumkl+mkmumkm+mknOmkn+mkoumkpumkp+mkq+mksVwiLDQsXCLppLnppLrppLvppLzppYDppYHppYbppYfppYjppY3ppY7ppZTppZjppZnppZvppZzppZ7ppZ/ppaDpppvppp3ppp/ppqbpprDpprHpprLpprVcIl0sW1wiOGZlOWExXCIsXCLpprnpprrppr3ppr/pp4Ppp4npp5Ppp5Tpp5npp5rpp5zpp57pp6fpp6rpp6vpp6zpp7Dpp7Tpp7Xpp7npp73pp77pqILpqIPpqITpqIvpqIzpqJDpqJHpqJbpqJ7pqKDpqKLpqKPpqKTpqKfpqK3pqK7pqLPpqLXpqLbpqLjpqYfpqYHpqYTpqYrpqYvpqYzpqY7pqZHpqZTpqZbpqZ3pqqrpqqzpqq7pqq/pqrLpqrTpqrXpqrbpqrnpqrvpqr7pqr/pq4Hpq4Ppq4bpq4jpq47pq5Dpq5Lpq5Xpq5bpq5fpq5vpq5zpq6Dpq6Tpq6Xpq6fpq6npq6zpq7Lpq7Ppq7Xpq7npq7rpq73pq79cIiw0XSxbXCI4ZmVhYTFcIixcIumshOmshemsiOmsiemsi+msjOmsjemsjumskOmskumslumsmemsm+msnOmsoOmspumsq+msremss+mstOmstemst+msuemsuumsvemtiOmti+mtjOmtlemtlumtl+mtm+mtnumtoemto+mtpemtpumtqOmtqlwiLDQsXCLprbPprbXprbfprbjprbnprb/proDproTproXprobprofpronprorprovpro3pro/prpDprpTprprprp3prp7prqbprqfprqnprqzprrDprrHprrLprrfprrjprrvprrzprr7prr/pr4Hpr4fpr4jpr47pr5Dpr5fpr5jpr53pr5/pr6Xpr6fpr6rpr6vpr6/pr7Ppr7fpr7hcIl0sW1wiOGZlYmExXCIsXCLpr7npr7rpr73pr7/psIDpsILpsIvpsI/psJHpsJbpsJjpsJnpsJrpsJzpsJ7psKLpsKPpsKZcIiw0LFwi6bCx6bC16bC26bC36bC96bGB6bGD6bGE6bGF6bGJ6bGK6bGO6bGP6bGQ6bGT6bGU6bGW6bGY6bGb6bGd6bGe6bGf6bGj6bGp6bGq6bGc6bGr6bGo6bGu6bGw6bGy6bG16bG36bG76bOm6bOy6bO36bO56bSL6bSC6bSR6bSX6bSY6bSc6bSd6bSe6bSv6bSw6bSy6bSz6bS06bS66bS86bWF6bS96bWC6bWD6bWH6bWK6bWT6bWU6bWf6bWj6bWi6bWl6bWp6bWq6bWr6bWw6bW26bW36bW7XCJdLFtcIjhmZWNhMVwiLFwi6bW86bW+6baD6baE6baG6baK6baN6baO6baS6baT6baV6baW6baX6baY6bah6baq6bas6bau6bax6ba16ba56ba86ba/6beD6beH6beJ6beK6beU6beV6beW6beX6bea6bee6bef6beg6bel6ben6bep6ber6beu6bew6bez6be06be+6biK6biC6biH6biO6biQ6biR6biS6biV6biW6biZ6bic6bid6bm66bm76bm86bqA6bqC6bqD6bqE6bqF6bqH6bqO6bqP6bqW6bqY6bqb6bqe6bqk6bqo6bqs6bqu6bqv6bqw6bqz6bq06bq16buG6buI6buL6buV6buf6buk6bun6bus6but6buu6buw6bux6buy6bu1XCJdLFtcIjhmZWRhMVwiLFwi6bu46bu/6byC6byD6byJ6byP6byQ6byR6byS6byU6byW6byX6byZ6bya6byb6byf6byi6bym6byq6byr6byv6byx6byy6by06by36by56by66by86by96by/6b2B6b2DXCIsNCxcIum9k+m9lem9lum9l+m9mOm9mum9nem9num9qOm9qem9rVwiLDQsXCLpvbPpvbXpvbrpvb3pvo/pvpDpvpHpvpLpvpTpvpbpvpfpvp7pvqHpvqLpvqPpvqVcIl1dXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9ldWNqcC5qc29uXG4vLyBtb2R1bGUgaWQgPSAxNDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7XCJ1Q2hhcnNcIjpbMTI4LDE2NSwxNjksMTc4LDE4NCwyMTYsMjI2LDIzNSwyMzgsMjQ0LDI0OCwyNTEsMjUzLDI1OCwyNzYsMjg0LDMwMCwzMjUsMzI5LDMzNCwzNjQsNDYzLDQ2NSw0NjcsNDY5LDQ3MSw0NzMsNDc1LDQ3Nyw1MDYsNTk0LDYxMCw3MTIsNzE2LDczMCw5MzAsOTM4LDk2Miw5NzAsMTAyNiwxMTA0LDExMDYsODIwOSw4MjE1LDgyMTgsODIyMiw4MjMxLDgyNDEsODI0NCw4MjQ2LDgyNTIsODM2NSw4NDUyLDg0NTQsODQ1OCw4NDcxLDg0ODIsODU1Niw4NTcwLDg1OTYsODYwMiw4NzEzLDg3MjAsODcyMiw4NzI2LDg3MzEsODczNyw4NzQwLDg3NDIsODc0OCw4NzUxLDg3NjAsODc2Niw4Nzc3LDg3ODEsODc4Nyw4ODAyLDg4MDgsODgxNiw4ODU0LDg4NTgsODg3MCw4ODk2LDg5NzksOTMyMiw5MzcyLDk1NDgsOTU4OCw5NjE2LDk2MjIsOTYzNCw5NjUyLDk2NjIsOTY3Miw5Njc2LDk2ODAsOTcwMiw5NzM1LDk3MzgsOTc5Myw5Nzk1LDExOTA2LDExOTA5LDExOTEzLDExOTE3LDExOTI4LDExOTQ0LDExOTQ3LDExOTUxLDExOTU2LDExOTYwLDExOTY0LDExOTc5LDEyMjg0LDEyMjkyLDEyMzEyLDEyMzE5LDEyMzMwLDEyMzUxLDEyNDM2LDEyNDQ3LDEyNTM1LDEyNTQzLDEyNTg2LDEyODQyLDEyODUwLDEyOTY0LDEzMjAwLDEzMjE1LDEzMjE4LDEzMjUzLDEzMjYzLDEzMjY3LDEzMjcwLDEzMzg0LDEzNDI4LDEzNzI3LDEzODM5LDEzODUxLDE0NjE3LDE0NzAzLDE0ODAxLDE0ODE2LDE0OTY0LDE1MTgzLDE1NDcxLDE1NTg1LDE2NDcxLDE2NzM2LDE3MjA4LDE3MzI1LDE3MzMwLDE3Mzc0LDE3NjIzLDE3OTk3LDE4MDE4LDE4MjEyLDE4MjE4LDE4MzAxLDE4MzE4LDE4NzYwLDE4ODExLDE4ODE0LDE4ODIwLDE4ODIzLDE4ODQ0LDE4ODQ4LDE4ODcyLDE5NTc2LDE5NjIwLDE5NzM4LDE5ODg3LDQwODcwLDU5MjQ0LDU5MzM2LDU5MzY3LDU5NDEzLDU5NDE3LDU5NDIzLDU5NDMxLDU5NDM3LDU5NDQzLDU5NDUyLDU5NDYwLDU5NDc4LDU5NDkzLDYzNzg5LDYzODY2LDYzODk0LDYzOTc2LDYzOTg2LDY0MDE2LDY0MDE4LDY0MDIxLDY0MDI1LDY0MDM0LDY0MDM3LDY0MDQyLDY1MDc0LDY1MDkzLDY1MTA3LDY1MTEyLDY1MTI3LDY1MTMyLDY1Mzc1LDY1NTEwLDY1NTM2XSxcImdiQ2hhcnNcIjpbMCwzNiwzOCw0NSw1MCw4MSw4OSw5NSw5NiwxMDAsMTAzLDEwNCwxMDUsMTA5LDEyNiwxMzMsMTQ4LDE3MiwxNzUsMTc5LDIwOCwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDM0MSw0MjgsNDQzLDU0NCw1NDUsNTU4LDc0MSw3NDIsNzQ5LDc1MCw4MDUsODE5LDgyMCw3OTIyLDc5MjQsNzkyNSw3OTI3LDc5MzQsNzk0Myw3OTQ0LDc5NDUsNzk1MCw4MDYyLDgxNDgsODE0OSw4MTUyLDgxNjQsODE3NCw4MjM2LDgyNDAsODI2Miw4MjY0LDgzNzQsODM4MCw4MzgxLDgzODQsODM4OCw4MzkwLDgzOTIsODM5Myw4Mzk0LDgzOTYsODQwMSw4NDA2LDg0MTYsODQxOSw4NDI0LDg0MzcsODQzOSw4NDQ1LDg0ODIsODQ4NSw4NDk2LDg1MjEsODYwMyw4OTM2LDg5NDYsOTA0Niw5MDUwLDkwNjMsOTA2Niw5MDc2LDkwOTIsOTEwMCw5MTA4LDkxMTEsOTExMyw5MTMxLDkxNjIsOTE2NCw5MjE4LDkyMTksMTEzMjksMTEzMzEsMTEzMzQsMTEzMzYsMTEzNDYsMTEzNjEsMTEzNjMsMTEzNjYsMTEzNzAsMTEzNzIsMTEzNzUsMTEzODksMTE2ODIsMTE2ODYsMTE2ODcsMTE2OTIsMTE2OTQsMTE3MTQsMTE3MTYsMTE3MjMsMTE3MjUsMTE3MzAsMTE3MzYsMTE5ODIsMTE5ODksMTIxMDIsMTIzMzYsMTIzNDgsMTIzNTAsMTIzODQsMTIzOTMsMTIzOTUsMTIzOTcsMTI1MTAsMTI1NTMsMTI4NTEsMTI5NjIsMTI5NzMsMTM3MzgsMTM4MjMsMTM5MTksMTM5MzMsMTQwODAsMTQyOTgsMTQ1ODUsMTQ2OTgsMTU1ODMsMTU4NDcsMTYzMTgsMTY0MzQsMTY0MzgsMTY0ODEsMTY3MjksMTcxMDIsMTcxMjIsMTczMTUsMTczMjAsMTc0MDIsMTc0MTgsMTc4NTksMTc5MDksMTc5MTEsMTc5MTUsMTc5MTYsMTc5MzYsMTc5MzksMTc5NjEsMTg2NjQsMTg3MDMsMTg4MTQsMTg5NjIsMTkwNDMsMzM0NjksMzM0NzAsMzM0NzEsMzM0ODQsMzM0ODUsMzM0OTAsMzM0OTcsMzM1MDEsMzM1MDUsMzM1MTMsMzM1MjAsMzM1MzYsMzM1NTAsMzc4NDUsMzc5MjEsMzc5NDgsMzgwMjksMzgwMzgsMzgwNjQsMzgwNjUsMzgwNjYsMzgwNjksMzgwNzUsMzgwNzYsMzgwNzgsMzkxMDgsMzkxMDksMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkyNjUsMzkzOTQsMTg5MDAwXX1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdGFibGVzL2diMTgwMzAtcmFuZ2VzLmpzb25cbi8vIG1vZHVsZSBpZCA9IDE0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFtbXCIwXCIsXCJcXHUwMDAwXCIsMTI3XSxbXCI4MTQxXCIsXCLqsILqsIPqsIXqsIbqsItcIiw0LFwi6rCY6rCe6rCf6rCh6rCi6rCj6rClXCIsNixcIuqwruqwsuqws+qwtFwiXSxbXCI4MTYxXCIsXCLqsLXqsLbqsLfqsLrqsLvqsL3qsL7qsL/qsYFcIiw5LFwi6rGM6rGOXCIsNSxcIuqxlVwiXSxbXCI4MTgxXCIsXCLqsZbqsZfqsZnqsZrqsZvqsZ1cIiwxOCxcIuqxsuqxs+qxteqxtuqxueqxu1wiLDQsXCLqsoLqsofqsojqso3qso7qso/qspHqspLqspPqspVcIiw2LFwi6rKe6rKiXCIsNSxcIuqyq+qyreqyruqysVwiLDYsXCLqsrrqsr7qsr/qs4Dqs4Lqs4Pqs4Xqs4bqs4fqs4nqs4rqs4vqs41cIiw3LFwi6rOW6rOYXCIsNyxcIuqzouqzo+qzpeqzpuqzqeqzq+qzreqzruqzsuqztOqzt1wiLDQsXCLqs77qs7/qtIHqtILqtIPqtIXqtIdcIiw0LFwi6rSO6rSQ6rSS6rSTXCJdLFtcIjgyNDFcIixcIuq0lOq0leq0luq0l+q0meq0muq0m+q0neq0nuq0n+q0oVwiLDcsXCLqtKrqtKvqtK5cIiw1XSxbXCI4MjYxXCIsXCLqtLbqtLfqtLnqtLrqtLvqtL1cIiw2LFwi6rWG6rWI6rWKXCIsNSxcIuq1keq1kuq1k+q1leq1luq1l1wiXSxbXCI4MjgxXCIsXCLqtZlcIiw3LFwi6rWi6rWkXCIsNyxcIuq1ruq1r+q1seq1suq1t+q1uOq1ueq1uuq1vuq2gOq2g1wiLDQsXCLqtorqtovqto3qto7qto/qtpFcIiwxMCxcIuq2nlwiLDUsXCLqtqVcIiwxNyxcIuq2uFwiLDcsXCLqt4Lqt4Pqt4Xqt4bqt4fqt4lcIiw2LFwi6reS6reUXCIsNyxcIuq3neq3nuq3n+q3oeq3ouq3o+q3pVwiLDE4XSxbXCI4MzQxXCIsXCLqt7rqt7vqt73qt77quIJcIiw1LFwi6riK6riM6riOXCIsNSxcIuq4lVwiLDddLFtcIjgzNjFcIixcIuq4nVwiLDE4LFwi6riy6riz6ri16ri26ri56ri76ri8XCJdLFtcIjgzODFcIixcIuq4veq4vuq4v+q5guq5hOq5h+q5iOq5ieq5i+q5j+q5keq5kuq5k+q5leq5l1wiLDQsXCLquZ7quaLquaPquaTquabquafquarquavqua3qua7qua/qubFcIiw2LFwi6rm66rm+XCIsNSxcIuq6hlwiLDUsXCLquo1cIiw0NixcIuq6v+q7geq7guq7g+q7hVwiLDYsXCLqu47qu5JcIiw1LFwi6rua6rub6rudXCIsOF0sW1wiODQ0MVwiLFwi6rum6run6rup6ruq6rus6ruuXCIsNSxcIuq7teq7tuq7t+q7ueq7uuq7u+q7vVwiLDhdLFtcIjg0NjFcIixcIuq8huq8ieq8iuq8i+q8jOq8juq8j+q8kVwiLDE4XSxbXCI4NDgxXCIsXCLqvKRcIiw3LFwi6ryu6ryv6ryx6ryz6ry1XCIsNixcIuq8vuq9gOq9hOq9heq9huq9h+q9ilwiLDUsXCLqvZFcIiwxMCxcIuq9nlwiLDUsXCLqvaZcIiwxOCxcIuq9ulwiLDUsXCLqvoHqvoLqvoPqvoXqvobqvofqvolcIiw2LFwi6r6S6r6T6r6U6r6WXCIsNSxcIuq+nVwiLDI2LFwi6r666r676r696r6+XCJdLFtcIjg1NDFcIixcIuq+v+q/gVwiLDUsXCLqv4rqv4zqv49cIiw0LFwi6r+VXCIsNixcIuq/nVwiLDRdLFtcIjg1NjFcIixcIuq/olwiLDUsXCLqv6pcIiw1LFwi6r+y6r+z6r+16r+26r+36r+5XCIsNixcIuuAguuAg1wiXSxbXCI4NTgxXCIsXCLrgIVcIiw2LFwi64CN64CO64CP64CR64CS64CT64CVXCIsNixcIuuAnlwiLDksXCLrgKlcIiwyNixcIuuBhuuBh+uBieuBi+uBjeuBj+uBkOuBkeuBkuuBluuBmOuBmuuBm+uBnOuBnlwiLDI5LFwi64G+64G/64KB64KC64KD64KFXCIsNixcIuuCjuuCkOuCklwiLDUsXCLrgpvrgp3rgp7rgqPrgqRcIl0sW1wiODY0MVwiLFwi64Kl64Km64Kn64Kq64Kw64Ky64K264K364K564K664K764K9XCIsNixcIuuDhuuDilwiLDUsXCLrg5JcIl0sW1wiODY2MVwiLFwi64OT64OV64OW64OX64OZXCIsNixcIuuDoeuDouuDo+uDpOuDplwiLDEwXSxbXCI4NjgxXCIsXCLrg7FcIiwyMixcIuuEiuuEjeuEjuuEj+uEkeuElOuEleuEluuEl+uEmuuEnlwiLDQsXCLrhKbrhKfrhKnrhKrrhKvrhK1cIiw2LFwi64S264S6XCIsNSxcIuuFguuFg+uFheuFhuuFh+uFiVwiLDYsXCLrhZLrhZPrhZbrhZfrhZnrhZrrhZvrhZ3rhZ7rhZ/rhaFcIiwyMixcIuuFuuuFu+uFveuFvuuFv+uGgeuGg1wiLDQsXCLrhorrhozrho7rho/rhpDrhpHrhpXrhpbrhpfrhpnrhprrhpvrhp1cIl0sW1wiODc0MVwiLFwi64aeXCIsOSxcIuuGqVwiLDE1XSxbXCI4NzYxXCIsXCLrhrlcIiwxOCxcIuuHjeuHjuuHj+uHkeuHkuuHk+uHlVwiXSxbXCI4NzgxXCIsXCLrh5ZcIiw1LFwi64ee64egXCIsNyxcIuuHquuHq+uHreuHruuHr+uHsVwiLDcsXCLrh7rrh7zrh75cIiw1LFwi64iG64iH64iJ64iK64iNXCIsNixcIuuIluuImOuImlwiLDUsXCLriKFcIiwxOCxcIuuItVwiLDYsXCLriL1cIiwyNixcIuuJmeuJmuuJm+uJneuJnuuJn+uJoVwiLDYsXCLriapcIiw0XSxbXCI4ODQxXCIsXCLria9cIiw0LFwi64m2XCIsNSxcIuuJvVwiLDYsXCLriobriofriojriopcIiw0XSxbXCI4ODYxXCIsXCLrio/ripLripPripXripbripfriptcIiw0LFwi64qi64qk64qn64qo64qp64qr64qt64qu64qv64qx64qy64qz64q164q264q3XCJdLFtcIjg4ODFcIixcIuuKuFwiLDE1LFwi64uK64uL64uN64uO64uP64uR64uTXCIsNCxcIuuLmuuLnOuLnuuLn+uLoOuLoeuLo+uLp+uLqeuLquuLsOuLseuLsuuLtuuLvOuLveuLvuuMguuMg+uMheuMhuuMh+uMiVwiLDYsXCLrjJLrjJZcIiw1LFwi64ydXCIsNTQsXCLrjZfrjZnrjZrrjZ3rjaDrjaHrjaLrjaNcIl0sW1wiODk0MVwiLFwi642m642o642q642s642t642v642y642z6421642264236425XCIsNixcIuuOguuOhlwiLDUsXCLrjo1cIl0sW1wiODk2MVwiLFwi646O646P646R646S646T646VXCIsMTAsXCLrjqJcIiw1LFwi646p646q646r646tXCJdLFtcIjg5ODFcIixcIuuOrlwiLDIxLFwi64+G64+H64+J64+K64+N64+P64+R64+S64+T64+W64+Y64+a64+c64+e64+f64+h64+i64+j64+l64+m64+n64+pXCIsMTgsXCLrj71cIiwxOCxcIuuQkVwiLDYsXCLrkJnrkJrrkJvrkJ3rkJ7rkJ/rkKFcIiw2LFwi65Cq65CsXCIsNyxcIuuQtVwiLDE1XSxbXCI4YTQxXCIsXCLrkYVcIiwxMCxcIuuRkuuRk+uRleuRluuRl+uRmVwiLDYsXCLrkaLrkaTrkaZcIl0sW1wiOGE2MVwiLFwi65GnXCIsNCxcIuuRrVwiLDE4LFwi65KB65KCXCJdLFtcIjhhODFcIixcIuuSg1wiLDQsXCLrkolcIiwxOSxcIuuSnlwiLDUsXCLrkqXrkqbrkqfrkqnrkqrrkqvrkq1cIiw3LFwi65K265K465K6XCIsNSxcIuuTgeuTguuTg+uTheuThuuTh+uTiVwiLDYsXCLrk5Hrk5Lrk5Prk5Trk5ZcIiw1LFwi65Oe65Of65Oh65Oi65Ol65OnXCIsNCxcIuuTruuTsOuTslwiLDUsXCLrk7lcIiwyNixcIuuUluuUl+uUmeuUmuuUnVwiXSxbXCI4YjQxXCIsXCLrlJ5cIiw1LFwi65Sm65SrXCIsNCxcIuuUsuuUs+uUteuUtuuUt+uUuVwiLDYsXCLrlYLrlYZcIl0sW1wiOGI2MVwiLFwi65WH65WI65WJ65WK65WO65WP65WR65WS65WT65WVXCIsNixcIuuVnuuVolwiLDhdLFtcIjhiODFcIixcIuuVq1wiLDUyLFwi65ai65aj65al65am65an65ap65as65at65au65av65ay65a2XCIsNCxcIuuWvuuWv+uXgeuXguuXg+uXhVwiLDYsXCLrl47rl5JcIiw1LFwi65eZXCIsMTgsXCLrl61cIiwxOF0sW1wiOGM0MVwiLFwi65iAXCIsMTUsXCLrmJLrmJPrmJXrmJbrmJfrmJlcIiw0XSxbXCI4YzYxXCIsXCLrmJ5cIiw2LFwi65imXCIsNSxcIuuYrVwiLDYsXCLrmLVcIiw1XSxbXCI4YzgxXCIsXCLrmLtcIiwxMixcIuuZiVwiLDI2LFwi65ml65mm65mn65mpXCIsNTAsXCLrmp7rmp/rmqHrmqLrmqPrmqVcIiw1LFwi65qt65qu65qv65qw65qyXCIsMTZdLFtcIjhkNDFcIixcIuubg1wiLDE2LFwi65uVXCIsOF0sW1wiOGQ2MVwiLFwi65ueXCIsMTcsXCLrm7Hrm7Lrm7Prm7Xrm7brm7frm7nrm7pcIl0sW1wiOGQ4MVwiLFwi65u7XCIsNCxcIuucguucg+uchOuchlwiLDMzLFwi65yq65yr65yt65yu65yxXCIsNixcIuucuuucvFwiLDcsXCLrnYXrnYbrnYfrnYnrnYrrnYvrnY1cIiw2LFwi652WXCIsOSxcIuudoeudouudo+udpeudpuudp+udqVwiLDYsXCLrnbLrnbTrnbZcIiw1LFwi652+652/656B656C656D656FXCIsNixcIuuejuuek+uelOueleuemuuem+ueneuenlwiXSxbXCI4ZTQxXCIsXCLrnp/rnqFcIiw2LFwi656q656uXCIsNSxcIuuetuuet+ueuVwiLDhdLFtcIjhlNjFcIixcIuufglwiLDQsXCLrn4jrn4pcIiwxOV0sW1wiOGU4MVwiLFwi65+eXCIsMTMsXCLrn67rn6/rn7Hrn7Lrn7Prn7VcIiw2LFwi65++66CCXCIsNCxcIuugiuugi+ugjeugjuugj+ugkVwiLDYsXCLroJrroJzroJ5cIiw1LFwi66Cm66Cn66Cp66Cq66Cr66CtXCIsNixcIuugtuugulwiLDUsXCLroYHroYLroYProYVcIiwxMSxcIuuhkuuhlFwiLDcsXCLroZ7roZ/roaHroaLroaProaVcIiw2LFwi66Gu66Gw66GyXCIsNSxcIuuhueuhuuuhu+uhvVwiLDddLFtcIjhmNDFcIixcIuuihVwiLDcsXCLroo5cIiwxN10sW1wiOGY2MVwiLFwi66KgXCIsNyxcIuuiqVwiLDYsXCLrorHrorLrorProrXrorbrorfrorlcIiw0XSxbXCI4ZjgxXCIsXCLror7ror/ro4Lro4Tro4ZcIiw1LFwi66ON66OO66OP66OR66OS66OT66OVXCIsNyxcIuujnuujoOujolwiLDUsXCLro6rro6vro63ro67ro6/ro7FcIiw2LFwi66O666O866O+XCIsNSxcIuukhVwiLDE4LFwi66SZXCIsNixcIuukoVwiLDI2LFwi66S+66S/66WB66WC66WD66WFXCIsNixcIuuljeuljuulkOulklwiLDVdLFtcIjkwNDFcIixcIuulmuulm+ulneulnuuln+uloVwiLDYsXCLrparrpazrpa5cIiw1LFwi66W266W366W566W666W766W9XCJdLFtcIjkwNjFcIixcIuulvlwiLDUsXCLrpobrpojrpovrpozrpo9cIiwxNV0sW1wiOTA4MVwiLFwi66afXCIsMTIsXCLrpq7rpq/rprHrprLrprPrprVcIiw2LFwi66a+66eA66eCXCIsNSxcIuuniuuni+unjeunk1wiLDQsXCLrp5rrp5zrp5/rp6Drp6Lrp6brp6frp6nrp6rrp6vrp61cIiw2LFwi66e266e7XCIsNCxcIuuoglwiLDUsXCLrqIlcIiwxMSxcIuuollwiLDMzLFwi66i666i766i966i+66i/66mB66mD66mE66mF66mGXCJdLFtcIjkxNDFcIixcIuuph+upiuupjOupj+upkOupkeupkuupluupl+upmeupmuupm+upnVwiLDYsXCLrqabrqapcIiw1XSxbXCI5MTYxXCIsXCLrqbLrqbPrqbXrqbbrqbfrqblcIiw5LFwi66qG66qI66qJ66qK66qL66qNXCIsNV0sW1wiOTE4MVwiLFwi66qTXCIsMjAsXCLrqqrrqq3rqq7rqq/rqrHrqrNcIiw0LFwi66q666q866q+XCIsNSxcIuurheurhuurh+uriVwiLDE0LFwi66uaXCIsMzMsXCLrq73rq77rq7/rrIHrrILrrIPrrIVcIiw3LFwi66yO66yQ66ySXCIsNSxcIuusmeusmuusm+usneusnuusn+usoVwiLDZdLFtcIjkyNDFcIixcIuusqOusquusrFwiLDcsXCLrrLfrrLnrrLrrrL9cIiw0LFwi662G662I662K662L662M662O662R662SXCJdLFtcIjkyNjFcIixcIuutk+utleutluutl+utmVwiLDcsXCLrraLrraRcIiw3LFwi662tXCIsNF0sW1wiOTI4MVwiLFwi662yXCIsMjEsXCLrronrrorrrovrro3rro7rro/rrpFcIiwxOCxcIuuupeuupuuup+uuqeuuquuuq+uurVwiLDYsXCLrrrXrrrbrrrhcIiw3LFwi66+B66+C66+D66+F66+G66+H66+JXCIsNixcIuuvkeuvkuuvlFwiLDM1LFwi66+666+766+966++67CBXCJdLFtcIjkzNDFcIixcIuuwg1wiLDQsXCLrsIrrsI7rsJDrsJLrsJPrsJnrsJrrsKDrsKHrsKLrsKPrsKbrsKjrsKrrsKvrsKzrsK7rsK/rsLLrsLPrsLVcIl0sW1wiOTM2MVwiLFwi67C267C367C5XCIsNixcIuuxguuxhuuxh+uxiOuxiuuxi+uxjuuxj+uxkVwiLDhdLFtcIjkzODFcIixcIuuxmuuxm+uxnOuxnlwiLDM3LFwi67KG67KH67KJ67KK67KN67KPXCIsNCxcIuuyluuymOuym1wiLDQsXCLrsqLrsqPrsqXrsqbrsqlcIiw2LFwi67Ky67K2XCIsNSxcIuuyvuuyv+uzgeuzguuzg+uzhVwiLDcsXCLrs47rs5Lrs5Prs5Trs5brs5frs5nrs5rrs5vrs51cIiwyMixcIuuzt+uzueuzuuuzu+uzvVwiXSxbXCI5NDQxXCIsXCLrs75cIiw1LFwi67SG67SI67SKXCIsNSxcIuu0keu0kuu0k+u0lVwiLDhdLFtcIjk0NjFcIixcIuu0nlwiLDUsXCLrtKVcIiw2LFwi67StXCIsMTJdLFtcIjk0ODFcIixcIuu0ulwiLDUsXCLrtYFcIiw2LFwi67WK67WL67WN67WO67WP67WRXCIsNixcIuu1mlwiLDksXCLrtaXrtabrtafrtalcIiwyMixcIuu2guu2g+u2heu2huu2i1wiLDQsXCLrtpLrtpTrtpbrtpfrtpjrtpvrtp1cIiw2LFwi67alXCIsMTAsXCLrtrFcIiw2LFwi67a5XCIsMjRdLFtcIjk1NDFcIixcIuu3kuu3k+u3luu3l+u3meu3muu3m+u3nVwiLDExLFwi67eqXCIsNSxcIuu3sVwiXSxbXCI5NTYxXCIsXCLrt7Lrt7Prt7Xrt7brt7frt7lcIiw2LFwi67iB67iC67iE67iGXCIsNSxcIuu4juu4j+u4keu4kuu4k1wiXSxbXCI5NTgxXCIsXCLruJVcIiw2LFwi67ie67igXCIsMzUsXCLruYbruYfruYnruYrruYvruY3ruY9cIiw0LFwi67mW67mY67mc67md67me67mf67mi67mj67ml67mm67mn67mp67mrXCIsNCxcIuu5suu5tlwiLDQsXCLrub7rub/ruoHruoLruoPruoVcIiw2LFwi67qO67qSXCIsNSxcIuu6mlwiLDEzLFwi67qpXCIsMTRdLFtcIjk2NDFcIixcIuu6uFwiLDIzLFwi67uS67uTXCJdLFtcIjk2NjFcIixcIuu7leu7luu7mVwiLDYsXCLru6Hru6Lru6ZcIiw1LFwi67utXCIsOF0sW1wiOTY4MVwiLFwi67u2XCIsMTAsXCLrvIJcIiw1LFwi67yKXCIsMTMsXCLrvJrrvJ5cIiwzMyxcIuu9guu9g+u9heu9huu9h+u9iVwiLDYsXCLrvZLrvZPrvZTrvZZcIiw0NF0sW1wiOTc0MVwiLFwi676DXCIsMTYsXCLrvpVcIiw4XSxbXCI5NzYxXCIsXCLrvp5cIiwxNyxcIuu+sVwiLDddLFtcIjk3ODFcIixcIuu+uVwiLDExLFwi67+GXCIsNSxcIuu/juu/j+u/keu/kuu/k+u/lVwiLDYsXCLrv53rv57rv6Drv6JcIiw4OSxcIuyAveyAvuyAv1wiXSxbXCI5ODQxXCIsXCLsgYBcIiwxNixcIuyBklwiLDUsXCLsgZnsgZrsgZtcIl0sW1wiOTg2MVwiLFwi7IGd7IGe7IGf7IGhXCIsNixcIuyBqlwiLDE1XSxbXCI5ODgxXCIsXCLsgbpcIiwyMSxcIuyCkuyCk+yCleyCluyCl+yCmVwiLDYsXCLsgqLsgqTsgqZcIiw1LFwi7IKu7IKx7IKy7IK3XCIsNCxcIuyCvuyDguyDg+yDhOyDhuyDh+yDiuyDi+yDjeyDjuyDj+yDkVwiLDYsXCLsg5rsg55cIiw1LFwi7IOm7IOn7IOp7IOq7IOr7IOtXCIsNixcIuyDtuyDuOyDulwiLDUsXCLshIHshILshIPshIXshIbshIfshIlcIiw2LFwi7ISR7ISS7IST7ISU7ISWXCIsNSxcIuyEoeyEouyEpeyEqOyEqeyEquyEq+yErlwiXSxbXCI5OTQxXCIsXCLshLLshLPshLTshLXshLfshLrshLvshL3shL7shL/shYFcIiw2LFwi7IWK7IWOXCIsNSxcIuyFluyFl1wiXSxbXCI5OTYxXCIsXCLshZnshZrshZvshZ1cIiw2LFwi7IWm7IWqXCIsNSxcIuyFseyFsuyFs+yFteyFtuyFt+yFueyFuuyFu1wiXSxbXCI5OTgxXCIsXCLshbxcIiw4LFwi7IaGXCIsNSxcIuyGj+yGkeyGkuyGk+yGleyGl1wiLDQsXCLshp7shqDshqLshqPshqTshqbshqfshqrshqvshq3shq7shq/shrFcIiwxMSxcIuyGvlwiLDUsXCLsh4Xsh4bsh4fsh4nsh4rsh4vsh41cIiw2LFwi7IeV7IeW7IeZXCIsNixcIuyHoeyHouyHo+yHpeyHpuyHp+yHqVwiLDYsXCLsh7Lsh7RcIiw3LFwi7Ie+7Ie/7IiB7IiC7IiD7IiFXCIsNixcIuyIjuyIkOyIklwiLDUsXCLsiJrsiJvsiJ3siJ7siKHsiKLsiKNcIl0sW1wiOWE0MVwiLFwi7Iik7Iil7Iim7Iin7Iiq7Iis7Iiu7Iiw7Iiz7Ii1XCIsMTZdLFtcIjlhNjFcIixcIuyJhuyJh+yJiVwiLDYsXCLsiZLsiZPsiZXsiZbsiZfsiZlcIiw2LFwi7Imh7Imi7Imj7Imk7ImmXCJdLFtcIjlhODFcIixcIuyJp1wiLDQsXCLsia7sia/sibHsibLsibPsibVcIiw2LFwi7Im+7IqA7IqCXCIsNSxcIuyKilwiLDUsXCLsipFcIiw2LFwi7IqZ7Iqa7Iqc7IqeXCIsNSxcIuyKpuyKp+yKqeyKquyKq+yKrlwiLDUsXCLsirbsirjsirpcIiwzMyxcIuyLnuyLn+yLoeyLouyLpVwiLDUsXCLsi67si7Dsi7Lsi7Psi7Tsi7Xsi7fsi7rsi73si77si7/sjIFcIiw2LFwi7IyK7IyL7IyO7IyPXCJdLFtcIjliNDFcIixcIuyMkOyMkeyMkuyMluyMl+yMmeyMmuyMm+yMnVwiLDYsXCLsjKbsjKfsjKpcIiw4XSxbXCI5YjYxXCIsXCLsjLNcIiwxNyxcIuyNhlwiLDddLFtcIjliODFcIixcIuyNjlwiLDI1LFwi7I2q7I2r7I2t7I2u7I2v7I2x7I2zXCIsNCxcIuyNuuyNu+yNvlwiLDUsXCLsjoXsjobsjofsjonsjorsjovsjo1cIiw1MCxcIuyPgVwiLDIyLFwi7I+aXCJdLFtcIjljNDFcIixcIuyPm+yPneyPnuyPoeyPo1wiLDQsXCLsj6rsj6vsj6zsj65cIiw1LFwi7I+27I+37I+5XCIsNV0sW1wiOWM2MVwiLFwi7I+/XCIsOCxcIuyQiVwiLDYsXCLskJFcIiw5XSxbXCI5YzgxXCIsXCLskJtcIiw4LFwi7JClXCIsNixcIuyQreyQruyQr+yQseyQsuyQs+yQtVwiLDYsXCLskL5cIiw5LFwi7JGJXCIsMjYsXCLskabskafskanskarskavska1cIiw2LFwi7JG27JG37JG47JG6XCIsNSxcIuySgVwiLDE4LFwi7JKVXCIsNixcIuySnVwiLDEyXSxbXCI5ZDQxXCIsXCLskqpcIiwxMyxcIuySueySuuySu+ySvVwiLDhdLFtcIjlkNjFcIixcIuyThlwiLDI1XSxbXCI5ZDgxXCIsXCLsk6BcIiw4LFwi7JOqXCIsNSxcIuyTsuyTs+yTteyTtuyTt+yTueyTu+yTvOyTveyTvuyUglwiLDksXCLslI3slI7slI/slJHslJLslJPslJVcIiw2LFwi7JSdXCIsMTAsXCLslKrslKvslK3slK7slK/slLFcIiw2LFwi7JS67JS87JS+XCIsNSxcIuyVhuyVh+yVi+yVj+yVkOyVkeyVkuyVluyVmuyVm+yVnOyVn+yVouyVo+yVpeyVpuyVp+yVqVwiLDYsXCLslbLslbZcIiw1LFwi7JW+7JW/7JaB7JaC7JaD7JaF7JaG7JaI7JaJ7JaK7JaL7JaO7JaQ7JaS7JaT7JaUXCJdLFtcIjllNDFcIixcIuyWluyWmeyWmuyWm+yWneyWnuyWn+yWoVwiLDcsXCLslqpcIiw5LFwi7Ja2XCJdLFtcIjllNjFcIixcIuyWt+yWuuyWv1wiLDQsXCLsl4vsl43sl4/sl5Lsl5Psl5Xsl5bsl5fsl5lcIiw2LFwi7Jei7Jek7Jem7JenXCJdLFtcIjllODFcIixcIuyXqOyXqeyXquyXq+yXr+yXseyXsuyXs+yXteyXuOyXueyXuuyXu+yYguyYg+yYhOyYieyYiuyYi+yYjeyYjuyYj+yYkVwiLDYsXCLsmJrsmJ1cIiw2LFwi7Jim7Jin7Jip7Jiq7Jir7Jiv7Jix7Jiy7Ji27Ji47Ji67Ji87Ji97Ji+7Ji/7JmC7JmD7JmF7JmG7JmH7JmJXCIsNixcIuyZkuyZllwiLDUsXCLsmZ7smZ/smaFcIiwxMCxcIuyZreyZruyZsOyZslwiLDUsXCLsmbrsmbvsmb3smb7smb/smoFcIiw2LFwi7JqK7JqM7JqOXCIsNSxcIuyaluyal+yameyamuyam+yanVwiLDYsXCLsmqZcIl0sW1wiOWY0MVwiLFwi7Jqo7JqqXCIsNSxcIuyasuyas+yateyatuyat+yau1wiLDQsXCLsm4Lsm4Tsm4ZcIiw1LFwi7JuOXCJdLFtcIjlmNjFcIixcIuybj+ybkeybkuybk+yblVwiLDYsXCLsm57sm5/sm6JcIiw1LFwi7Juq7Jur7Jut7Juu7Juv7Jux7JuyXCJdLFtcIjlmODFcIixcIuybs1wiLDQsXCLsm7rsm7vsm7zsm75cIiw1LFwi7JyG7JyH7JyJ7JyK7JyL7JyNXCIsNixcIuycluycmOycmlwiLDUsXCLsnKLsnKPsnKXsnKbsnKfsnKlcIiw2LFwi7Jyy7Jy07Jy27Jy47Jy57Jy67Jy77Jy+7Jy/7J2B7J2C7J2D7J2FXCIsNCxcIuydi+ydjuydkOydmeydmuydm+ydneydnuydn+ydoVwiLDYsXCLsnansnarsnaxcIiw3LFwi7J227J237J257J267J277J2/7J6A7J6B7J6C7J6G7J6L7J6M7J6N7J6P7J6S7J6T7J6V7J6Z7J6bXCIsNCxcIuyeouyep1wiLDQsXCLsnq7snq/snrHsnrLsnrPsnrXsnrbsnrdcIl0sW1wiYTA0MVwiLFwi7J647J657J667J677J6+7J+CXCIsNSxcIuyfiuyfi+yfjeyfj+yfkVwiLDYsXCLsn5nsn5rsn5vsn5xcIl0sW1wiYTA2MVwiLFwi7J+eXCIsNSxcIuyfpeyfpuyfp+yfqeyfquyfq+yfrVwiLDEzXSxbXCJhMDgxXCIsXCLsn7tcIiw0LFwi7KCC7KCD7KCF7KCG7KCH7KCJ7KCLXCIsNCxcIuygkuyglOygl1wiLDQsXCLsoJ7soJ/soKHsoKLsoKPsoKVcIiw2LFwi7KCu7KCw7KCyXCIsNSxcIuygueyguuygu+ygveygvuygv+yhgVwiLDYsXCLsoYrsoYvsoY5cIiw1LFwi7KGVXCIsMjYsXCLsobLsobPsobXsobbsobfsobnsobtcIiw0LFwi7KKC7KKE7KKI7KKJ7KKK7KKOXCIsNSxcIuyilVwiLDcsXCLsop7soqDsoqLsoqPsoqRcIl0sW1wiYTE0MVwiLFwi7KKl7KKm7KKn7KKpXCIsMTgsXCLsor7sor/so4Dso4FcIl0sW1wiYTE2MVwiLFwi7KOC7KOD7KOF7KOG7KOH7KOJ7KOK7KOL7KONXCIsNixcIuyjluyjmOyjmlwiLDUsXCLso6Lso6Pso6VcIl0sW1wiYTE4MVwiLFwi7KOmXCIsMTQsXCLso7ZcIiw1LFwi7KO+7KO/7KSB7KSC7KSD7KSHXCIsNCxcIuykjuOAgOOAgeOAgsK34oCl4oCmwqjjgIPCreKAleKIpe+8vOKIvOKAmOKAmeKAnOKAneOAlOOAleOAiFwiLDksXCLCscOXw7fiiaDiiaTiiaXiiJ7iiLTCsOKAsuKAs+KEg+KEq++/oO+/oe+/peKZguKZgOKIoOKKpeKMkuKIguKIh+KJoeKJksKn4oC74piG4piF4peL4peP4peO4peH4peG4pah4pag4paz4pay4pa94pa84oaS4oaQ4oaR4oaT4oaU44CT4omq4omr4oia4oi94oid4oi14oir4ois4oiI4oiL4oqG4oqH4oqC4oqD4oiq4oip4oin4oio77+iXCJdLFtcImEyNDFcIixcIuykkOykklwiLDUsXCLspJlcIiwxOF0sW1wiYTI2MVwiLFwi7KStXCIsNixcIuyktVwiLDE4XSxbXCJhMjgxXCIsXCLspYhcIiw3LFwi7KWS7KWT7KWV7KWW7KWX7KWZXCIsNixcIuylouylpFwiLDcsXCLspa3spa7spa/ih5Lih5TiiIDiiIPCtO+9nsuHy5jLncuay5nCuMubwqHCv8uQ4oiu4oiR4oiPwqTihInigLDil4Hil4DilrfilrbimaTimaDimaHimaXimafimaPiipnil4jilqPil5Dil5HilpLilqTilqXilqjilqfilqbilqnimajimI/imI7imJzimJ7CtuKAoOKAoeKGleKGl+KGmeKGluKGmOKZreKZqeKZquKZrOOJv+OInOKEluOPh+KEouOPguOPmOKEoeKCrMKuXCJdLFtcImEzNDFcIixcIuylseylsuyls+yltVwiLDYsXCLspb1cIiwxMCxcIuymiuymi+ymjeymjuymj1wiXSxbXCJhMzYxXCIsXCLsppFcIiw2LFwi7Kaa7Kac7KaeXCIsMTZdLFtcImEzODFcIixcIuymr1wiLDE2LFwi7KeC7KeD7KeF7KeG7KeJ7KeLXCIsNCxcIuynkuynlOynl+ynmOynm++8gVwiLDU4LFwi77+m77y9XCIsMzIsXCLvv6NcIl0sW1wiYTQ0MVwiLFwi7Kee7Kef7Keh7Kej7Kel7Kem7Keo7Kep7Keq7Ker7Keu7KeyXCIsNSxcIuynuuynu+ynveynvuynv+yogeyoguyog+yohFwiXSxbXCJhNDYxXCIsXCLsqIXsqIbsqIfsqIrsqI5cIiw1LFwi7KiV7KiW7KiX7KiZXCIsMTJdLFtcImE0ODFcIixcIuyopuyop+yoqOyoqlwiLDI4LFwi44SxXCIsOTNdLFtcImE1NDFcIixcIuyph1wiLDQsXCLsqY7sqY/sqZHsqZLsqZPsqZVcIiw2LFwi7Kme7KmiXCIsNSxcIuypqeypqlwiXSxbXCJhNTYxXCIsXCLsqatcIiwxNyxcIuypvlwiLDUsXCLsqoXsqoZcIl0sW1wiYTU4MVwiLFwi7KqHXCIsMTYsXCLsqplcIiwxNCxcIuKFsFwiLDldLFtcImE1YjBcIixcIuKFoFwiLDldLFtcImE1YzFcIixcIs6RXCIsMTYsXCLOo1wiLDZdLFtcImE1ZTFcIixcIs6xXCIsMTYsXCLPg1wiLDZdLFtcImE2NDFcIixcIuyqqFwiLDE5LFwi7Kq+7Kq/7KuB7KuC7KuD7KuFXCJdLFtcImE2NjFcIixcIuyrhlwiLDUsXCLsq47sq5Dsq5Lsq5Tsq5Xsq5bsq5fsq5pcIiw1LFwi7KuhXCIsNl0sW1wiYTY4MVwiLFwi7Kuo7Kup7Kuq7Kur7KutXCIsNixcIuyrtVwiLDE4LFwi7KyJ7KyK4pSA4pSC4pSM4pSQ4pSY4pSU4pSc4pSs4pSk4pS04pS84pSB4pSD4pSP4pST4pSb4pSX4pSj4pSz4pSr4pS74pWL4pSg4pSv4pSo4pS34pS/4pSd4pSw4pSl4pS44pWC4pSS4pSR4pSa4pSZ4pSW4pSV4pSO4pSN4pSe4pSf4pSh4pSi4pSm4pSn4pSp4pSq4pSt4pSu4pSx4pSy4pS14pS24pS54pS64pS94pS+4pWA4pWB4pWDXCIsN10sW1wiYTc0MVwiLFwi7KyLXCIsNCxcIuyskeyskuysk+ysleysluysl+ysmVwiLDYsXCLsrKJcIiw3XSxbXCJhNzYxXCIsXCLsrKpcIiwyMixcIuytguytg+ythFwiXSxbXCJhNzgxXCIsXCLsrYXsrYbsrYfsrYrsrYvsrY3srY7srY/srZFcIiw2LFwi7K2a7K2b7K2c7K2eXCIsNSxcIuytpVwiLDcsXCLjjpXjjpbjjpfihJPjjpjjj4TjjqPjjqTjjqXjjqbjjplcIiw5LFwi44+K446N446O446P44+P446I446J44+I446n446o446wXCIsOSxcIuOOgFwiLDQsXCLjjrpcIiw1LFwi446QXCIsNCxcIuKEpuOPgOOPgeOOiuOOi+OOjOOPluOPheOOreOOruOOr+OPm+OOqeOOquOOq+OOrOOPneOPkOOPk+OPg+OPieOPnOOPhlwiXSxbXCJhODQxXCIsXCLsra1cIiwxMCxcIuytulwiLDE0XSxbXCJhODYxXCIsXCLsrolcIiwxOCxcIuyunVwiLDZdLFtcImE4ODFcIixcIuyupFwiLDE5LFwi7K65XCIsMTEsXCLDhsOQwqrEplwiXSxbXCJhOGE2XCIsXCLEslwiXSxbXCJhOGE4XCIsXCLEv8WBw5jFksK6w57FpsWKXCJdLFtcImE4YjFcIixcIuOJoFwiLDI3LFwi4pOQXCIsMjUsXCLikaBcIiwxNCxcIsK94oWT4oWUwrzCvuKFm+KFnOKFneKFnlwiXSxbXCJhOTQxXCIsXCLsr4VcIiwxNCxcIuyvlVwiLDEwXSxbXCJhOTYxXCIsXCLsr6Dsr6Hsr6Lsr6Psr6Xsr6bsr6jsr6pcIiwxOF0sW1wiYTk4MVwiLFwi7K+9XCIsMTQsXCLssI7ssI/ssJHssJLssJPssJVcIiw2LFwi7LCe7LCf7LCg7LCj7LCkw6bEkcOwxKfEscSzxLjFgMWCw7jFk8Ofw77Fp8WLxYnjiIBcIiwyNyxcIuKSnFwiLDI1LFwi4pG0XCIsMTQsXCLCucKywrPigbTigb/igoHigoLigoPigoRcIl0sW1wiYWE0MVwiLFwi7LCl7LCm7LCq7LCr7LCt7LCv7LCxXCIsNixcIuywuuywv1wiLDQsXCLssYbssYfssYnssYrssYvssY3ssY5cIl0sW1wiYWE2MVwiLFwi7LGPXCIsNCxcIuyxluyxmlwiLDUsXCLssaHssaLssaPssaXssafssalcIiw2LFwi7LGx7LGyXCJdLFtcImFhODFcIixcIuyxs+yxtOyxtlwiLDI5LFwi44GBXCIsODJdLFtcImFiNDFcIixcIuyylOyyleyyluyyl+yymuyym+yyneyynuyyn+yyoVwiLDYsXCLssqrssq5cIiw1LFwi7LK27LK37LK5XCJdLFtcImFiNjFcIixcIuyyuuyyu+yyvVwiLDYsXCLss4bss4jss4pcIiw1LFwi7LOR7LOS7LOT7LOVXCIsNV0sW1wiYWI4MVwiLFwi7LObXCIsOCxcIuyzpVwiLDYsXCLss63ss67ss6/ss7FcIiwxMixcIuOCoVwiLDg1XSxbXCJhYzQxXCIsXCLss77ss7/stIDstIJcIiw1LFwi7LSK7LSL7LSN7LSO7LSP7LSRXCIsNixcIuy0muy0nOy0nuy0n+y0oFwiXSxbXCJhYzYxXCIsXCLstKHstKLstKPstKXstKbstKfstKnstKrstKvstK1cIiwxMSxcIuy0ulwiLDRdLFtcImFjODFcIixcIuy0v1wiLDI4LFwi7LWd7LWe7LWf0JBcIiw1LFwi0IHQllwiLDI1XSxbXCJhY2QxXCIsXCLQsFwiLDUsXCLRkdC2XCIsMjVdLFtcImFkNDFcIixcIuy1oey1ouy1o+y1pVwiLDYsXCLsta7stbDstbJcIiw1LFwi7LW5XCIsN10sW1wiYWQ2MVwiLFwi7LaBXCIsNixcIuy2iVwiLDEwLFwi7LaW7LaX7LaZ7Laa7Lab7Lad7Lae7LafXCJdLFtcImFkODFcIixcIuy2oOy2oey2ouy2o+y2puy2qOy2qlwiLDUsXCLstrFcIiwxOCxcIuy3hVwiXSxbXCJhZTQxXCIsXCLst4ZcIiw1LFwi7LeN7LeO7LeP7LeRXCIsMTZdLFtcImFlNjFcIixcIuy3olwiLDUsXCLst6nst6rst6vst63st67st6/st7FcIiw2LFwi7Le67Le87Le+XCIsNF0sW1wiYWU4MVwiLFwi7LiD7LiF7LiG7LiH7LiJ7LiK7LiL7LiNXCIsNixcIuy4ley4luy4l+y4mOy4mlwiLDUsXCLsuKLsuKPsuKXsuKbsuKfsuKnsuKrsuKtcIl0sW1wiYWY0MVwiLFwi7Lis7Lit7Liu7Liv7Liy7Li07Li2XCIsMTldLFtcImFmNjFcIixcIuy5ilwiLDEzLFwi7Lma7Lmb7Lmd7Lme7LmiXCIsNSxcIuy5quy5rFwiXSxbXCJhZjgxXCIsXCLsua5cIiw1LFwi7Lm27Lm37Lm57Lm67Lm77Lm9XCIsNixcIuy6huy6iOy6ilwiLDUsXCLsupLsupPsupXsupbsupfsuplcIl0sW1wiYjA0MVwiLFwi7LqaXCIsNSxcIuy6ouy6plwiLDUsXCLsuq5cIiwxMl0sW1wiYjA2MVwiLFwi7Lq7XCIsNSxcIuy7glwiLDE5XSxbXCJiMDgxXCIsXCLsu5ZcIiwxMyxcIuy7puy7p+y7qey7quy7rVwiLDYsXCLsu7bsu7pcIiw1LFwi6rCA6rCB6rCE6rCH6rCI6rCJ6rCK6rCQXCIsNyxcIuqwmVwiLDQsXCLqsKDqsKTqsKzqsK3qsK/qsLDqsLHqsLjqsLnqsLzqsYDqsYvqsY3qsZTqsZjqsZzqsbDqsbHqsbTqsbfqsbjqsbrqsoDqsoHqsoPqsoTqsoXqsobqsonqsorqsovqsozqspDqspTqspzqsp3qsp/qsqDqsqHqsqjqsqnqsqrqsqzqsq/qsrDqsrjqsrnqsrvqsrzqsr3qs4Hqs4Tqs4jqs4zqs5Xqs5fqs6Dqs6Hqs6Tqs6fqs6jqs6rqs6zqs6/qs7Dqs7Hqs7Pqs7Xqs7bqs7zqs73qtIDqtITqtIZcIl0sW1wiYjE0MVwiLFwi7LyC7LyD7LyF7LyG7LyH7LyJXCIsNixcIuy8kuy8lOy8llwiLDUsXCLsvJ3svJ7svJ/svKHsvKLsvKNcIl0sW1wiYjE2MVwiLFwi7LylXCIsNixcIuy8ruy8slwiLDUsXCLsvLlcIiwxMV0sW1wiYjE4MVwiLFwi7L2FXCIsMTQsXCLsvZbsvZfsvZnsvZrsvZvsvZ1cIiw2LFwi7L2m7L2o7L2q7L2r7L2s6rSM6rSN6rSP6rSR6rSY6rSc6rSg6rSp6rSs6rSt6rS06rS16rS46rS86rWE6rWF6rWH6rWJ6rWQ6rWU6rWY6rWh6rWj6rWs6rWt6rWw6rWz6rW06rW16rW26rW76rW86rW96rW/6raB6raC6raI6raJ6raM6raQ6rac6rad6rak6ra36reA6reB6reE6reI6reQ6reR6reT6rec6reg6rek6re46re56re86re/6riA6riB6riI6riJ6riL6riN6riU6riw6rix6ri06ri36ri46ri66rmA6rmB6rmD6rmF6rmG6rmK6rmM6rmN6rmO6rmQ6rmU6rmW6rmc6rmd6rmf6rmg6rmh6rml6rmo6rmp6rms6rmw6rm4XCJdLFtcImIyNDFcIixcIuy9rey9ruy9r+y9suy9s+y9tey9tuy9t+y9uVwiLDYsXCLsvoHsvoLsvoPsvoTsvoZcIiw1LFwi7L6NXCJdLFtcImIyNjFcIixcIuy+jlwiLDE4LFwi7L6iXCIsNSxcIuy+qVwiXSxbXCJiMjgxXCIsXCLsvqpcIiw1LFwi7L6xXCIsMTgsXCLsv4VcIiw2LFwi6rm56rm76rm86rm96rqE6rqF6rqM6rq86rq96rq+6ruA6ruE6ruM6ruN6ruP6ruQ6ruR6ruY6ruZ6ruc6ruo6rur6rut6ru06ru46ru86ryH6ryI6ryN6ryQ6rys6ryt6ryw6ryy6ry06ry86ry96ry/6r2B6r2C6r2D6r2I6r2J6r2Q6r2c6r2d6r2k6r2l6r256r6A6r6E6r6I6r6Q6r6R6r6V6r6c6r646r656r686r+A6r+H6r+I6r+J6r+L6r+N6r+O6r+U6r+c6r+o6r+p6r+w6r+x6r+06r+464CA64CB64CE64CM64CQ64CU64Cc64Cd64Co64GE64GF64GI64GK64GM64GO64GT64GU64GV64GX64GZXCJdLFtcImIzNDFcIixcIuy/jFwiLDE5LFwi7L+i7L+j7L+l7L+m7L+n7L+pXCJdLFtcImIzNjFcIixcIuy/qlwiLDUsXCLsv7Lsv7Tsv7ZcIiw1LFwi7L+97L++7L+/7YCB7YCC7YCD7YCFXCIsNV0sW1wiYjM4MVwiLFwi7YCLXCIsNSxcIu2AklwiLDUsXCLtgJlcIiwxOSxcIuuBneuBvOuBveuCgOuChOuCjOuCjeuCj+uCkeuCmOuCmeuCmuuCnOuCn+uCoOuCoeuCouuCqOuCqeuCq1wiLDQsXCLrgrHrgrPrgrTrgrXrgrjrgrzrg4Trg4Xrg4frg4jrg4nrg5Drg5Hrg5Trg5jrg6Drg6XrhIjrhInrhIvrhIzrhJDrhJLrhJPrhJjrhJnrhJvrhJzrhJ3rhKPrhKTrhKXrhKjrhKzrhLTrhLXrhLfrhLjrhLnrhYDrhYHrhYTrhYjrhZDrhZHrhZTrhZXrhZjrhZzrhaDrhbjrhbnrhbzrhoDrhoLrhojrhonrhovrho3rhpLrhpPrhpTrhpjrhpzrhqjrh4zrh5Drh5Trh5zrh51cIl0sW1wiYjQ0MVwiLFwi7YCuXCIsNSxcIu2Atu2At+2Aue2Auu2Au+2AvVwiLDYsXCLtgYbtgYjtgYpcIiw1XSxbXCJiNDYxXCIsXCLtgZHtgZLtgZPtgZXtgZbtgZftgZlcIiw2LFwi7YGhXCIsMTAsXCLtga7tga9cIl0sW1wiYjQ4MVwiLFwi7YGx7YGy7YGz7YG1XCIsNixcIu2Bvu2Bv+2CgO2CglwiLDE4LFwi64ef64eo64ep64es64ew64e564e764e964iE64iF64iI64iL64iM64iU64iV64iX64iZ64ig64i064i864mY64mc64mg64mo64mp64m064m164m864qE64qF64qJ64qQ64qR64qU64qY64qZ64qa64qg64qh64qj64ql64qm64qq64qs64qw64q064uI64uJ64uM64uQ64uS64uY64uZ64ub64ud64ui64uk64ul64um64uo64urXCIsNCxcIuuLs+uLtOuLteuLt1wiLDQsXCLri7/rjIDrjIHrjITrjIjrjJDrjJHrjJPrjJTrjJXrjJzrjZTrjZXrjZbrjZjrjZvrjZzrjZ7rjZ/rjaTrjaVcIl0sW1wiYjU0MVwiLFwi7YKVXCIsMTQsXCLtgqbtgqftgqntgqrtgqvtgq1cIiw1XSxbXCJiNTYxXCIsXCLtgrPtgrbtgrjtgrpcIiw1LFwi7YOC7YOD7YOF7YOG7YOH7YOKXCIsNSxcIu2Dku2DllwiLDRdLFtcImI1ODFcIixcIu2Dm+2Dnu2Dn+2Doe2Dou2Do+2DpVwiLDYsXCLtg67tg7JcIiw1LFwi7YO5XCIsMTEsXCLrjafrjanrjavrja7rjbDrjbHrjbTrjbjrjoDrjoHrjoPrjoTrjoXrjozrjpDrjpTrjqDrjqHrjqjrjqzrj4Trj4Xrj4jrj4vrj4zrj47rj5Drj5Trj5Xrj5frj5nrj5vrj53rj6Drj6Trj6jrj7zrkJDrkJjrkJzrkKDrkKjrkKnrkKvrkLTrkZDrkZHrkZTrkZjrkaDrkaHrkaPrkaXrkazrkoDrkojrkp3rkqTrkqjrkqzrkrXrkrfrkrnrk4Drk4Trk4jrk5Drk5Xrk5zrk53rk6Drk6Prk6Trk6brk6zrk63rk6/rk7Hrk7jrlJTrlJXrlJjrlJvrlJzrlKTrlKXrlKfrlKjrlKnrlKrrlLDrlLHrlLTrlLhcIl0sW1wiYjY0MVwiLFwi7YSFXCIsNyxcIu2EjlwiLDE3XSxbXCJiNjYxXCIsXCLthKBcIiwxNSxcIu2Esu2Es+2Ete2Etu2Et+2Eue2Eu+2EvO2Eve2EvlwiXSxbXCJiNjgxXCIsXCLthL/thYLthYZcIiw1LFwi7YWO7YWP7YWR7YWS7YWT7YWVXCIsNixcIu2Fnu2FoO2FolwiLDUsXCLthantharthavtha3rlYDrlYHrlYPrlYTrlYXrlYvrlYzrlY3rlZDrlZTrlZzrlZ3rlZ/rlaDrlaHrlqDrlqHrlqTrlqjrlqrrlqvrlrDrlrHrlrPrlrTrlrXrlrvrlrzrlr3rl4Drl4Trl4zrl43rl4/rl5Drl5Hrl5jrl6zrmJDrmJHrmJTrmJjrmKXrmKzrmLTrmYjrmaTrmajrmpzrmp3rmqDrmqTrmqvrmqzrmrHrm5Trm7Drm7Trm7jrnIDrnIHrnIXrnKjrnKnrnKzrnK/rnLDrnLjrnLnrnLvrnYTrnYjrnYzrnZTrnZXrnaDrnaTrnajrnbDrnbHrnbPrnbXrnbzrnb3rnoDrnoTrnozrno3rno/rnpDrnpHrnpLrnpbrnpdcIl0sW1wiYjc0MVwiLFwi7YWuXCIsMTMsXCLthb1cIiw2LFwi7YaF7YaG7YaH7YaJ7YaKXCJdLFtcImI3NjFcIixcIu2Gi1wiLDIwLFwi7Yai7Yaj7Yal7Yam7YanXCJdLFtcImI3ODFcIixcIu2GqVwiLDYsXCLthrLthrTthrbthrfthrjthrnthrvthr3thr7thr/th4FcIiwxNCxcIuuemOuemeuenOueoOueqOueqeueq+uerOuereuetOueteueuOufh+ufieufrOufreufsOuftOufvOufveufv+uggOuggeugh+ugiOugieugjOugkOugmOugmeugm+ugneugpOugpeugqOugrOugtOugteugt+uguOugueuhgOuhhOuhkeuhk+uhnOuhneuhoOuhpOuhrOuhreuhr+uhseuhuOuhvOuijeuiqOuisOuitOuiuOujgOujgeujg+ujheujjOujkOujlOujneujn+ujoeujqOujqeujrOujsOujuOujueuju+ujveukhOukmOukoOukvOukveulgOulhOuljOulj+ulkeulmOulmeulnOuloOulqOulqVwiXSxbXCJiODQxXCIsXCLth5BcIiw3LFwi7YeZXCIsMTddLFtcImI4NjFcIixcIu2Hq1wiLDgsXCLth7Xth7bth7fth7lcIiwxM10sW1wiYjg4MVwiLFwi7YiI7YiKXCIsNSxcIu2IkVwiLDI0LFwi66Wr66Wt66W066W166W466W866aE66aF66aH66aJ66aK66aN66aO66as66at66aw66a066a866a966a/66eB66eI66eJ66eM66eOXCIsNCxcIuunmOunmeunm+unneunnuunoeuno+unpOunpeunqOunrOuntOunteunt+unuOunueunuuuogOuogeuoiOuoleuouOuoueuovOupgOupguupiOupieupi+upjeupjuupk+uplOupleupmOupnOuppOuppeupp+upqOupqeupsOupseuptOupuOuqg+uqhOuqheuqh+uqjOuqqOuqqeuqq+uqrOuqsOuqsuuquOuqueuqu+uqveurhOuriOurmOurmeurvFwiXSxbXCJiOTQxXCIsXCLtiKrtiKvtiK7tiK/tiLHtiLLtiLPtiLVcIiw2LFwi7Yi+7YmA7YmCXCIsNSxcIu2Jie2Jiu2Ji+2JjFwiXSxbXCJiOTYxXCIsXCLtiY1cIiwxNCxcIu2JnVwiLDYsXCLtiaXtiabtiaftiahcIl0sW1wiYjk4MVwiLFwi7YmpXCIsMjIsXCLtioLtioPtioXtiobtioftiontiortiovtiozrrIDrrITrrI3rrI/rrJHrrJjrrJzrrKDrrKnrrKvrrLTrrLXrrLbrrLjrrLvrrLzrrL3rrL7rrYTrrYXrrYfrrYnrrY3rrY/rrZDrrZTrrZjrraHrraPrrazrrojrrozrrpDrrqTrrqjrrqzrrrTrrrfrr4Drr4Trr4jrr5Drr5Prr7jrr7nrr7zrr7/rsIDrsILrsIjrsInrsIvrsIzrsI3rsI/rsJHrsJRcIiw0LFwi67CbXCIsNCxcIuuwpOuwpeuwp+uwqeuwreuwsOuwseuwtOuwuOuxgOuxgeuxg+uxhOuxheuxieuxjOuxjeuxkOuxneuyhOuyheuyiOuyi+uyjOuyjuuylOuyleuyl1wiXSxbXCJiYTQxXCIsXCLtio3tio7tio/tipLtipPtipTtipZcIiw1LFwi7Yqd7Yqe7Yqf7Yqh7Yqi7Yqj7YqlXCIsNixcIu2KrVwiXSxbXCJiYTYxXCIsXCLtiq7tiq/tirDtirJcIiw1LFwi7Yq67Yq77Yq97Yq+7YuB7YuDXCIsNCxcIu2Liu2LjFwiLDVdLFtcImJhODFcIixcIu2Lku2Lk+2Lle2Llu2Ll+2Lme2Lmu2Lm+2LnVwiLDYsXCLti6ZcIiw5LFwi7Yuy7Yuz7Yu17Yu27Yu37Yu57Yu667KZ67Ka67Kg67Kh67Kk67Kn67Ko67Kw67Kx67Kz67K067K167K867K967OA67OE67ON67OP67OQ67OR67OV67OY67Oc67O067O167O267O467O867SE67SF67SH67SJ67SQ67SU67Sk67Ss67WA67WI67WJ67WM67WQ67WY67WZ67Wk67Wo67aA67aB67aE67aH67aI67aJ67aK67aQ67aR67aT67aV67aZ67aa67ac67ak67aw67a467eU67eV67eY67ec67ep67ew67e067e467iA67iD67iF67iM67iN67iQ67iU67ic67id67if67mE67mF67mI67mM67mO67mU67mV67mX67mZ67ma67mb67mg67mh67mkXCJdLFtcImJiNDFcIixcIu2Lu1wiLDQsXCLtjILtjITtjIZcIiw1LFwi7YyP7YyR7YyS7YyT7YyV7YyXXCIsNCxcIu2Mnu2Mou2Mo1wiXSxbXCJiYjYxXCIsXCLtjKTtjKbtjKftjKrtjKvtjK3tjK7tjK/tjLFcIiw2LFwi7Yy67Yy+XCIsNSxcIu2Nhu2Nh+2NiO2NiVwiXSxbXCJiYjgxXCIsXCLtjYpcIiwzMSxcIuu5qOu5quu5sOu5seu5s+u5tOu5teu5u+u5vOu5veu6gOu6hOu6jOu6jeu6j+u6kOu6keu6mOu6meu6qOu7kOu7keu7lOu7l+u7mOu7oOu7o+u7pOu7peu7rOu8geu8iOu8ieu8mOu8meu8m+u8nOu8neu9gOu9geu9hOu9iOu9kOu9keu9leu+lOu+sOu/heu/jOu/jeu/kOu/lOu/nOu/n+u/oeyAvOyBkeyBmOyBnOyBoOyBqOyBqeyCkOyCkeyClOyCmOyCoOyCoeyCo+yCpeyCrOyCreyCr+yCsOyCs+yCtOyCteyCtuyCvOyCveyCv+yDgOyDgeyDheyDiOyDieyDjOyDkOyDmOyDmeyDm+yDnOyDneyDpFwiXSxbXCJiYzQxXCIsXCLtjapcIiwxNyxcIu2Nvu2Nv+2Oge2Ogu2Og+2Ohe2Ohu2Oh1wiXSxbXCJiYzYxXCIsXCLtjojtjontjortjovtjo7tjpJcIiw1LFwi7Y6a7Y6b7Y6d7Y6e7Y6f7Y6hXCIsNixcIu2Oqu2OrO2OrlwiXSxbXCJiYzgxXCIsXCLtjq9cIiw0LFwi7Y617Y627Y637Y657Y667Y677Y69XCIsNixcIu2Phu2Ph+2PilwiLDUsXCLtj5FcIiw1LFwi7IOl7IOo7IOs7IO07IO17IO37IO57ISA7ISE7ISI7ISQ7ISV7IScXCIsNCxcIuyEo+yEpOyEpuyEp+yErOyEreyEr+yEsOyEseyEtuyEuOyEueyEvOyFgOyFiOyFieyFi+yFjOyFjeyFlOyFleyFmOyFnOyFpOyFpeyFp+yFqOyFqeyFsOyFtOyFuOyGheyGjOyGjeyGjuyGkOyGlOyGluyGnOyGneyGn+yGoeyGpeyGqOyGqeyGrOyGsOyGveyHhOyHiOyHjOyHlOyHl+yHmOyHoOyHpOyHqOyHsOyHseyHs+yHvOyHveyIgOyIhOyIjOyIjeyIj+yIkeyImOyImeyInOyIn+yIoOyIqOyIqeyIq+yIrVwiXSxbXCJiZDQxXCIsXCLtj5ftj5lcIiw3LFwi7Y+i7Y+kXCIsNyxcIu2Pru2Pr+2Pse2Psu2Ps+2Pte2Ptu2Pt1wiXSxbXCJiZDYxXCIsXCLtj7jtj7ntj7rtj7vtj77tkIDtkIJcIiw1LFwi7ZCJXCIsMTNdLFtcImJkODFcIixcIu2Ql1wiLDUsXCLtkJ5cIiwyNSxcIuyIr+yIseyIsuyItOyJiOyJkOyJkeyJlOyJmOyJoOyJpeyJrOyJreyJsOyJtOyJvOyJveyJv+yKgeyKiOyKieyKkOyKmOyKm+yKneyKpOyKpeyKqOyKrOyKreyKtOyKteyKt+yKueyLnOyLneyLoOyLo+yLpOyLq+yLrOyLreyLr+yLseyLtuyLuOyLueyLu+yLvOyMgOyMiOyMieyMjOyMjeyMk+yMlOyMleyMmOyMnOyMpOyMpeyMqOyMqeyNheyNqOyNqeyNrOyNsOyNsuyNuOyNueyNvOyNveyOhOyOiOyOjOyPgOyPmOyPmeyPnOyPn+yPoOyPouyPqOyPqeyPreyPtOyPteyPuOyQiOyQkOyQpOyQrOyQsFwiXSxbXCJiZTQxXCIsXCLtkLhcIiw3LFwi7ZGB7ZGC7ZGD7ZGFXCIsMTRdLFtcImJlNjFcIixcIu2RlFwiLDcsXCLtkZ3tkZ7tkZ/tkaHtkaLtkaPtkaVcIiw3LFwi7ZGu7ZGw7ZGx7ZGyXCJdLFtcImJlODFcIixcIu2Rs1wiLDQsXCLtkbrtkbvtkb3tkb7tkoHtkoNcIiw0LFwi7ZKK7ZKM7ZKOXCIsNSxcIu2SlVwiLDgsXCLskLTskLzskL3skYjskaTskaXskajskazskbTskbXskbnskoDskpTskpzskrjskrzsk6nsk7Dsk7Hsk7Tsk7jsk7rsk7/slIDslIHslIzslJDslJTslJzslKjslKnslKzslLDslLjslLnslLvslL3slYTslYXslYjslYnslYrslYzslY3slY7slZPslZTslZXslZfslZjslZnslZ3slZ7slaDslaHslaTslajslbDslbHslbPslbTslbXslbzslb3sloDsloTslofslozslo3slo/slpHslpXslpfslpjslpzslqDslqnslrTslrXslrjslrnslrvslrzslr3slr7sl4RcIiw2LFwi7JeM7JeOXCJdLFtcImJmNDFcIixcIu2SnlwiLDEwLFwi7ZKqXCIsMTRdLFtcImJmNjFcIixcIu2SuVwiLDE4LFwi7ZON7ZOO7ZOP7ZOR7ZOS7ZOT7ZOVXCJdLFtcImJmODFcIixcIu2TllwiLDUsXCLtk53tk57tk6BcIiw3LFwi7ZOp7ZOq7ZOr7ZOt7ZOu7ZOv7ZOxXCIsNixcIu2Tue2Tuu2TvOyXkOyXkeyXlOyXmOyXoOyXoeyXo+yXpeyXrOyXreyXruyXsOyXtOyXtuyXt+yXvFwiLDUsXCLsmIXsmIbsmIfsmIjsmIzsmJDsmJjsmJnsmJvsmJzsmKTsmKXsmKjsmKzsmK3smK7smLDsmLPsmLTsmLXsmLfsmLnsmLvsmYDsmYHsmYTsmYjsmZDsmZHsmZPsmZTsmZXsmZzsmZ3smaDsmazsma/smbHsmbjsmbnsmbzsmoDsmojsmonsmovsmo3smpTsmpXsmpjsmpzsmqTsmqXsmqfsmqnsmrDsmrHsmrTsmrjsmrnsmrrsm4Dsm4Hsm4Psm4Xsm4zsm43sm5Dsm5Tsm5zsm53sm6Dsm6Hsm6hcIl0sW1wiYzA0MVwiLFwi7ZO+XCIsNSxcIu2Uhe2Uhu2Uh+2Uie2Uiu2Ui+2UjVwiLDYsXCLtlJbtlJhcIiw1XSxbXCJjMDYxXCIsXCLtlJ5cIiwyNV0sW1wiYzA4MVwiLFwi7ZS47ZS57ZS67ZS77ZS+7ZS/7ZWB7ZWC7ZWD7ZWFXCIsNixcIu2Vju2VkO2VklwiLDUsXCLtlZrtlZvtlZ3tlZ7tlZ/tlaHtlaLtlaPsm6nsm6zsm7Dsm7jsm7nsm73snITsnIXsnIjsnIzsnJTsnJXsnJfsnJnsnKDsnKHsnKTsnKjsnLDsnLHsnLPsnLXsnLfsnLzsnL3snYDsnYTsnYrsnYzsnY3snY/snZFcIiw3LFwi7J2c7J2g7J2o7J2r7J207J217J247J287J297J2+7J6D7J6E7J6F7J6H7J6I7J6J7J6K7J6O7J6Q7J6R7J6U7J6W7J6X7J6Y7J6a7J6g7J6h7J6j7J6k7J6l7J6m7J6s7J6t7J6w7J607J687J697J6/7J+A7J+B7J+I7J+J7J+M7J+O7J+Q7J+Y7J+d7J+k7J+o7J+s7KCA7KCB7KCE7KCI7KCKXCJdLFtcImMxNDFcIixcIu2VpO2Vpu2Vp+2Vqu2VrO2VrlwiLDUsXCLtlbbtlbftlbntlbrtlbvtlb1cIiw2LFwi7ZaG7ZaK7ZaLXCJdLFtcImMxNjFcIixcIu2WjO2Wje2Wju2Wj+2WkVwiLDE5LFwi7Zam7ZanXCJdLFtcImMxODFcIixcIu2WqFwiLDMxLFwi7KCQ7KCR7KCT7KCV7KCW7KCc7KCd7KCg7KCk7KCs7KCt7KCv7KCx7KC47KC87KGA7KGI7KGJ7KGM7KGN7KGU7KGw7KGx7KG07KG47KG67KKA7KKB7KKD7KKF7KKG7KKH7KKL7KKM7KKN7KKU7KKd7KKf7KKh7KKo7KK87KK97KOE7KOI7KOM7KOU7KOV7KOX7KOZ7KOg7KOh7KOk7KO17KO87KO97KSA7KSE7KSF7KSG7KSM7KSN7KSP7KSR7KSY7KSs7KS07KWQ7KWR7KWU7KWY7KWg7KWh7KWj7KWs7KWw7KW07KW87KaI7KaJ7KaM7KaQ7KaY7KaZ7Kab7Kad7KeA7KeB7KeE7KeH7KeI7KeK7KeQ7KeR7KeTXCJdLFtcImMyNDFcIixcIu2Xiu2Xi+2Xje2Xju2Xj+2Xke2Xk1wiLDQsXCLtl5rtl5ztl55cIiw1LFwi7Zem7Zen7Zep7Zeq7Zer7Zet7ZeuXCJdLFtcImMyNjFcIixcIu2Xr1wiLDQsXCLtl7btl7jtl7pcIiw1LFwi7ZiC7ZiD7ZiF7ZiG7ZiH7ZiJXCIsNixcIu2YklwiXSxbXCJjMjgxXCIsXCLtmJZcIiw1LFwi7Zid7Zie7Zif7Zih7Zii7Zij7ZilXCIsNyxcIu2YrlwiLDksXCLtmLrtmLvsp5Xsp5bsp5nsp5rsp5zsp53sp6Dsp6Lsp6Tsp6fsp6zsp63sp6/sp7Dsp7Hsp7jsp7nsp7zsqIDsqIjsqInsqIvsqIzsqI3sqJTsqJjsqKnsqYzsqY3sqZDsqZTsqZzsqZ3sqZ/sqaDsqaHsqajsqb3sqoTsqpjsqrzsqr3sq4Dsq4Tsq4zsq43sq4/sq5Hsq5Psq5jsq5nsq6Dsq6zsq7TsrIjsrJDsrJTsrJjsrKDsrKHsrYHsrYjsrYnsrYzsrZDsrZjsrZnsrZ3sraTsrbjsrbnsrpzsrrjsr5Tsr6Tsr6fsr6nssIzssI3ssJDssJTssJzssJ3ssKHssKLssKfssKjssKnssKzssK7ssLDssLjssLnssLtcIl0sW1wiYzM0MVwiLFwi7Zi97Zi+7Zi/7ZmB7ZmC7ZmD7ZmE7ZmG7ZmH7ZmK7ZmM7ZmO7ZmP7ZmQ7ZmS7ZmT7ZmW7ZmX7ZmZ7Zma7Zmb7ZmdXCIsNF0sW1wiYzM2MVwiLFwi7ZmiXCIsNCxcIu2ZqO2ZqlwiLDUsXCLtmbLtmbPtmbVcIiwxMV0sW1wiYzM4MVwiLFwi7ZqB7ZqC7ZqE7ZqGXCIsNSxcIu2aju2aj+2ake2aku2ak+2alVwiLDcsXCLtmp7tmqDtmqJcIiw1LFwi7Zqp7Zqq7LC87LC97LC+7LGE7LGF7LGI7LGM7LGU7LGV7LGX7LGY7LGZ7LGg7LGk7LGm7LGo7LGw7LG17LKY7LKZ7LKc7LKg7LKo7LKp7LKr7LKs7LKt7LK07LK17LK47LK87LOE7LOF7LOH7LOJ7LOQ7LOU7LOk7LOs7LOw7LSB7LSI7LSJ7LSM7LSQ7LSY7LSZ7LSb7LSd7LSk7LSo7LSs7LS57LWc7LWg7LWk7LWs7LWt7LWv7LWx7LW47LaI7LaU7LaV7LaY7Lac7Lak7Lal7Lan7Lap7Law7LeE7LeM7LeQ7Leo7Les7Lew7Le47Le57Le77Le97LiE7LiI7LiM7LiU7LiZ7Lig7Lih7Lik7Lio7Liw7Lix7Liz7Li1XCJdLFtcImM0NDFcIixcIu2aq+2are2aru2ar+2asVwiLDcsXCLtmrrtmrxcIiw3LFwi7ZuG7ZuH7ZuJ7ZuK7ZuLXCJdLFtcImM0NjFcIixcIu2bje2bju2bj+2bkO2bku2bk+2ble2blu2bmO2bmlwiLDUsXCLtm6Htm6Ltm6Ptm6Xtm6btm6ftm6lcIiw0XSxbXCJjNDgxXCIsXCLtm67tm6/tm7Htm7Ltm7Ptm7Ttm7ZcIiw1LFwi7Zu+7Zu/7ZyB7ZyC7ZyD7ZyFXCIsMTEsXCLtnJLtnJPtnJTsuZjsuZnsuZzsuZ/suaDsuaHsuajsuansuavsua3subTsubXsubjsubzsuoTsuoXsuofsuonsupDsupHsupTsupjsuqDsuqHsuqPsuqTsuqXsuqzsuq3su4Hsu6Tsu6Xsu6jsu6vsu6zsu7Tsu7Xsu7fsu7jsu7nsvIDsvIHsvITsvIjsvJDsvJHsvJPsvJXsvJzsvKDsvKTsvKzsvK3svK/svLDsvLHsvLjsvZTsvZXsvZjsvZzsvaTsvaXsvafsvansvbDsvbHsvbTsvbjsvoDsvoXsvozsvqHsvqjsvrDsv4Tsv6Dsv6Hsv6Tsv6jsv7Dsv7Hsv7Psv7Xsv7ztgIDtgITtgJHtgJjtgK3tgLTtgLXtgLjtgLxcIl0sW1wiYzU0MVwiLFwi7ZyV7ZyW7ZyX7Zya7Zyb7Zyd7Zye7Zyf7ZyhXCIsNixcIu2cqu2crO2crlwiLDUsXCLtnLbtnLftnLlcIl0sW1wiYzU2MVwiLFwi7Zy67Zy77Zy9XCIsNixcIu2dhe2dhu2diO2dilwiLDUsXCLtnZLtnZPtnZXtnZpcIiw0XSxbXCJjNTgxXCIsXCLtnZ/tnaLtnaTtnabtnaftnajtnartnavtna3tna7tna/tnbHtnbLtnbPtnbVcIiw2LFwi7Z2+7Z2/7Z6A7Z6CXCIsNSxcIu2eiu2ei+2BhO2Bhe2Bh+2Bie2BkO2BlO2BmO2BoO2BrO2Bre2BsO2BtO2BvO2Bve2Cge2CpO2Cpe2CqO2CrO2CtO2Cte2Ct+2Cue2DgO2Dge2DhO2DiO2Die2DkO2Dke2Dk+2DlO2Dle2DnO2Dne2DoO2DpO2DrO2Dre2Dr+2DsO2Dse2DuO2Eje2EsO2Ese2EtO2EuO2Euu2FgO2Fge2Fg+2FhO2Fhe2FjO2Fje2FkO2FlO2FnO2Fne2Fn+2Foe2FqO2FrO2FvO2GhO2GiO2GoO2Goe2GpO2GqO2GsO2Gse2Gs+2Gte2Guu2GvO2HgO2HmO2HtO2HuO2Ih+2Iie2IkO2IrO2Ire2IsO2ItO2IvO2Ive2Iv+2Jge2JiO2JnFwiXSxbXCJjNjQxXCIsXCLtno3tno7tno/tnpFcIiw2LFwi7Z6a7Z6c7Z6eXCIsNV0sW1wiYzZhMVwiLFwi7Ymk7YqA7YqB7YqE7YqI7YqQ7YqR7YqV7Yqc7Yqg7Yqk7Yqs7Yqx7Yq47Yq57Yq87Yq/7YuA7YuC7YuI7YuJ7YuL7YuU7YuY7Yuc7Yuk7Yul7Yuw7Yux7Yu07Yu47YyA7YyB7YyD7YyF7YyM7YyN7YyO7YyQ7YyU7YyW7Yyc7Yyd7Yyf7Yyg7Yyh7Yyl7Yyo7Yyp7Yys7Yyw7Yy47Yy57Yy77Yy87Yy97Y2E7Y2F7Y287Y297Y6A7Y6E7Y6M7Y6N7Y6P7Y6Q7Y6R7Y6Y7Y6Z7Y6c7Y6g7Y6o7Y6p7Y6r7Y6t7Y607Y647Y687Y+E7Y+F7Y+I7Y+J7Y+Q7Y+Y7Y+h7Y+j7Y+s7Y+t7Y+w7Y+07Y+87Y+97Y+/7ZCBXCJdLFtcImM3YTFcIixcIu2QiO2Qne2RgO2RhO2RnO2RoO2RpO2Rre2Rr+2RuO2Rue2RvO2Rv+2SgO2Sgu2SiO2Sie2Si+2Sje2SlO2Sqe2TjO2TkO2TlO2TnO2Tn+2TqO2TrO2TsO2TuO2Tu+2Tve2UhO2UiO2UjO2UlO2Ule2Ul+2UvO2Uve2VgO2VhO2VjO2Vje2Vj+2Vke2VmO2Vme2VnO2VoO2Vpe2VqO2Vqe2Vq+2Vre2VtO2Vte2VuO2VvO2WhO2Whe2Wh+2WiO2Wie2WkO2Wpe2XiO2Xie2XjO2XkO2Xku2XmO2Xme2Xm+2Xne2XpO2Xpe2XqO2XrO2XtO2Xte2Xt+2Xue2YgO2Yge2YhO2YiO2YkO2Yke2Yk+2YlO2Yle2YnO2YoFwiXSxbXCJjOGExXCIsXCLtmKTtmK3tmLjtmLntmLztmYDtmYXtmYjtmYntmYvtmY3tmZHtmZTtmZXtmZjtmZztmaftmantmbDtmbHtmbTtmoPtmoXtmoztmo3tmpDtmpTtmp3tmp/tmqHtmqjtmqztmrDtmrntmrvtm4Ttm4Xtm4jtm4ztm5Htm5Ttm5ftm5ntm6Dtm6Ttm6jtm7Dtm7Xtm7ztm73tnIDtnITtnJHtnJjtnJntnJztnKDtnKjtnKntnKvtnK3tnLTtnLXtnLjtnLztnYTtnYftnYntnZDtnZHtnZTtnZbtnZftnZjtnZntnaDtnaHtnaPtnaXtnantnaztnbDtnbTtnbztnb3tnoHtnojtnontnoztnpDtnpjtnpntnpvtnp1cIl0sW1wiY2FhMVwiLFwi5Ly95L2z5YGH5YO55Yqg5Y+v5ZG15ZOl5ZiJ5auB5a625pqH5p625p635p+v5q2M54+C55eC56i86Iub6IyE6KGX6KKI6Ki26LOI6LeP6Lu76L+m6aeV5Yi75Y205ZCE5oGq5oWk5q6854+P6ISa6Ka66KeS6Zaj5L6D5YiK5aK+5aW45aem5bmy5bm55oeH5o+A5p2G5p+s5qG/5r6X55mO55yL56O156iI56u/57Ch6IKd6Imu6Imx6Kur6ZaT5Lmr5Zad5pu35ri056Kj56ut6JGb6KSQ6J2O6Z6o5YuY5Z2O5aCq5bWM5oSf5oa+5oih5pWi5p+R5qmE5rib55SY55az55uj556w57S66YKv6ZGR6ZGS6b6VXCJdLFtcImNiYTFcIixcIuWMo+WyrOeUsuiDm+mJgOmWmOWJm+WgiOWnnOWyoeW0l+W6t+W8uuW9iuaFt+axn+eVuueWhuezoOe1s+e2see+jOiFlOiIoeiWkeilgeism+mLvOmZjemxh+S7i+S7t+WAi+WHseWhj+aEt+aEvuaFqOaUueanqua8keeWpeeahueblueuh+iKpeiTi++kgOmOp+mWi+WWgOWuouWdke+kgeeys+e+uemGteWAqOWOu+WxheW3qOaLkuaNruaTmuaTp+a4oOeCrOelm+i3nei4nu+kgumBvemJhemLuOS5vuS7tuWBpeW3vuW7uuaEhuall+iFseiZlOi5h+mNtemoq+S5nuWCkeadsOahgOWEieWKjeWKkuaqolwiXSxbXCJjY2ExXCIsXCLnnrzpiJDpu5TliqvmgK/ov7LlgYjmhqnmj63mk4rmoLzmqoTmv4DohojopqHpmpTloIXnib3niqznlITntbnnua3ogqnopovorbTpgaPptZHmionmsbrmvZTntZDnvLroqKPlhbzmhYrnrp3orJnpiZfpjozkuqzkv5PlgJ7lgr7lhIbli4Hli43ljb/lnbDlooPluprlvpHmhbbmhqzmk47mlazmma/mmrvmm7TmopfmtofngoXng7Hnkp/nkqXnk4rnl5nnoazno6znq5/nq7bntYXntpPogJXogL/ohJvojpborabovJXpgJXpj6HpoIPpoLjpqZrpr6jkv4LllZPloLrlpZHlraPlsYbmgrjmiJLmoYLmorBcIl0sW1wiY2RhMVwiLFwi5qOo5rqq55WM55m456OO56i957O757mr57m86KiI6Kqh6LC/6ZqO6beE5Y+k5Y+p5ZGK5ZGx5Zu65aeR5a2k5bC75bqr5ou35pS35pWF5pWy5pqg5p6v5qeB5rK955e855qQ552+56i/576U6ICD6IKh6IaP6Ium6Iu96I+w6JeB6KCx6KK06Kql76SD6L6c6Yyu6ZuH6aGn6auY6byT5ZOt5pab5puy5qKP56mA6LC36bWg5Zuw5Z2k5bSR5piG5qKx5qON5ru+55Co6KKe6a+k5rGo76SE6aqo5L6b5YWs5YWx5Yqf5a2U5bel5oGQ5oGt5oux5o6n5pS754+Z56m66Jqj6LKi6Z6P5Liy5a+h5oiI5p6c55OcXCJdLFtcImNlYTFcIixcIuenkeiPk+iqh+iqsui3qOmBjumNi+mhhuW7k+anqOiXv+mDre+kheWGoOWumOWvrOaFo+ajuuasvueBjOeQr+eTmOeuoee9kOiPheingOiyq+mXnOmkqOWIruaBneaLrOmAguS+iuWFieWMoeWjmeW7o+aboOa0uOeCmueLguePluetkOiDsemRm+WNpuaOm+e9q+S5luWCgOWhiuWjnuaAquaEp+aLkOankOmtgeWuj+e0mOiCsei9n+S6pOWDkeWSrOWWrOWsjOW2oOW3p+aUquaVjuagoeapi+eLoeeajuefr+e1nue/ueiGoOiVjuibn+i8g+i9jumDiumkg+mplemuq+S4mOS5heS5neS7h+S/seWFt+WLvlwiXSxbXCJjZmExXCIsXCLljYDlj6Plj6Xlko7lmJTlnbXlnqLlr4fltoflu5Dmh7zmi5jmlZHmnrjmn6nmp4vmrZDmr4bmr6zmsYLmup3ngbjni5fnjpbnkIPnnr/nn6nnqbbntb/ogInoh7zoiIXoiIroi5/ooaLorLPos7zou4DpgJHpgrHpiaTpirbpp5LpqYXps6npt5fpvpzlnIvlsYDoj4rpnqDpnqvpurTlkJvnqpjnvqToo5nou43pg6HloIDlsYjmjpjnqp/lrq7lvJPnqbnnqq7oio7ouqzlgKbliLjli7jljbflnIjmi7PmjbLmrIrmt4PnnLfljqXnjZfolajoubbpl5XmnLrmq4PmvbDoqa3ou4zppYvvpIbmmbfmrbjosrRcIl0sW1wiZDBhMVwiLFwi6ay876SH5Y+r5Zyt5aWO5o+G5qe754+q56GF56q656uF57O+6JG16KaP6LWz6YC16Zao5Yu75Z2H55WH562g6I+M6Yie76SI5qmY5YWL5YmL5YqH5oif5qOY5qW16ZqZ5YOF5Yqk5Yuk5oeD5pak5qC55qe/55G+562L6Iq56I+r6Kay6Ky56L+R6aWJ76SJ5LuK5aaX5pOS5piR5qqO55C056aB56a96Iqp6KG+6KG/6KWf76SK6Yym5LyL5Y+K5oCl5omx5rGy57Sa57Wm5LqY5YWi55+c6IKv5LyB5LyO5YW25YaA5Zec5Zmo5Zy75Z+65Z+85aSU5aWH5aaT5a+E5bKQ5bSO5bex5bm+5b+M5oqA5peX5pejXCJdLFtcImQxYTFcIixcIuacnuacn+adnuaji+ajhOapn+asuuawo+axveaygua3h+eOmOeQpueQqueSgueSo+eVuOeVv+eigeejr+elgeelh+eliOeluueulee0gOe2uue+iOiAhuiAreiCjOiomOitj+ixiOi1t+mMoemMpOmjoumlkemojumoj+mppem6kue3iuS9tuWQieaLruahlOmHkeWWq+WEuu+ki++kjOWonOaHpu+kjeaLj+aLv++kjlwiLDUsXCLpgqPvpJRcIiw0LFwi6Ku+76SZ76Sa76Sb76Sc5pqW76Sd54WW76Se76Sf6Zuj76Sg5o2P5o265Y2X76Sh5p6P5qWg5rmz76Si55S376Sj76Sk76SlXCJdLFtcImQyYTFcIixcIue0je+kpu+kp+ihsuWbiuWomO+kqFwiLDQsXCLkuYPvpK3lhaflpYjmn7DogJDvpK7lpbPlubTmkprnp4rlv7Xmgazmi4jmjbvlr6flr5fliqrvpK/lpbTlvKnmgJLvpLDvpLHvpLLnkZnvpLNcIiw1LFwi6aeR76S5XCIsMTAsXCLmv4PvpYTvpYXohr/ovrLmg7HvpYbvpYfohabvpYjvpYnlsL/vpYpcIiw3LFwi5aup6Kil5p2757SQ76WSXCIsNSxcIuiDve+lmO+lmeWwvOazpeWMv+a6uuWkmuiMtlwiXSxbXCJkM2ExXCIsXCLkuLnkurbkvYbllq7lnJjlo4flvZbmlrfml6bmqoDmrrXmuY3nn63nq6/nsJ7nt57om4voopLphLLpjZvmkrvmvr7njbrnlrjpgZTllZblnY3mhrrmk5Tmm4fmt6HmuZvmva3mvrnnl7DogYPohr3olYHopoPoq4forZrpjJ/mspPnlZPnrZTouI/pgZ3llJDloILloZjluaLmiIfmkp7mo6Dnlbbns5bonrPpu6jku6Plnojlna7lpKflsI3lsrHluLblvoXmiLTmk6HnjrPoh7rooovosrjpmorpu5vlroXlvrfmgrPlgJLliIDliLDlnJbloLXloZflsI7lsaDls7bltovluqblvpLmgrzmjJHmjonmkJfmoYNcIl0sW1wiZDRhMVwiLFwi5qO55quC5reY5rih5ruU5r+k54e+55uc552556ax56i76JCE6Kap6LOt6Lez6LmI6YCD6YCU6YGT6YO96Y2N6Zm26Z+c5q+S54CG54mY54qi542o552j56a/56+k57qb6K6A5aKp5oOH5pWm5pe95pq+5rKM54Se54eJ6LGa6aCT5Lmt56qB5Lud5Yas5YeN5YuV5ZCM5oan5p2x5qGQ5qOf5rSe5r2855a8556z56ul6IO06JGj6YqF5YWc5paX5p2c5p6T55eY56uH6I2z76Wa6LGG6YCX6aCt5bGv6IeA6Iqa6YGB6YGv6YiN5b6X5bad5qmZ54eI55m7562J6Jek6KyE6YSn6aiw5ZaH5oe276Wb55mp576FXCJdLFtcImQ1YTFcIixcIuiYv+ieuuijuOmCj++lnOa0m+eDmeePnue1oeiQve+lnemFqumnse+lnuS6guWNteashOaskueAvueIm+iYrem4nuWJjOi+o+W1kOaTpeaUrOaslua/q+exg+e6nOiXjeilpOimveaLieiHmOign+W7iuacl+a1queLvOeQheeRr+iegumDnuS+huW0jeW+oOiQiuWGt+aOoOeVpeS6ruWAhuWFqeWHieaigeaokeeyrueyseezp+iJr+irkui8m+mHj+S+tuWEt+WLteWRguW7rOaFruaIvuaXhearmua/vuekquiXnOigo+mWrempoumpqum6l+m7juWKm+abhuatt+eAneekq+i9oumdguaGkOaIgOaUo+a8o1wiXSxbXCJkNmExXCIsXCLnhYnnkonnt7Toga/ok67ovKbpgKPpjYrlhr3liJfliqPmtIzng4joo4Llu4nmloLmrq7mv4LnsL7njbXku6TkvLblm7nvpZ/lsrrltrrmgJznjrLnrK3nvprnv47ogYbpgJ7piLTpm7bpnYjpoJjpvaHkvovmvqfnpq7phrTpmrfli57vpaDmkojmk4Tmq5PmvZ7ngJjniJDnm6fogIHomIbomZzot6/ovIXpnLLpra/pt7rpubXnooznpb/ntqDoj4npjITpub/pupPoq5blo5/lvITmnKfngKfnk4/nsaDogb7lhKHngKjniaLno4ros4Los5ros7Tpm7fkuoblg5rlr67lu5bmlpnnh47nmYLnnq3ogYrok7xcIl0sW1wiZDdhMVwiLFwi6YG86ayn6b6N5aOY5amB5bGi5qiT5rea5ryP55i757Sv57i36JSe6KS46Y+k6ZmL5YqJ5peS5p+z5qa05rWB5rqc54CP55CJ55Gg55WZ55ik56Gr6Kys6aGe5YWt5oiu6Zm45L6W5YCr5bSZ5req57a46Lyq5b6L5oWE5qCX76Wh6ZqG5YuS6IKL5Yec5YeM5qWe56ic57a+6I+x6Zm15L+a5Yip5Y6Y5ZCP5ZSO5bGl5oKn5p2O5qKo5rWs54qB54u455CG55KD76Wi55ei57Gs572557646I6J6KOP6KOh6YeM6YeQ6Zui6a+J5ZCd5r2+54eQ55KY6Je66Lqq6Zqj6bGX6bqf5p6X5reL55Cz6Ieo6ZyW56CsXCJdLFtcImQ4YTFcIixcIueri+esoOeykuaRqeeRqueXsueivOejqOmmrOmtlOm6u+WvnuW5lea8oOiGnOiOq+mCiOS4h+WNjeWoqeW3kuW9juaFouaMveaZqeabvOa7v+a8q+eBo+eenuiQrOiUk+igu+i8k+mlhemwu+WUnOaKueacq+ayq+iMieilqumduuS6oeWmhOW/mOW/meacm+e2sue9lOiKkuiMq+iOvei8numCmeWfi+WmueWqkuWvkOaYp+aemuaiheavj+eFpOe9teiyt+izo+mCgemtheiEiOiyiumZjOmpgOm6peWtn+awk+eMm+ebsuebn+iQjOWGquimk+WFjeWGleWLieajieaylOechOecoOe2v+e3rOmdoum6tea7hVwiXSxbXCJkOWExXCIsXCLolJHlhqXlkI3lkb3mmI7mmp3mpKfmup/nmr/nnpHojJfok4Lonp/phanpipjps7ToooLkvq7lhpLli5/lp4bluL3mhZXmkbjmkbnmmq7mn5DmqKHmr43mr5vniZ/niaHnkYHnnLjnn5vogJfoirzojIXorIDorKjosozmnKjmspDniafnm67nnabnqYbptqnmrb/mspLlpKLmnKbokpnlja/lopPlppnlu5/mj4/mmLTmnbPmuLrnjKvnq5foi5fpjKjli5nlt6vmhq7mh4vmiIrmi4fmkqvml6DmpZnmrabmr4vnhKHnj7fnlZ3nuYboiJ7ojILolaroqqPosr/pnKfptaHloqjpu5jlgJHliI7lkLvllY/mlodcIl0sW1wiZGFhMVwiLFwi5rG257SK57SL6IGe6JqK6ZaA6Zuv5Yu/5rKV54mp5ZGz5aqa5bC+5bWL5b2M5b6u5pyq5qK25qWj5ri85rmE55yJ57Gz576O6JaH6KyO6L+36Z2h6bu05bK35oK25oSN5oar5pWP5pe75pe85rCR5rOv546f54+J57eh6ZaU5a+G6Jyc6KyQ5Ymd5Y2a5ouN5pCP5pKy5py05qi45rOK54+A55Ke566U57KV57ib6IaK6Ii26JaE6L+r6Zu56aeB5Ly05Y2K5Y+N5Y+b5ouM5pCs5pSA5paR5qeD5rOu5r2Y54+t55WU55ii55uk55u856OQ56O756Ss57WG6Iis6J+g6L+U6aCS6aOv5YuD5ouU5pKl5rik5r2RXCJdLFtcImRiYTFcIixcIueZvOi3i+mGsemJoumrrumtg+WAo+WCjeWdiuWmqOWwqOW5h+W9t+aIv+aUvuaWueaXgeaYieaei+amnOa7guejhee0oeiCquiGgOiIq+iKs+iSoeiajOioquisl+mCpumYsum+kOWAjeS/s++lo+WfueW+mOaLnOaOkuadr+a5g+eEmeebg+iDjOiDmuijtOijteikmeizoOi8qemFjemZquS8r+S9sOW4m+afj+agoueZveeZvumthOW5oeaoiueFqeeHlOeVqu+lpOe5geiVg+iXqemjnOS8kOetj+e9sOmWpeWHoeW4huaiteawvuaxjuazm+eKr+evhOiMg+azleeQuuWDu+WKiOWjgeaTmOaql+eSp+eZllwiXSxbXCJkY2ExXCIsXCLnoqfomJfpl6LpnLnvpaXljZ7lvIHororovqjovq/pgorliKXnnqXpsYnpvIjkuJnlgILlhbXlsZvlubfmmJ7mmLrmn4Tmo4XngrPnlIHnl4Xnp4nnq53ovKfppKDpqIjkv53loKHloLHlr7bmma7mraXmtJHmubrmvb3nj6TnlKvoj6noo5zopJPorZzovJTkvI/lg5XljJDljZzlrpPlvqnmnI3npo/ohbnojK/olJTopIfopobovLnovLvppqXpsJLmnKzkubbkv7jlpYnlsIHls6/ls7Dmjafmo5Lng73nhqLnkKvnuKvok6zonILpgKLpi5Lps7PkuI3ku5jkv6/lgoXliZblia/lkKblkpDln6DlpKvlqaZcIl0sW1wiZGRhMVwiLFwi5a2a5a215a+M5bqc76Wm5om25pW35pan5rWu5rql54i256ym57C/57y26IWQ6IWR6Iaa6ImA6IqZ6I6p6KiD6LKg6LOm6LO76LW06La66YOo6Yec6Zic6ZmE6aeZ6bOn5YyX5YiG5ZCp5Zm05aKz5aWU5aWu5b+/5oak5omu5piQ5rG+54Sa55uG57KJ57Oe57Sb6Iqs6LOB6Zuw76Wn5L2b5byX5b2/5ouC5bSp5pyL5qOa56G857mD6bWs5LiV5YKZ5YyV5Yyq5Y2R5aaD5ami5bqH5oKy5oaK5omJ5om55paQ5p6H5qan5q+U5q+W5q+X5q+Y5rK476Wo55C155e656CS56KR56eV56eY57KD57eL57+h6IKlXCJdLFtcImRlYTFcIixcIuiEvuiHguiPsuicmuijqOiqueitrOiyu+mEmemdnumjm+m8u+WarOWsquW9rOaWjOaqs+aur+a1nOa/seeAleeJneeOreiyp+izk+mgu+aGkeawt+iBmOmogeS5jeS6i+S6m+S7leS8uuS8vOS9v+S/n+WDv+WPsuWPuOWUhuWXo+Wbm+Wjq+WlouWokeWvq+WvuuWwhOW3s+W4q+W+meaAneaNqOaWnOaWr+aftuafu+aireatu+aymeazl+a4o+eAieeNheegguekvuelgOeloOengeevqee0l+e1suiChuiIjeiOjuiTkeibh+ijn+ipkOipnuisneiznOi1pui+remCqumjvOmnn+m6neWJiu+lqeaclO+lqlwiXSxbXCJkZmExXCIsXCLlgpjliKrlsbHmlaPmsZXnj4rnlKPnlp3nrpfokpzphbjpnLDkubfmkpLmrrrnhZ7olqnkuInvpavmnYnmo67muJfoip/olJjooavmj7fmvoHpiJLpoq/kuIrlgrflg4/lhJ/llYbllqrlmJflrYDlsJnls6DluLjluorluqDlu4Lmg7PmoZHmqaHmuZjniL3niYDni4Dnm7jnpaXnrrHnv5Too7Pop7ToqbPosaHos57pnJzloZ7nkr3os73ll4fvpaznqaHntKLoibLnibLnlJ/nlKXvpa3nrJnlooXlo7vltrzluo/lurblvpDmgZXmipLmjb/mlY3mmpHmm5nmm7jmoJbmo7LnioDnkZ7nra7nta7nt5bnvbJcIl0sW1wiZTBhMVwiLFwi6IOl6IiS6Jav6KW/6KqT6YCd6Yuk6buN6byg5aSV5aWt5bit5oOc5piU5pmz5p6Q5rGQ5reF5r2f55+z56Kp6JOG6YeL6Yyr5LuZ5YOK5YWI5ZaE5ayL5a6j5omH5pW+5peL5riy54W955CB55GE55KH55K/55ms56aq57ea57mV576o6IW66Iaz6Ii56Jia6J+s6Km16Lej6YG46YqR6ZCl6aWN6a6u5Y2o5bGR5qWU5rOE5rSp5rir6IiM6Jab6KS76Kit6Kqq6Zuq6b2n5Ymh5pq55q6y57qW6J++6LSN6ZaD6Zmd5pSd5raJ54eu76Wu5Z+O5aeT5a6s5oCn5oO65oiQ5pif5pmf54yp54+555ub55yB562sXCJdLFtcImUxYTFcIixcIuiBluiBsuiFpeiqoOmGkuS4luWLouatsua0l+eoheesuee0sO+lr+iysOWPrOWYr+WhkeWuteWwj+WwkeW3ouaJgOaOg+aQlOaYreais+ayvOa2iOa6r+eAn+eCpOeHkueUpueWj+eWjueYmeeskeevoOewq+e0oOe0ueiUrOiVreiYh+iotOmAjemBoemCtemKt+mftumot+S/l+WxrOadn+a2keeyn+e6jOislui0lumAn+Wtq+W3veaQjeiTgOmBnOmjoeeOh+Wui+aCmuadvua3nuion+iqpumAgemgjOWIt++lsOeBkeeijumOluihsOmHl+S/ruWPl+WXveWbmuWeguWjveWrguWuiOWyq+WzgOW4peaEgVwiXSxbXCJlMmExXCIsXCLmiI3miYvmjojmkJzmlLbmlbjmqLnmrormsLTmtJnmvLHnh6fni6nnjbjnkIfnkrLnmKbnnaHnp4DnqZfnq6rnsrnnto/ntqznuaHnvp7ohKnojLHokpDok5rol6roopboqrDorpDovLjpgYLpgoPphazpipbpirnpmovpmqfpmqjpm5bpnIDpoIjpppbpq5PprJrlj5Tlob7lpJnlrbDlrr/mt5HmvZrnhp/nkKHnkrnogoXoj73lt6HlvoflvqrmgYLml6zmoJLmpa/mqZPmronmtLXmt7Pnj6Pnm77nnqznrY3ntJTohKPoiJzojYDok7TolaPoqaLoq4TphofpjJ7poIbpprTmiIzooZPov7DpiaXltIfltKdcIl0sW1wiZTNhMVwiLFwi5bWp55Gf6Iad6J2o5r+V5ou+57+S6KS26KWy5Lie5LmY5YOn5Yud5Y2H5om/5piH57mp6KCF6Zme5L6N5YyZ5Zi25aeL5aqk5bC45bGO5bGN5biC5byR5oGD5pa95piv5pmC5p6+5p+054yc55+i56S657+F6JKU6JON6KaW6Kmm6Kmp6Kuh6LGV6LG65Z+05a+U5byP5oGv5out5qSN5q6W5rmc54aE56+S6J2V6K2Y6Lu+6aOf6aO+5Ly45L6B5L+h5ZG75aig5a645oS85paw5pmo54e855Sz56We57Sz6IWO6Iej6I6Y6Jaq6JeO6JyD6KiK6Lqr6L6b76Wx6L+F5aSx5a6k5a+m5oKJ5a+p5bCL5b+D5rKBXCJdLFtcImU0YTFcIixcIu+lsua3seeAi+eUmuiKr+irtuS7gOWNge+ls+mbmeawj+S6nuS/hOWFkuWVnuWopeWzqOaIkeeJmeiKveiOquibvuihmeionemYv+mbhemkk+m0iem1neWgiuWys+W2veW5hOaDoeaEleaPoeaogua4pemEgumNlOmhjumwkOm9t+WuieWyuOaMieaZj+ahiOecvOmbgemejemhlOmun+aWoeisgei7i+mWvOWUteWyqeW3luW6teaal+eZjOiPtOmXh+Wjk+aKvOeLjum0qOS7sOWkruaAj+aYu+aug+enp+m0puWOk+WTgOWfg+W0luaEm+ablua2r+eijeiJvumamOmdhOWOhOaJvOaOlua2sue4iuiFi+mhjVwiXSxbXCJlNWExXCIsXCLmq7vnvYzptq/puJrkuZ/lgLvlhrblpJzmg7nmj7bmpLDniLrogLbvpbTph47lvLHvpbXvpbbntIToi6Xoka/okrvol6Xouo3vpbfkva/vpbjvpbnlo6TlrYPmgZnmj5rmlJjmla3mmpjvpbrmpYrmqKPmtIvngIHnhaznl5LnmI3nprPnqbDvpbvnvorvpbzopYTvpb3orpPph4Dpmb3vpb7ppIrlnITlvqHmlrzmvIHnmIDnpqboqp7ppq3prZrpvazlhITmhrbmipHmqo3oh4blgYPloLDlvabnhInoqIDoq7rlrbzomJbkv7rlhLzlmrTlpYTmjqnmt7nltqrmpa3lhobkuojkvZnvpb/vpoDvpoHlpoLvpoJcIl0sW1wiZTZhMVwiLFwi76aD5q2f5rGd76aE55K156SW76aF6IiH6ImF6Iy56Ly/6L2d76aG6aSY76aH76aI76aJ5Lqm76aK5Z+f5b255piT76aL76aM55ar57m56K2v76aN6YCG6amb5Zql5aCn5ae45aif5a6076aO5bu276aP76aQ5o2Q5oy776aR5qS95rKH5rK/5raO5raT5re15ryU76aS54Of54S254WZ76aT54eD54eV76aU56GP56Gv76aV562157ej76aW57iv76aX6KGN6Luf76aY76aZ76aa6Ymb76ab6bO276ac76ad76ae5oKF5raF76af54ax76ag76ah6Zax5Y6t76ai76aj76ak5p+T76al54KO54Sw55Cw6Im26IuSXCJdLFtcImU3YTFcIixcIu+mpumWu+mrpem5veabhO+mp+eHgeiRie+mqO+mqeWhi++mqu+mq+W2uOW9se+mrOaYoOaajualueamruawuOazs+a4tua9gea/mueAm+eAr+eFkOeHn+eNsO+mreeRm++mrueTlOebiOepjue6k++mr++msOiLseipoOi/ju+msemNiO+msumcme+ms++mtOS5guWAqu+mteWIiOWPoeabs+axrea/iueMiuedv+epouiKruiXneiYgu+mtuijlOipo+itveixq++mt+mKs++muOmck+mgkOS6lOS8jeS/ieWCsuWNiOWQvuWQs+WXmuWhouWiuuWlp+Wom+WvpOaCn++mueaHiuaVluaXv+aZpOaip+axmua+s1wiXSxbXCJlOGExXCIsXCLng4/nhqznjZLnrb3onIjoqqTpsLLpvIflsYvmsoPnjYTnjonpiLrmuqvnkaXnmJ/nqannuJXomIrlhYDlo4Xmk4Hnk67nlJXnmbDnv4HpgpXpm43ppZTmuKbnk6bnqqnnqqroh6Xom5nonbjoqJvlqYnlrozlrpvmoqHmpIDmtaPnjqnnkJPnkKznopfnt6nnv6vohJjohZXojp7osYzpmK7poJHmm7DlvoDml7rmnonmsarnjovlgK3lqIPmrarnn67lpJbltazlt43njKXnlY/vprrvprvlg6Xlh7nloK/lpK3lppblp5rlr6Xvprzvpr3ltqLmi5fmkJbmkpPmk77vpr7mm5zvpr/mqYjvp4Dnh7/nkaTvp4FcIl0sW1wiZTlhMVwiLFwi56qI56qv57mH57me6ICA6IWw76eC6J+v6KaB6Kyg6YGZ76eD6YKA6aWS5oW+5qyy5rW057if6KSl6L6x5L+R5YKt5YaX5YuH5Z+H5aKJ5a655bq45oWC5qaV5raM5rmn5rq254aU55Gi55So55Ss6IGz6Iy46JOJ6LiK6Y6U6Y+e76eE5LqO5L2R5YG25YSq5Y+I5Y+L5Y+z5a6H5a+T5bCk5oSa5oaC5pe054mb546X55GA55uC56WQ56aR56a557SG57696IqL6JeV6Jme6L+C6YGH6YO16Yeq6ZqF6Zuo6Zup5YuW5b2n5pet5pix5qCv54Wc56i26YOB6aCK5LqR76eF5qmS5q6e5r6Q54aJ6ICY6Iq46JWTXCJdLFtcImVhYTFcIixcIumBi+malembsumfu+iUmumsseS6kOeGiumbhOWFg+WOn+WToeWck+WckuWeo+Wqm+WrhOWvg+aAqOaEv+aPtOayhea0uea5sua6kOeIsOeMv+eRl+iLkeiigei9hemBoO+nhumZoumhmOm0m+aciOi2iumJnuS9jeWBieWDnuWNseWcjeWnlOWogeWwieaFsOaakOa4reeIsueRi+e3r+iDg+iQjuiRpuiUv+idn+ihm+ikmOisgumBlemfi+mtj+S5s+S+keWEkuWFqu+nh+WUr+WWqeWtuuWupeW5vOW5veW6vuaCoOaDn+aEiOaEieaPhOaUuOacie+niOaflOafmu+niealoealouayuea0p++niua4uO+ni1wiXSxbXCJlYmExXCIsXCLmv6HnjLbnjLfvp4znkZznlLHvp43nmZLvp47vp4/ntq3oh77okLjoo5Xoqpjoq5voq63ouLDouYLpgYrpgL7pgbrphYnph4npja7vp5Dvp5HloInvp5Lmr5PogonogrLvp5Pvp5TlhYHlpavlsLnvp5Xvp5bmvaTnjqfog6TotIfvp5fpiJfplo/vp5jvp5nvp5rvp5vogb/miI7ngJzntajono3vp5zlnqDmganmhYfmrrfoqr7pioDpmrHkuZnlkJ/mt6volK3pmbDpn7Ppo67mj5bms6PpgpHlh53mh4nohrrpt7nkvp3lgJrlhIDlrpzmhI/mh7/mk6zmpIXmr4XnlpHnn6PnvqnoiaTolo/on7vooaPoqrxcIl0sW1wiZWNhMVwiLFwi6K2w6Yar5LqM5Lul5LyK76ed76ee5aS35aeo76ef5bey5byb5b2b5oCh76eg76eh76ei76ej54i+54+l76ek55Ww55eN76el56e776em6ICM6ICz6IKE6Iuh6I2R76en76eo6LK96LKz6YKH76ep76eq6aO06aSM76er76es54C355uK57+K57+M57+86Kya5Lq65LuB5YiD5Y2w76et5ZK95Zug5ae75a+F5byV5b+N5rmu76eu76ev57Wq6Iy176ew6JqT6KqN76ex6Z2t6Z2376ey76ez5LiA5L2a5L2+5aO55pel5rqi6YC46Y6w6aa55Lu75aOs5aaK5aeZ5oGB76e076e156iU76e26I2P6LOD5YWl5Y2EXCJdLFtcImVkYTFcIixcIu+nt++nuO+nueS7jeWJqeWtleiKv+S7lOWIuuWSqOWnieWnv+WtkOWtl+WtnOaBo+aFiOa7i+eCmeeFrueOhueTt+eWteejgee0q+iAheiHquiMqOiUl+iXieirruizh+mbjOS9nOWLuuWavOaWq+aYqOeBvOeCuOeItee2veiKjemFjOmbgOm1suWtseajp+aumOa9uuebnuWykeaaq+a9m+eutOewquigtumbnOS4iOS7l+WMoOWgtOWiu+Wjr+WlrOWwh+W4s+W6hOW8teaOjOaasuadluaon+aqo+asjOa8v+eJhu+nuueNkOeSi+eroOeyp+iFuOiHn+iHp+iOiuiRrOiUo+iWlOiXj+ijnei0k+mGrOmVt1wiXSxbXCJlZWExXCIsXCLpmpzlho3lk4nlnKjlrrDmiY3mnZDmoL3mopPmuL3mu5Pngb3nuKHoo4HosqHovInpvYvpvY7niK3nro/oq43pjJrkvYfkvY7lhLLlkoDlp5DlupXmirXmnbXmpa7mqJfmsq7muJrni5nnjKrnlr3nrrjntLXoi6foj7nokZfol7foqZvosq/ouofpgJnpgrjpm47pvZ/li6PlkIrlq6Hlr4LmkZjmlbXmu7Tni4Tvp7vnmoTnqY3nrJvnsY3nuL7nv5/ojbvorKvos4rotaTot6HouZ/ov6rov7npganpj5HkvYPkvbrlgrPlhajlhbjliY3liarloaHlobzlpaDlsIjlsZXlu5vmgpvmiLDmoJPmrr/msIjmvrFcIl0sW1wiZWZhMVwiLFwi54WO55Cg55Sw55S455WR55my562M566L566t56+G57qP6Kmu6Ly+6L2J6Yi/6YqT6Yyi6ZCr6Zu76aGa6aGr6aSe5YiH5oiq5oqY5rWZ55mk56uK56+A57W25Y2g5bK+5bqX5ry454K557KY6ZyR6a6O6bue5o6l5pG66J225LiB5LqV5Lqt5YGc5YG15ZGI5aeD5a6a5bmA5bqt5bu35b6B5oOF5oy65pS/5pW05peM5pm25pm45p++5qWo5qqJ5q2j5rGA5reA5reo5rif5rme54Ce54Kh546O54+955S6552b56KH56aO56iL56m957K+57aO6ImH6KiC6Kuq6LKe6YSt6YWK6YeY6Ymm6YuM6Yyg6ZyG6Z2WXCJdLFtcImYwYTFcIixcIumdnOmggum8juWItuWKkeWVvOWgpOW4neW8n+aCjOaPkOair+a/n+elreesrOiHjeiWuuijveiruOi5hOmGjemZpOmam+mcvemhjOm9iuS/juWFhuWHi+WKqeWYsuW8lOW9q+aOquaTjeaXqeaZgeabuuabueacneaineajl+anvea8lea9rueFp+eHpeeIqueSquecuuelluelmuenn+eooOeqleeyl+ezn+e1hOe5sOiCh+iXu+iapOiplOiqv+i2mei6gemAoOmBremHo+mYu+mblemzpeaXj+ewh+i2s+mPg+WtmOWwiuWNkuaLmeeMneWAp+Wul+W+nuaCsOaFq+ajlea3meeQrueorue1gue2nOe4seiFq1wiXSxbXCJmMWExXCIsXCLouKrouLXpjb7pkJjkvZDlnZDlt6bluqfmjKvnvarkuLvkvY/kvo/lgZrlp53og4Tlkarlkajll77lpY/lrpnlt57lu5rmmZ3mnLHmn7HmoKrms6jmtLLmuYrmvo3ngrfnj6DnlofnsYzntILntKzntqLoiJ/om5voqLvoqoXotbDouorovLPpgLHphY7phZLpkYTpp5Dnq7nnsqXkv4rlhIHlh4bln4jlr6/ls7vmmZnmqL3mtZrmupbmv6znhIznla/nq6PooKLpgKHpgbXpm4vpp7/ojIHkuK3ku7LooYbph43ljb3mq5vmpavmsYHokbrlop7mho7mm77mi6/ng53nlJHnl4fnuZLokrjorYnotIjkuYvlj6pcIl0sW1wiZjJhMVwiLFwi5ZKr5Zyw5Z2A5b+X5oyB5oyH5pGv5pSv5peo5pm65p6d5p6z5q2i5rGg5rKa5rys55+l56Cl56WJ56WX57SZ6IKi6ISC6Iez6Iqd6Iq36JyY6KqM76e86LSE6La+6YGy55u056iZ56i357mU6IG35ZSH5ZeU5aG15oyv5pCi5pmJ5pmL5qGt5qab5q6E5rSl5rqx54+N55Go55Kh55Wb55a555uh55ye556L56em57iJ57id6Ie76JSv6KKX6Ki66LOR6Lur6L6w6YCy6Y6t6Zmj6Zmz6ZyH5L6E5Y+x5aeq5auJ5biZ5qGO55OG55a+56ep56qS6Iaj6Jut6LOq6LeM6L+t5paf5pyV76e95Z+35r2X57ed6LyvXCJdLFtcImYzYTFcIixcIumPtumbhuW+teaHsua+hOS4lOS+mOWAn+WPieWXn+W1r+W3ruasoeatpOeji+eumu+nvui5iei7iumBruaNieaQvuedgOeqhOmMr+mRv+m9quaSsOa+r+eHpueSqOeTmuerhOewkue6gueysue6mOiumui0iumRvemkkOmljOWIueWvn+aTpuacree0ruWDreWPg+WhueaFmOaFmeaHuuaWrOermeiukuiuluWAieWAoeWJteWUseWovOW7oOW9sOaEtOaVnuaYjOaYtuaaouanjea7hOa8sueMlueYoeeqk+iEueiJmeiPluiSvOWCteWfsOWvgOWvqOW9qeaOoeegpue2teiPnOiUoemHh+mHteWGiuafteetllwiXSxbXCJmNGExXCIsXCLosqzlh4Tlprvmgr3omZXlgJzvp7/liZTlsLrmhb3miJrmi5Pmk7LmlqXmu4znmKDohIrouaDpmZ/pmrvku5/ljYPllpjlpKnlt53mk4Xms4nmt7rnjpTnqb/oiJvolqbos6TouJDpgbfph6fpl6HpmKHpn4blh7jlk7LlloblvrnmkqTmvojntrTovJ/ovY3pkLXlg4nlsJbmsr7mt7vnlJvnnrvnsL3nsaToqbnoq4LloJ7lpr7luJbmjbfniZLnlornnavoq5zosrzovJLlu7PmmbTmt7jogb3oj4Hoq4vpnZHpr5bvqIDliYPmm7/mtpXmu6/nt6Doq6bpgK7pgZ7pq5TliJ3lib/lk6jmhpTmioTmi5vmoqJcIl0sW1wiZjVhMVwiLFwi5qSS5qWa5qi154KS54Sm56Gd56SB56SO56eS56iN6IKW6Im46IuV6I2J6JWJ6LKC6LaF6YWi6YaL6Yau5L+D5ZuR54et55+X6JyA6Ke45a+45b+W5p2R6YKo5Y+i5aGa5a+15oKk5oaB5pGg57i96IGw6JSl6YqD5pKu5YKs5bSU5pyA5aKc5oq95o6o5qSO5qW45qie5rmr55q656eL6Iq76JCp6KuP6Lao6L+96YSS6YWL6Yac6YyQ6YyY6Y6a6Zub6ai26bCN5LiR55Wc56Wd56u6562R56+J57iu6JOE6LmZ6Lm06Lu46YCQ5pil5qS/55GD5Ye65pyu6buc5YWF5b+g5rKW6J+y6KGd6KG35oK06Ia16JCDXCJdLFtcImY2YTFcIixcIui0heWPluWQueWYtOWotuWwseeCiue/oOiBmuiEhuiHrei2o+mGiempn+m3suWBtOS7hOWOoOaDu+a4rOWxpOS+iOWApOWXpOWzmeW5n+aBpeailOayu+a3hOeGvueXlOeXtOeZoeeomuepiee3h+e3u+e9ruiHtOiaqei8nOmbiemms+m9kuWJh+WLhemjreimquS4g+afkua8huS+teWvouaeleayiOa1uOeQm+egp+mHnemNvOifhOenpOeoseW/q+S7luWSpOWUvuWiruWmpeaDsOaJk+aLluactualleiItemZgOmmsemnneWArOWNk+WVhOWdvO+ogeaJmO+oguaTouaZq+afnea/gea/r+eQoueQuOiol1wiXSxbXCJmN2ExXCIsXCLpkLjlkZHlmIblnablvYjmhprmrY7ngZjngq3ntrvoqpXlparohKvmjqLnnIjogL3osqrloZTmkK3mprvlrpXluJHmua/vqIPolanlhYzlj7DlpKrmgKDmhYvmrobmsbDms7DnrJ7og47oi5Tot4bpgrDporHvqITmk4fmvqTmkpHmlITlhY7lkJDlnJ/oqI7mhZ/mobbvqIXnl5vnrZLntbHpgJrloIbmp4zohb/opKrpgIDpoLnlgbjlpZflpqzmipXpgI/prKrmhZ3nibnpl5blnaHlqYblt7Tmiormkq3mk7rmnbfms6LmtL7niKznkLbnoLTnvbfoiq3ot5vpoJfliKTlnYLmnb/niYjnk6PosqnovqbpiJFcIl0sW1wiZjhhMVwiLFwi6Ziq5YWr5Y+t5o2M5L2p5ZSE5oKW5pWX5rKb5rW/54mM54u956iX6KaH6LKd5b2t5r6O54O56Iao5oSO5L6/5YGP5omB54mH56+H57eo57+p6YGN6Z6t6aiZ6LK25Z2q5bmz5p6w6JCN6KmV5ZCg5ayW5bmj5bui5byK5paD6IK66JS96ZaJ6Zmb5L2I5YyF5YyN5YyP5ZKG5ZO65ZyD5biD5oCW5oqb5oqx5o2V76iG5rOh5rWm55ax56Cy6IOe6ISv6Iue6JGh6JKy6KKN6KSS6YCL6Yuq6aO96a6R5bmF5pq05pud54CR54iG76iH5L+15Ym95b2q5oWT5p2T5qiZ5ryC55Oi56Wo6KGo6LG56aOH6aOE6amDXCJdLFtcImY5YTFcIixcIuWTgeeon+alk+irt+ixiumiqOmmruW9vOaKq+eWsuearuiiq+mBv+mZguWMueW8vOW/heazjOePjOeVoueWi+ethuiLvummneS5j+mAvOS4i+S9leWOpuWkj+W7iOaYsOays+eRleiNt+idpuizgOmBkOmcnumwleWjkeWtuOiZkOislOm2tOWvkuaBqOaCjeaXseaxl+a8oua+o+eAmue9lee/sOmWkemWkumZkOmfk+WJsui9hOWHveWQq+WSuOWVo+WWiuaqu+a2tee3mOiJpumKnOmZt+m5ueWQiOWTiOebkuibpOmWpOmXlOmZnOS6ouS8ieWnruWrpuW3t+aBkuaKl+adreahgeayhua4r+e8uOiCm+iIqlwiXSxbXCJmYWExXCIsXCLvqIjvqInpoIXkuqXlgZXlkrPlnpPlpZrlranlrrPmh4jmpbfmtbfngKPon7nop6PoqbLoq6fpgoLpp63pqrjlir7moLjlgJblubjmnY/ojYfooYzkuqvlkJHlmq7nj6bphJXpn7/ppInppZfpppnlmZPlop/omZvoqLHmhrLmq7bnjbvou5LmrYfpmqrpqZflpZXniIDotavpnankv5Tls7TlvKbmh7jmmZvms6vngqvnjoTnjrnnj77nnKnnnY3ntYPntaLnuKPoiLfooZLvqIros6LpiYnpoa/lrZHnqbTooYDpoIHlq4zkv6DljZTlpL7ls73mjL7mtbnni7nohIXohIfojqLpi4/poLDkuqjlhYTliJHlnotcIl0sW1wiZmJhMVwiLFwi5b2i5rOC5ruO54CF54GQ54Kv54aS54+p55Gp6I2K6J6i6KGh6YCI6YKi6Y6j6aao5YWu5b2X5oOg5oWn5pqz6JWZ6LmK6Yav6Z6L5LmO5LqS5ZG85aOV5aO65aW95bK15byn5oi25omI5piK5pmn5q+r5rWp5reP5rmW5ru45r6U5r+g5r+p54Gd54uQ55Cl55Ga55Og55qT56Wc57OK57ie6IOh6Iqm6JGr6JK/6JmO6Jmf6J206K236LGq6Y6s6aCA6aGl5oOR5oiW6YW35ama5piP5re35ri+55C/6a2C5b+95oOa56yP5ZOE5byY5rGe5rOT5rSq54OY57SF6Jm56KiM6bS75YyW5ZKM5ayF5qi654Gr55W1XCJdLFtcImZjYTFcIixcIuemjeemvuiKseiPr+ipseitgeiyqOmdtO+oi+aTtOaUq+eiuueiu+epq+S4uOWWmuWlkOWupuW5u+aCo+aPm+atoeaZpeahk+a4meeFpeeSsOe0iOmChOmpqemwpea0u+a7keeMvuixgemXiuWHsOW5jOW+qOaBjeaDtuaEsOaFjOaZg+aZhOampeazgea5n+a7iea9oueFjOeSnOeah+evgeewp+iNkuidl+mBkemajem7g+WMr+WbnuW7u+W+iuaBouaClOaHt+aZpuacg+aqnOa3rua+rueBsOeNque5quiGvuiMtOiblOiqqOizhOWKg+eNsuWuluapq+mQhOWTruWahuWtneaViOaWheabieain+a2jea3hlwiXSxbXCJmZGExXCIsXCLniLvogrTphbXpqY3kvq/lgJnljprlkI7lkLzllonll4XluL/lvozmnL3nhabnj53pgIXli5vli7PloaTlo47nhITnho/nh7volrDoqJPmmojolqjllqfmmoTnhYrokLHljYnllpnmr4HlvZnlvr3mj67mmonnhYfoq7HovJ3pur7kvJHmkLrng4vnlabomafmgaTorY7pt7jlhYflh7bljIjmtLbog7jpu5HmmJXmrKPngpjnl5XlkIPlsbnntIfoqJbmrKDmrL3mrYblkLjmgbDmtL3nv5XoiIjlg5blh57llpzlmavlm43lp6zlrInluIzmhpnmhpjmiLHmmZ7mm6bnhpnnhrnnhrrniqfnpqfnqIDnvrLoqbBcIl1dXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9jcDk0OS5qc29uXG4vLyBtb2R1bGUgaWQgPSAxNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBbW1wiODc0MFwiLFwi5I+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/CimJznpobopIDmpILnpoDwpaGX56ad8KesueekvOemqea4qvCnhKbjuqjnp4bwqYSN56eUXCJdXVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvYmlnNS1hZGRlZC5qc29uXG4vLyBtb2R1bGUgaWQgPSAxNDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcixcbiAgICBUcmFuc2Zvcm0gPSByZXF1aXJlKFwic3RyZWFtXCIpLlRyYW5zZm9ybTtcblxuXG4vLyA9PSBFeHBvcnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpY29udikge1xuICAgIFxuICAgIC8vIEFkZGl0aW9uYWwgUHVibGljIEFQSS5cbiAgICBpY29udi5lbmNvZGVTdHJlYW0gPSBmdW5jdGlvbiBlbmNvZGVTdHJlYW0oZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJY29udkxpdGVFbmNvZGVyU3RyZWFtKGljb252LmdldEVuY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpY29udi5kZWNvZGVTdHJlYW0gPSBmdW5jdGlvbiBkZWNvZGVTdHJlYW0oZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJY29udkxpdGVEZWNvZGVyU3RyZWFtKGljb252LmdldERlY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpY29udi5zdXBwb3J0c1N0cmVhbXMgPSB0cnVlO1xuXG5cbiAgICAvLyBOb3QgcHVibGlzaGVkIHlldC5cbiAgICBpY29udi5JY29udkxpdGVFbmNvZGVyU3RyZWFtID0gSWNvbnZMaXRlRW5jb2RlclN0cmVhbTtcbiAgICBpY29udi5JY29udkxpdGVEZWNvZGVyU3RyZWFtID0gSWNvbnZMaXRlRGVjb2RlclN0cmVhbTtcbiAgICBpY29udi5fY29sbGVjdCA9IEljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLmNvbGxlY3Q7XG59O1xuXG5cbi8vID09IEVuY29kZXIgc3RyZWFtID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmZ1bmN0aW9uIEljb252TGl0ZUVuY29kZXJTdHJlYW0oY29udiwgb3B0aW9ucykge1xuICAgIHRoaXMuY29udiA9IGNvbnY7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5kZWNvZGVTdHJpbmdzID0gZmFsc2U7IC8vIFdlIGFjY2VwdCBvbmx5IHN0cmluZ3MsIHNvIHdlIGRvbid0IG5lZWQgdG8gZGVjb2RlIHRoZW0uXG4gICAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cbkljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IEljb252TGl0ZUVuY29kZXJTdHJlYW0gfVxufSk7XG5cbkljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rICE9ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gZG9uZShuZXcgRXJyb3IoXCJJY29udiBlbmNvZGluZyBzdHJlYW0gbmVlZHMgc3RyaW5ncyBhcyBpdHMgaW5wdXQuXCIpKTtcbiAgICB0cnkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb252LndyaXRlKGNodW5rKTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoKSB0aGlzLnB1c2gocmVzKTtcbiAgICAgICAgZG9uZSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkb25lKGUpO1xuICAgIH1cbn1cblxuSWNvbnZMaXRlRW5jb2RlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24oZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmNvbnYuZW5kKCk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlLmNvbGxlY3QgPSBmdW5jdGlvbihjYikge1xuICAgIHZhciBjaHVua3MgPSBbXTtcbiAgICB0aGlzLm9uKCdlcnJvcicsIGNiKTtcbiAgICB0aGlzLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHsgY2h1bmtzLnB1c2goY2h1bmspOyB9KTtcbiAgICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgY2IobnVsbCwgQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuXG4vLyA9PSBEZWNvZGVyIHN0cmVhbSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5mdW5jdGlvbiBJY29udkxpdGVEZWNvZGVyU3RyZWFtKGNvbnYsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbnYgPSBjb252O1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuZW5jb2RpbmcgPSB0aGlzLmVuY29kaW5nID0gJ3V0ZjgnOyAvLyBXZSBvdXRwdXQgc3RyaW5ncy5cbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zZm9ybS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogSWNvbnZMaXRlRGVjb2RlclN0cmVhbSB9XG59KTtcblxuSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgZG9uZSkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSlcbiAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKFwiSWNvbnYgZGVjb2Rpbmcgc3RyZWFtIG5lZWRzIGJ1ZmZlcnMgYXMgaXRzIGlucHV0LlwiKSk7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi53cml0ZShjaHVuayk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcywgdGhpcy5lbmNvZGluZyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uKGRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb252LmVuZCgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMsIHRoaXMuZW5jb2RpbmcpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgZG9uZSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkb25lKGUpO1xuICAgIH1cbn1cblxuSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUuY29sbGVjdCA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHRoaXMub24oJ2Vycm9yJywgY2IpO1xuICAgIHRoaXMub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykgeyByZXMgKz0gY2h1bms7IH0pO1xuICAgIHRoaXMub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBjYihudWxsLCByZXMpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9saWIvc3RyZWFtcy5qc1xuLy8gbW9kdWxlIGlkID0gMTQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoXCJidWZmZXJcIikuQnVmZmVyO1xuXG4vLyA9PSBFeHRlbmQgTm9kZSBwcmltaXRpdmVzIHRvIHVzZSBpY29udi1saXRlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpY29udikge1xuICAgIHZhciBvcmlnaW5hbCA9IHVuZGVmaW5lZDsgLy8gUGxhY2UgdG8ga2VlcCBvcmlnaW5hbCBtZXRob2RzLlxuXG4gICAgLy8gTm9kZSBhdXRob3JzIHJld3JvdGUgQnVmZmVyIGludGVybmFscyB0byBtYWtlIGl0IGNvbXBhdGlibGUgd2l0aFxuICAgIC8vIFVpbnQ4QXJyYXkgYW5kIHdlIGNhbm5vdCBwYXRjaCBrZXkgZnVuY3Rpb25zIHNpbmNlIHRoZW4uXG4gICAgaWNvbnYuc3VwcG9ydHNOb2RlRW5jb2RpbmdzRXh0ZW5zaW9uID0gIShuZXcgQnVmZmVyKDApIGluc3RhbmNlb2YgVWludDhBcnJheSk7XG5cbiAgICBpY29udi5leHRlbmROb2RlRW5jb2RpbmdzID0gZnVuY3Rpb24gZXh0ZW5kTm9kZUVuY29kaW5ncygpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsKSByZXR1cm47XG4gICAgICAgIG9yaWdpbmFsID0ge307XG5cbiAgICAgICAgaWYgKCFpY29udi5zdXBwb3J0c05vZGVFbmNvZGluZ3NFeHRlbnNpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBQ1RJT04gTkVFREVEOiByZXF1aXJlKCdpY29udi1saXRlJykuZXh0ZW5kTm9kZUVuY29kaW5ncygpIGlzIG5vdCBzdXBwb3J0ZWQgaW4geW91ciB2ZXJzaW9uIG9mIE5vZGVcIik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiU2VlIG1vcmUgaW5mbyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXNodHVjaGtpbi9pY29udi1saXRlL3dpa2kvTm9kZS12NC1jb21wYXRpYmlsaXR5XCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGVOYXRpdmVFbmNvZGluZ3MgPSB7XG4gICAgICAgICAgICAnaGV4JzogdHJ1ZSwgJ3V0ZjgnOiB0cnVlLCAndXRmLTgnOiB0cnVlLCAnYXNjaWknOiB0cnVlLCAnYmluYXJ5JzogdHJ1ZSwgXG4gICAgICAgICAgICAnYmFzZTY0JzogdHJ1ZSwgJ3VjczInOiB0cnVlLCAndWNzLTInOiB0cnVlLCAndXRmMTZsZSc6IHRydWUsICd1dGYtMTZsZSc6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcgPSBmdW5jdGlvbihlbmMpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmMgJiYgbm9kZU5hdGl2ZUVuY29kaW5nc1tlbmMudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLSBTbG93QnVmZmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHZhciBTbG93QnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuU2xvd0J1ZmZlcjtcblxuICAgICAgICBvcmlnaW5hbC5TbG93QnVmZmVyVG9TdHJpbmcgPSBTbG93QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZztcbiAgICAgICAgU2xvd0J1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcgfHwgJ3V0ZjgnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAvLyBVc2UgbmF0aXZlIGNvbnZlcnNpb24gd2hlbiBwb3NzaWJsZVxuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nKGVuY29kaW5nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuU2xvd0J1ZmZlclRvU3RyaW5nLmNhbGwodGhpcywgZW5jb2RpbmcsIHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSBvdXIgZGVjb2RpbmcgbWV0aG9kLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGFydCA9PSAndW5kZWZpbmVkJykgc3RhcnQgPSAwO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbmQgPT0gJ3VuZGVmaW5lZCcpIGVuZCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGljb252LmRlY29kZSh0aGlzLnNsaWNlKHN0YXJ0LCBlbmQpLCBlbmNvZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBvcmlnaW5hbC5TbG93QnVmZmVyV3JpdGUgPSBTbG93QnVmZmVyLnByb3RvdHlwZS53cml0ZTtcbiAgICAgICAgU2xvd0J1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAgICAgICAgICAgLy8gU3VwcG9ydCBib3RoIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZylcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgbGVnYWN5IChzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHsgIC8vIGxlZ2FjeVxuICAgICAgICAgICAgICAgIHZhciBzd2FwID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN3YXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9mZnNldCA9ICtvZmZzZXQgfHwgMDtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSArbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBjb252ZXJzaW9uIHdoZW4gcG9zc2libGVcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLlNsb3dCdWZmZXJXcml0ZS5jYWxsKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKTtcblxuICAgICAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhdHRlbXB0IHRvIHdyaXRlIGJleW9uZCBidWZmZXIgYm91bmRzJyk7XG5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIG91ciBlbmNvZGluZyBtZXRob2QuXG4gICAgICAgICAgICB2YXIgYnVmID0gaWNvbnYuZW5jb2RlKHN0cmluZywgZW5jb2RpbmcpO1xuICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGggPCBsZW5ndGgpIGxlbmd0aCA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgICAgICBidWYuY29weSh0aGlzLCBvZmZzZXQsIDAsIGxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0gQnVmZmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICAgIG9yaWdpbmFsLkJ1ZmZlcklzRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZztcbiAgICAgICAgQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbihlbmNvZGluZykge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nKGVuY29kaW5nKSB8fCBpY29udi5lbmNvZGluZ0V4aXN0cyhlbmNvZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBvcmlnaW5hbC5CdWZmZXJCeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGg7XG4gICAgICAgIEJ1ZmZlci5ieXRlTGVuZ3RoID0gU2xvd0J1ZmZlci5ieXRlTGVuZ3RoID0gZnVuY3Rpb24oc3RyLCBlbmNvZGluZykge1xuICAgICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcgfHwgJ3V0ZjgnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAvLyBVc2UgbmF0aXZlIGNvbnZlcnNpb24gd2hlbiBwb3NzaWJsZVxuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nKGVuY29kaW5nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuQnVmZmVyQnl0ZUxlbmd0aC5jYWxsKHRoaXMsIHN0ciwgZW5jb2RpbmcpO1xuXG4gICAgICAgICAgICAvLyBTbG93LCBJIGtub3csIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0dGVyIHdheSB5ZXQuXG4gICAgICAgICAgICByZXR1cm4gaWNvbnYuZW5jb2RlKHN0ciwgZW5jb2RpbmcpLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsLkJ1ZmZlclRvU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZztcbiAgICAgICAgQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgY29udmVyc2lvbiB3aGVuIHBvc3NpYmxlXG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5CdWZmZXJUb1N0cmluZy5jYWxsKHRoaXMsIGVuY29kaW5nLCBzdGFydCwgZW5kKTtcblxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB1c2Ugb3VyIGRlY29kaW5nIG1ldGhvZC5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnQgPT0gJ3VuZGVmaW5lZCcpIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW5kID09ICd1bmRlZmluZWQnKSBlbmQgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBpY29udi5kZWNvZGUodGhpcy5zbGljZShzdGFydCwgZW5kKSwgZW5jb2RpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JpZ2luYWwuQnVmZmVyV3JpdGUgPSBCdWZmZXIucHJvdG90eXBlLndyaXRlO1xuICAgICAgICBCdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHZhciBfb2Zmc2V0ID0gb2Zmc2V0LCBfbGVuZ3RoID0gbGVuZ3RoLCBfZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICAgICAgICAgIC8vIFN1cHBvcnQgYm90aCAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpXG4gICAgICAgICAgICAvLyBhbmQgdGhlIGxlZ2FjeSAoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpXG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7ICAvLyBsZWdhY3lcbiAgICAgICAgICAgICAgICB2YXIgc3dhcCA9IGVuY29kaW5nO1xuICAgICAgICAgICAgICAgIGVuY29kaW5nID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBzd2FwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgY29udmVyc2lvbiB3aGVuIHBvc3NpYmxlXG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5CdWZmZXJXcml0ZS5jYWxsKHRoaXMsIHN0cmluZywgX29mZnNldCwgX2xlbmd0aCwgX2VuY29kaW5nKTtcblxuICAgICAgICAgICAgb2Zmc2V0ID0gK29mZnNldCB8fCAwO1xuICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9ICtsZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2F0dGVtcHQgdG8gd3JpdGUgYmV5b25kIGJ1ZmZlciBib3VuZHMnKTtcblxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB1c2Ugb3VyIGVuY29kaW5nIG1ldGhvZC5cbiAgICAgICAgICAgIHZhciBidWYgPSBpY29udi5lbmNvZGUoc3RyaW5nLCBlbmNvZGluZyk7XG4gICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCA8IGxlbmd0aCkgbGVuZ3RoID0gYnVmLmxlbmd0aDtcbiAgICAgICAgICAgIGJ1Zi5jb3B5KHRoaXMsIG9mZnNldCwgMCwgbGVuZ3RoKTtcbiAgICAgICAgICAgIHJldHVybiBsZW5ndGg7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFNldCBfY2hhcnNXcml0dGVuLlxuICAgICAgICB9XG5cblxuICAgICAgICAvLyAtLSBSZWFkYWJsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIGlmIChpY29udi5zdXBwb3J0c1N0cmVhbXMpIHtcbiAgICAgICAgICAgIHZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJ3N0cmVhbScpLlJlYWRhYmxlO1xuXG4gICAgICAgICAgICBvcmlnaW5hbC5SZWFkYWJsZVNldEVuY29kaW5nID0gUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nO1xuICAgICAgICAgICAgUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gc2V0RW5jb2RpbmcoZW5jLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIG91ciBvd24gZGVjb2RlciwgaXQgaGFzIHRoZSBzYW1lIGludGVyZmFjZS5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIG9yaWdpbmFsIGZ1bmN0aW9uIGFzIGl0IGRvZXNuJ3QgaGFuZGxlIEJPTS1zLlxuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IGljb252LmdldERlY29kZXIoZW5jLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBSZWFkYWJsZS5wcm90b3R5cGUuY29sbGVjdCA9IGljb252Ll9jb2xsZWN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGljb252LWxpdGUgTm9kZSBwcmltaXRpdmUgZXh0ZW5zaW9ucy5cbiAgICBpY29udi51bmRvRXh0ZW5kTm9kZUVuY29kaW5ncyA9IGZ1bmN0aW9uIHVuZG9FeHRlbmROb2RlRW5jb2RpbmdzKCkge1xuICAgICAgICBpZiAoIWljb252LnN1cHBvcnRzTm9kZUVuY29kaW5nc0V4dGVuc2lvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFvcmlnaW5hbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlcXVpcmUoJ2ljb252LWxpdGUnKS51bmRvRXh0ZW5kTm9kZUVuY29kaW5ncygpOiBOb3RoaW5nIHRvIHVuZG87IGV4dGVuZE5vZGVFbmNvZGluZ3MoKSBpcyBub3QgY2FsbGVkLlwiKVxuXG4gICAgICAgIGRlbGV0ZSBCdWZmZXIuaXNOYXRpdmVFbmNvZGluZztcblxuICAgICAgICB2YXIgU2xvd0J1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLlNsb3dCdWZmZXI7XG5cbiAgICAgICAgU2xvd0J1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBvcmlnaW5hbC5TbG93QnVmZmVyVG9TdHJpbmc7XG4gICAgICAgIFNsb3dCdWZmZXIucHJvdG90eXBlLndyaXRlID0gb3JpZ2luYWwuU2xvd0J1ZmZlcldyaXRlO1xuXG4gICAgICAgIEJ1ZmZlci5pc0VuY29kaW5nID0gb3JpZ2luYWwuQnVmZmVySXNFbmNvZGluZztcbiAgICAgICAgQnVmZmVyLmJ5dGVMZW5ndGggPSBvcmlnaW5hbC5CdWZmZXJCeXRlTGVuZ3RoO1xuICAgICAgICBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gb3JpZ2luYWwuQnVmZmVyVG9TdHJpbmc7XG4gICAgICAgIEJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBvcmlnaW5hbC5CdWZmZXJXcml0ZTtcblxuICAgICAgICBpZiAoaWNvbnYuc3VwcG9ydHNTdHJlYW1zKSB7XG4gICAgICAgICAgICB2YXIgUmVhZGFibGUgPSByZXF1aXJlKCdzdHJlYW0nKS5SZWFkYWJsZTtcblxuICAgICAgICAgICAgUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gb3JpZ2luYWwuUmVhZGFibGVTZXRFbmNvZGluZztcbiAgICAgICAgICAgIGRlbGV0ZSBSZWFkYWJsZS5wcm90b3R5cGUuY29sbGVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9leHRlbmQtbm9kZS5qc1xuLy8gbW9kdWxlIGlkID0gMTUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogZWUtZmlyc3RcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmaXJzdFxuXG4vKipcbiAqIEdldCB0aGUgZmlyc3QgZXZlbnQgaW4gYSBzZXQgb2YgZXZlbnQgZW1pdHRlcnMgYW5kIGV2ZW50IHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IHN0dWZmXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBkb25lXG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZmlyc3Qoc3R1ZmYsIGRvbmUpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHN0dWZmKSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmcgbXVzdCBiZSBhbiBhcnJheSBvZiBbZWUsIGV2ZW50cy4uLl0gYXJyYXlzJylcblxuICB2YXIgY2xlYW51cHMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R1ZmYubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXJyID0gc3R1ZmZbaV1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpIHx8IGFyci5sZW5ndGggPCAyKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZWFjaCBhcnJheSBtZW1iZXIgbXVzdCBiZSBbZWUsIGV2ZW50cy4uLl0nKVxuXG4gICAgdmFyIGVlID0gYXJyWzBdXG5cbiAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyci5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIGV2ZW50ID0gYXJyW2pdXG4gICAgICB2YXIgZm4gPSBsaXN0ZW5lcihldmVudCwgY2FsbGJhY2spXG5cbiAgICAgIC8vIGxpc3RlbiB0byB0aGUgZXZlbnRcbiAgICAgIGVlLm9uKGV2ZW50LCBmbilcbiAgICAgIC8vIHB1c2ggdGhpcyBsaXN0ZW5lciB0byB0aGUgbGlzdCBvZiBjbGVhbnVwc1xuICAgICAgY2xlYW51cHMucHVzaCh7XG4gICAgICAgIGVlOiBlZSxcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICBmbjogZm4sXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgIGNsZWFudXAoKVxuICAgIGRvbmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgeFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xlYW51cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHggPSBjbGVhbnVwc1tpXVxuICAgICAgeC5lZS5yZW1vdmVMaXN0ZW5lcih4LmV2ZW50LCB4LmZuKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRodW5rKGZuKSB7XG4gICAgZG9uZSA9IGZuXG4gIH1cblxuICB0aHVuay5jYW5jZWwgPSBjbGVhbnVwXG5cbiAgcmV0dXJuIHRodW5rXG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBldmVudCBsaXN0ZW5lci5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbGlzdGVuZXIoZXZlbnQsIGRvbmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uZXZlbnQoYXJnMSkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG4gICAgdmFyIGVlID0gdGhpc1xuICAgIHZhciBlcnIgPSBldmVudCA9PT0gJ2Vycm9yJ1xuICAgICAgPyBhcmcxXG4gICAgICA6IG51bGxcblxuICAgIC8vIGNvcHkgYXJncyB0byBwcmV2ZW50IGFyZ3VtZW50cyBlc2NhcGluZyBzY29wZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXVxuICAgIH1cblxuICAgIGRvbmUoZXJyLCBlZSwgZXZlbnQsIGFyZ3MpXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9lZS1maXJzdC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInpsaWJcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJ6bGliXCJcbi8vIG1vZHVsZSBpZCA9IDE1MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIG1lZGlhLXR5cGVyXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggKiggXCI7XCIgcGFyYW1ldGVyICkgaW4gUkZDIDI2MTYgc2VjIDMuN1xuICpcbiAqIHBhcmFtZXRlciAgICAgPSB0b2tlbiBcIj1cIiAoIHRva2VuIHwgcXVvdGVkLXN0cmluZyApXG4gKiB0b2tlbiAgICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiAqIHNlcGFyYXRvcnMgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gKiAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICogICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAqICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICogcXVvdGVkLXN0cmluZyA9ICggPFwiPiAqKHFkdGV4dCB8IHF1b3RlZC1wYWlyICkgPFwiPiApXG4gKiBxZHRleHQgICAgICAgID0gPGFueSBURVhUIGV4Y2VwdCA8XCI+PlxuICogcXVvdGVkLXBhaXIgICA9IFwiXFxcIiBDSEFSXG4gKiBDSEFSICAgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiAqIFRFWFQgICAgICAgICAgPSA8YW55IE9DVEVUIGV4Y2VwdCBDVExzLCBidXQgaW5jbHVkaW5nIExXUz5cbiAqIExXUyAgICAgICAgICAgPSBbQ1JMRl0gMSooIFNQIHwgSFQgKVxuICogQ1JMRiAgICAgICAgICA9IENSIExGXG4gKiBDUiAgICAgICAgICAgID0gPFVTLUFTQ0lJIENSLCBjYXJyaWFnZSByZXR1cm4gKDEzKT5cbiAqIExGICAgICAgICAgICAgPSA8VVMtQVNDSUkgTEYsIGxpbmVmZWVkICgxMCk+XG4gKiBTUCAgICAgICAgICAgID0gPFVTLUFTQ0lJIFNQLCBzcGFjZSAoMzIpPlxuICogU0hUICAgICAgICAgICA9IDxVUy1BU0NJSSBIVCwgaG9yaXpvbnRhbC10YWIgKDkpPlxuICogQ1RMICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMzEpIGFuZCBERUwgKDEyNyk+XG4gKiBPQ1RFVCAgICAgICAgID0gPGFueSA4LWJpdCBzZXF1ZW5jZSBvZiBkYXRhPlxuICovXG52YXIgcGFyYW1SZWdFeHAgPSAvOyAqKFshIyQlJidcXCpcXCtcXC1cXC4wLTlBLVpcXF5fYGEtelxcfH5dKykgKj0gKihcIig/OlsgIVxcdTAwMjMtXFx1MDA1YlxcdTAwNWQtXFx1MDA3ZVxcdTAwODAtXFx1MDBmZl18XFxcXFtcXHUwMDIwLVxcdTAwN2VdKSpcInxbISMkJSYnXFwqXFwrXFwtXFwuMC05QS1aXFxeX2BhLXpcXHx+XSspICovZztcbnZhciB0ZXh0UmVnRXhwID0gL15bXFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSskL1xudmFyIHRva2VuUmVnRXhwID0gL15bISMkJSYnXFwqXFwrXFwtXFwuMC05QS1aXFxeX2BhLXpcXHx+XSskL1xuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCBxdW90ZWQtcGFpciBpbiBSRkMgMjYxNlxuICpcbiAqIHF1b3RlZC1wYWlyID0gXCJcXFwiIENIQVJcbiAqIENIQVIgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiAqL1xudmFyIHFlc2NSZWdFeHAgPSAvXFxcXChbXFx1MDAwMC1cXHUwMDdmXSkvZztcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggY2hhcnMgdGhhdCBtdXN0IGJlIHF1b3RlZC1wYWlyIGluIFJGQyAyNjE2XG4gKi9cbnZhciBxdW90ZVJlZ0V4cCA9IC8oW1xcXFxcIl0pL2c7XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHR5cGUgaW4gUkZDIDY4MzhcbiAqXG4gKiB0eXBlLW5hbWUgPSByZXN0cmljdGVkLW5hbWVcbiAqIHN1YnR5cGUtbmFtZSA9IHJlc3RyaWN0ZWQtbmFtZVxuICogcmVzdHJpY3RlZC1uYW1lID0gcmVzdHJpY3RlZC1uYW1lLWZpcnN0ICoxMjZyZXN0cmljdGVkLW5hbWUtY2hhcnNcbiAqIHJlc3RyaWN0ZWQtbmFtZS1maXJzdCAgPSBBTFBIQSAvIERJR0lUXG4gKiByZXN0cmljdGVkLW5hbWUtY2hhcnMgID0gQUxQSEEgLyBESUdJVCAvIFwiIVwiIC8gXCIjXCIgL1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIFwiJFwiIC8gXCImXCIgLyBcIi1cIiAvIFwiXlwiIC8gXCJfXCJcbiAqIHJlc3RyaWN0ZWQtbmFtZS1jaGFycyA9LyBcIi5cIiA7IENoYXJhY3RlcnMgYmVmb3JlIGZpcnN0IGRvdCBhbHdheXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBzcGVjaWZ5IGEgZmFjZXQgbmFtZVxuICogcmVzdHJpY3RlZC1uYW1lLWNoYXJzID0vIFwiK1wiIDsgQ2hhcmFjdGVycyBhZnRlciBsYXN0IHBsdXMgYWx3YXlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgc3BlY2lmeSBhIHN0cnVjdHVyZWQgc3ludGF4IHN1ZmZpeFxuICogQUxQSEEgPSAgJXg0MS01QSAvICV4NjEtN0EgICA7IEEtWiAvIGEtelxuICogRElHSVQgPSAgJXgzMC0zOSAgICAgICAgICAgICA7IDAtOVxuICovXG52YXIgc3VidHlwZU5hbWVSZWdFeHAgPSAvXltBLVphLXowLTldW0EtWmEtejAtOSEjJCZeXy4tXXswLDEyNn0kL1xudmFyIHR5cGVOYW1lUmVnRXhwID0gL15bQS1aYS16MC05XVtBLVphLXowLTkhIyQmXl8tXXswLDEyNn0kL1xudmFyIHR5cGVSZWdFeHAgPSAvXiAqKFtBLVphLXowLTldW0EtWmEtejAtOSEjJCZeXy1dezAsMTI2fSlcXC8oW0EtWmEtejAtOV1bQS1aYS16MC05ISMkJl5fListXXswLDEyNn0pICokLztcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdFxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5cbi8qKlxuICogRm9ybWF0IG9iamVjdCB0byBtZWRpYSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0KG9iaikge1xuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG9iaiBpcyByZXF1aXJlZCcpXG4gIH1cblxuICB2YXIgcGFyYW1ldGVycyA9IG9iai5wYXJhbWV0ZXJzXG4gIHZhciBzdWJ0eXBlID0gb2JqLnN1YnR5cGVcbiAgdmFyIHN1ZmZpeCA9IG9iai5zdWZmaXhcbiAgdmFyIHR5cGUgPSBvYmoudHlwZVxuXG4gIGlmICghdHlwZSB8fCAhdHlwZU5hbWVSZWdFeHAudGVzdCh0eXBlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgdHlwZScpXG4gIH1cblxuICBpZiAoIXN1YnR5cGUgfHwgIXN1YnR5cGVOYW1lUmVnRXhwLnRlc3Qoc3VidHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1YnR5cGUnKVxuICB9XG5cbiAgLy8gZm9ybWF0IGFzIHR5cGUvc3VidHlwZVxuICB2YXIgc3RyaW5nID0gdHlwZSArICcvJyArIHN1YnR5cGVcblxuICAvLyBhcHBlbmQgK3N1ZmZpeFxuICBpZiAoc3VmZml4KSB7XG4gICAgaWYgKCF0eXBlTmFtZVJlZ0V4cC50ZXN0KHN1ZmZpeCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VmZml4JylcbiAgICB9XG5cbiAgICBzdHJpbmcgKz0gJysnICsgc3VmZml4XG4gIH1cblxuICAvLyBhcHBlbmQgcGFyYW1ldGVyc1xuICBpZiAocGFyYW1ldGVycyAmJiB0eXBlb2YgcGFyYW1ldGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcGFyYW1cbiAgICB2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMocGFyYW1ldGVycykuc29ydCgpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFyYW0gPSBwYXJhbXNbaV1cblxuICAgICAgaWYgKCF0b2tlblJlZ0V4cC50ZXN0KHBhcmFtKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhcmFtZXRlciBuYW1lJylcbiAgICAgIH1cblxuICAgICAgc3RyaW5nICs9ICc7ICcgKyBwYXJhbSArICc9JyArIHFzdHJpbmcocGFyYW1ldGVyc1twYXJhbV0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1xufVxuXG4vKipcbiAqIFBhcnNlIG1lZGlhIHR5cGUgdG8gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gc3RyaW5nXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cmluZykge1xuICBpZiAoIXN0cmluZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHN0cmluZyBpcyByZXF1aXJlZCcpXG4gIH1cblxuICAvLyBzdXBwb3J0IHJlcS9yZXMtbGlrZSBvYmplY3RzIGFzIGFyZ3VtZW50XG4gIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnb2JqZWN0Jykge1xuICAgIHN0cmluZyA9IGdldGNvbnRlbnR0eXBlKHN0cmluZylcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHN0cmluZyBpcyByZXF1aXJlZCB0byBiZSBhIHN0cmluZycpXG4gIH1cblxuICB2YXIgaW5kZXggPSBzdHJpbmcuaW5kZXhPZignOycpXG4gIHZhciB0eXBlID0gaW5kZXggIT09IC0xXG4gICAgPyBzdHJpbmcuc3Vic3RyKDAsIGluZGV4KVxuICAgIDogc3RyaW5nXG5cbiAgdmFyIGtleVxuICB2YXIgbWF0Y2hcbiAgdmFyIG9iaiA9IHNwbGl0VHlwZSh0eXBlKVxuICB2YXIgcGFyYW1zID0ge31cbiAgdmFyIHZhbHVlXG5cbiAgcGFyYW1SZWdFeHAubGFzdEluZGV4ID0gaW5kZXhcblxuICB3aGlsZSAobWF0Y2ggPSBwYXJhbVJlZ0V4cC5leGVjKHN0cmluZykpIHtcbiAgICBpZiAobWF0Y2guaW5kZXggIT09IGluZGV4KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhcmFtZXRlciBmb3JtYXQnKVxuICAgIH1cblxuICAgIGluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aFxuICAgIGtleSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKClcbiAgICB2YWx1ZSA9IG1hdGNoWzJdXG5cbiAgICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICAgIC8vIHJlbW92ZSBxdW90ZXMgYW5kIGVzY2FwZXNcbiAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgLnN1YnN0cigxLCB2YWx1ZS5sZW5ndGggLSAyKVxuICAgICAgICAucmVwbGFjZShxZXNjUmVnRXhwLCAnJDEnKVxuICAgIH1cblxuICAgIHBhcmFtc1trZXldID0gdmFsdWVcbiAgfVxuXG4gIGlmIChpbmRleCAhPT0gLTEgJiYgaW5kZXggIT09IHN0cmluZy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhcmFtZXRlciBmb3JtYXQnKVxuICB9XG5cbiAgb2JqLnBhcmFtZXRlcnMgPSBwYXJhbXNcblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICogR2V0IGNvbnRlbnQtdHlwZSBmcm9tIHJlcS9yZXMgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldGNvbnRlbnR0eXBlKG9iaikge1xuICBpZiAodHlwZW9mIG9iai5nZXRIZWFkZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyByZXMtbGlrZVxuICAgIHJldHVybiBvYmouZ2V0SGVhZGVyKCdjb250ZW50LXR5cGUnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmouaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyByZXEtbGlrZVxuICAgIHJldHVybiBvYmouaGVhZGVycyAmJiBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgfVxufVxuXG4vKipcbiAqIFF1b3RlIGEgc3RyaW5nIGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBxc3RyaW5nKHZhbCkge1xuICB2YXIgc3RyID0gU3RyaW5nKHZhbClcblxuICAvLyBubyBuZWVkIHRvIHF1b3RlIHRva2Vuc1xuICBpZiAodG9rZW5SZWdFeHAudGVzdChzdHIpKSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgaWYgKHN0ci5sZW5ndGggPiAwICYmICF0ZXh0UmVnRXhwLnRlc3Qoc3RyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIHZhbHVlJylcbiAgfVxuXG4gIHJldHVybiAnXCInICsgc3RyLnJlcGxhY2UocXVvdGVSZWdFeHAsICdcXFxcJDEnKSArICdcIidcbn1cblxuLyoqXG4gKiBTaW1wbHkgXCJ0eXBlL3N1YnR5cGUrc2lmZnhcIiBpbnRvIHBhcnRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNwbGl0VHlwZShzdHJpbmcpIHtcbiAgdmFyIG1hdGNoID0gdHlwZVJlZ0V4cC5leGVjKHN0cmluZy50b0xvd2VyQ2FzZSgpKVxuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIG1lZGlhIHR5cGUnKVxuICB9XG5cbiAgdmFyIHR5cGUgPSBtYXRjaFsxXVxuICB2YXIgc3VidHlwZSA9IG1hdGNoWzJdXG4gIHZhciBzdWZmaXhcblxuICAvLyBzdWZmaXggYWZ0ZXIgbGFzdCArXG4gIHZhciBpbmRleCA9IHN1YnR5cGUubGFzdEluZGV4T2YoJysnKVxuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgc3VmZml4ID0gc3VidHlwZS5zdWJzdHIoaW5kZXggKyAxKVxuICAgIHN1YnR5cGUgPSBzdWJ0eXBlLnN1YnN0cigwLCBpbmRleClcbiAgfVxuXG4gIHZhciBvYmogPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlLFxuICAgIHN1ZmZpeDogc3VmZml4XG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvbWVkaWEtdHlwZXIvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIG1pbWUtZGJcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGIuanNvbicpXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvbWltZS1kYi9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0ge1wiYXBwbGljYXRpb24vMWQtaW50ZXJsZWF2ZWQtcGFyaXR5ZmVjXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vM2dwZGFzaC1xb2UtcmVwb3J0K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uLzNncHAtaW1zK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2EybFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2FjdGl2ZW1lc3NhZ2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9hbHRvLWNvc3RtYXAranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi9hbHRvLWNvc3RtYXBmaWx0ZXIranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi9hbHRvLWRpcmVjdG9yeStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2FsdG8tZW5kcG9pbnRjb3N0K2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vYWx0by1lbmRwb2ludGNvc3RwYXJhbXMranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi9hbHRvLWVuZHBvaW50cHJvcCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2FsdG8tZW5kcG9pbnRwcm9wcGFyYW1zK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vYWx0by1lcnJvcitqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2FsdG8tbmV0d29ya21hcCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2FsdG8tbmV0d29ya21hcGZpbHRlcitqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2FtbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2FuZHJldy1pbnNldFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImV6XCJdfSxcImFwcGxpY2F0aW9uL2FwcGxlZmlsZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2FwcGxpeHdhcmVcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImF3XCJdfSxcImFwcGxpY2F0aW9uL2F0ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2F0ZnhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJhdG9tXCJdfSxcImFwcGxpY2F0aW9uL2F0b21jYXQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiYXRvbWNhdFwiXX0sXCJhcHBsaWNhdGlvbi9hdG9tZGVsZXRlZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9hdG9taWNtYWlsXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vYXRvbXN2Yyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJhdG9tc3ZjXCJdfSxcImFwcGxpY2F0aW9uL2F0eG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vYXV0aC1wb2xpY3kreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vYmFjbmV0LXhkZCt6aXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9iYXRjaC1zbXRwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vYmRvY1wiOntcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImJkb2NcIl19LFwiYXBwbGljYXRpb24vYmVlcCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9jYWxlbmRhcitqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2NhbGVuZGFyK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2NhbGwtY29tcGxldGlvblwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2NhbHMtMTg0MFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2Nib3JcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9jY2NleFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2NjbXAreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vY2N4bWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2N4bWxcIl19LFwiYXBwbGljYXRpb24vY2RmeCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9jZG1pLWNhcGFiaWxpdHlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjZG1pYVwiXX0sXCJhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lclwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImNkbWljXCJdfSxcImFwcGxpY2F0aW9uL2NkbWktZG9tYWluXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2RtaWRcIl19LFwiYXBwbGljYXRpb24vY2RtaS1vYmplY3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjZG1pb1wiXX0sXCJhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2RtaXFcIl19LFwiYXBwbGljYXRpb24vY2RuaVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2NlYVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2NlYS0yMDE4K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2NlbGxtbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9jZndcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9jbHVlX2luZm8reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vY21zXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vY25ycCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9jb2FwLWdyb3VwK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vY29hcC1wYXlsb2FkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vY29tbW9uZ3JvdW5kXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vY29uZmVyZW5jZS1pbmZvK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2Nvc2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9jb3NlLWtleVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2Nvc2Uta2V5LXNldFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2NwbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9jc3JhdHRyc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2NzdGEreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vY3N0YWRhdGEreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vY3N2bStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2N1LXNlZW1lXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJjdVwiXX0sXCJhcHBsaWNhdGlvbi9jeWJlcmNhc2hcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9kYXJ0XCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi9kYXNoK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1wZFwiXX0sXCJhcHBsaWNhdGlvbi9kYXNoZGVsdGFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9kYXZtb3VudCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkYXZtb3VudFwiXX0sXCJhcHBsaWNhdGlvbi9kY2EtcmZ0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZGNkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZGVjLWR4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZGlhbG9nLWluZm8reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZGljb21cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9kaWNvbStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2RpY29tK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2RpaVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2RpdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2Ruc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2RvY2Jvb2sreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJkYmtcIl19LFwiYXBwbGljYXRpb24vZHNrcHAreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZHNzYytkZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkc3NjXCJdfSxcImFwcGxpY2F0aW9uL2Rzc2MreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wieGRzc2NcIl19LFwiYXBwbGljYXRpb24vZHZjc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wiZWNtYVwiXX0sXCJhcHBsaWNhdGlvbi9lZGktY29uc2VudFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2VkaS14MTJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlfSxcImFwcGxpY2F0aW9uL2VkaWZhY3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlfSxcImFwcGxpY2F0aW9uL2VmaVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLmNvbW1lbnQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuY29udHJvbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5kZXZpY2VpbmZvK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLmVjYWxsLm1zZFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLnByb3ZpZGVyaW5mbyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5zZXJ2aWNlaW5mbyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5zdWJzY3JpYmVyaW5mbyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS52ZWRzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2VtbWEreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZW1tYVwiXX0sXCJhcHBsaWNhdGlvbi9lbW90aW9ubWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZW5jYXBydHBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9lcHAreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZXB1Yit6aXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJlcHViXCJdfSxcImFwcGxpY2F0aW9uL2VzaG9wXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZXhpXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZXhpXCJdfSxcImFwcGxpY2F0aW9uL2Zhc3RpbmZvc2V0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZmFzdHNvYXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9mZHQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZmhpcit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9maWRvLnRydXN0ZWQtYXBwcytqc29uXCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi9maXRzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZm9udC1zZm50XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZm9udC10ZHBmclwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInBmclwiXX0sXCJhcHBsaWNhdGlvbi9mb250LXdvZmZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIndvZmZcIl19LFwiYXBwbGljYXRpb24vZnJhbWV3b3JrLWF0dHJpYnV0ZXMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vZ2VvK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wiZ2VvanNvblwiXX0sXCJhcHBsaWNhdGlvbi9nZW8ranNvbi1zZXFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9nZW94YWNtbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9nbWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZ21sXCJdfSxcImFwcGxpY2F0aW9uL2dweCt4bWxcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImdweFwiXX0sXCJhcHBsaWNhdGlvbi9neGZcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImd4ZlwiXX0sXCJhcHBsaWNhdGlvbi9nemlwXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJnelwiXX0sXCJhcHBsaWNhdGlvbi9oMjI0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vaGVsZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9oanNvblwiOntcImV4dGVuc2lvbnNcIjpbXCJoanNvblwiXX0sXCJhcHBsaWNhdGlvbi9odHRwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vaHlwZXJzdHVkaW9cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzdGtcIl19LFwiYXBwbGljYXRpb24vaWJlLWtleS1yZXF1ZXN0K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2liZS1wa2ctcmVwbHkreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vaWJlLXBwLWRhdGFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9pZ2VzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vaW0taXNjb21wb3NpbmcreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vaW5kZXhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9pbmRleC5jbWRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9pbmRleC5vYmpcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9pbmRleC5yZXNwb25zZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2luZGV4LnZuZFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2lua21sK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImlua1wiLFwiaW5rbWxcIl19LFwiYXBwbGljYXRpb24vaW90cFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2lwZml4XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaXBmaXhcIl19LFwiYXBwbGljYXRpb24vaXBwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vaXN1cFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2l0cyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmVcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wiamFyXCIsXCJ3YXJcIixcImVhclwiXX0sXCJhcHBsaWNhdGlvbi9qYXZhLXNlcmlhbGl6ZWQtb2JqZWN0XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcInNlclwiXX0sXCJhcHBsaWNhdGlvbi9qYXZhLXZtXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImNsYXNzXCJdfSxcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNoYXJzZXRcIjpcIlVURi04XCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcImpzXCIsXCJtanNcIl19LFwiYXBwbGljYXRpb24vamYyZmVlZCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2pvc2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9qb3NlK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vanJkK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vanNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY2hhcnNldFwiOlwiVVRGLThcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wianNvblwiLFwibWFwXCJdfSxcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi9qc29uLXNlcVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2pzb241XCI6e1wiZXh0ZW5zaW9uc1wiOltcImpzb241XCJdfSxcImFwcGxpY2F0aW9uL2pzb25tbCtqc29uXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wianNvbm1sXCJdfSxcImFwcGxpY2F0aW9uL2p3aytqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL2p3ay1zZXQranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi9qd3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9rcG1sLXJlcXVlc3QreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24va3BtbC1yZXNwb25zZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9sZCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcImpzb25sZFwiXX0sXCJhcHBsaWNhdGlvbi9sZ3IreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbGluay1mb3JtYXRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9sb2FkLWNvbnRyb2wreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbG9zdCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJsb3N0eG1sXCJdfSxcImFwcGxpY2F0aW9uL2xvc3RzeW5jK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL2x4ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL21hYy1iaW5oZXg0MFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImhxeFwiXX0sXCJhcHBsaWNhdGlvbi9tYWMtY29tcGFjdHByb1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiY3B0XCJdfSxcImFwcGxpY2F0aW9uL21hY3dyaXRlaWlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tYWRzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1hZHNcIl19LFwiYXBwbGljYXRpb24vbWFuaWZlc3QranNvblwiOntcImNoYXJzZXRcIjpcIlVURi04XCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcIndlYm1hbmlmZXN0XCJdfSxcImFwcGxpY2F0aW9uL21hcmNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtcmNcIl19LFwiYXBwbGljYXRpb24vbWFyY3htbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtcmN4XCJdfSxcImFwcGxpY2F0aW9uL21hdGhlbWF0aWNhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibWFcIixcIm5iXCIsXCJtYlwiXX0sXCJhcHBsaWNhdGlvbi9tYXRobWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibWF0aG1sXCJdfSxcImFwcGxpY2F0aW9uL21hdGhtbC1jb250ZW50K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL21hdGhtbC1wcmVzZW50YXRpb24reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbWJtcy1hc3NvY2lhdGVkLXByb2NlZHVyZS1kZXNjcmlwdGlvbit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tYm1zLWRlcmVnaXN0ZXIreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbWJtcy1lbnZlbG9wZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tYm1zLW1zayt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tYm1zLW1zay1yZXNwb25zZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tYm1zLXByb3RlY3Rpb24tZGVzY3JpcHRpb24reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbWJtcy1yZWNlcHRpb24tcmVwb3J0K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL21ibXMtcmVnaXN0ZXIreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbWJtcy1yZWdpc3Rlci1yZXNwb25zZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tYm1zLXNjaGVkdWxlK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL21ibXMtdXNlci1zZXJ2aWNlLWRlc2NyaXB0aW9uK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL21ib3hcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtYm94XCJdfSxcImFwcGxpY2F0aW9uL21lZGlhLXBvbGljeS1kYXRhc2V0K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL21lZGlhX2NvbnRyb2wreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbWVkaWFzZXJ2ZXJjb250cm9sK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1zY21sXCJdfSxcImFwcGxpY2F0aW9uL21lcmdlLXBhdGNoK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vbWV0YWxpbmsreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJtZXRhbGlua1wiXX0sXCJhcHBsaWNhdGlvbi9tZXRhbGluazQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibWV0YTRcIl19LFwiYXBwbGljYXRpb24vbWV0cyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtZXRzXCJdfSxcImFwcGxpY2F0aW9uL21mNFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL21pa2V5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbW10LXVzZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tb2RzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1vZHNcIl19LFwiYXBwbGljYXRpb24vbW9zcy1rZXlzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbW9zcy1zaWduYXR1cmVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tb3Nza2V5LWRhdGFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tb3Nza2V5LXJlcXVlc3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tcDIxXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibTIxXCIsXCJtcDIxXCJdfSxcImFwcGxpY2F0aW9uL21wNFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1wNHNcIixcIm00cFwiXX0sXCJhcHBsaWNhdGlvbi9tcGVnNC1nZW5lcmljXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbXBlZzQtaW9kXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbXBlZzQtaW9kLXhtdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL21yYi1jb25zdW1lcit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tcmItcHVibGlzaCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tc2MtaXZyK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL21zYy1taXhlcit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9tc3dvcmRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImRvY1wiLFwiZG90XCJdfSxcImFwcGxpY2F0aW9uL211ZCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL214ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm14ZlwiXX0sXCJhcHBsaWNhdGlvbi9uLXF1YWRzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbi10cmlwbGVzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbmFzZGF0YVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL25ld3MtY2hlY2tncm91cHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9uZXdzLWdyb3VwaW5mb1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL25ld3MtdHJhbnNtaXNzaW9uXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbmxzbWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vbm9kZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL25zc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL29jc3AtcmVxdWVzdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL29jc3AtcmVzcG9uc2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImJpblwiLFwiZG1zXCIsXCJscmZcIixcIm1hclwiLFwic29cIixcImRpc3RcIixcImRpc3R6XCIsXCJwa2dcIixcImJwa1wiLFwiZHVtcFwiLFwiZWxjXCIsXCJkZXBsb3lcIixcImV4ZVwiLFwiZGxsXCIsXCJkZWJcIixcImRtZ1wiLFwiaXNvXCIsXCJpbWdcIixcIm1zaVwiLFwibXNwXCIsXCJtc21cIixcImJ1ZmZlclwiXX0sXCJhcHBsaWNhdGlvbi9vZGFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJvZGFcIl19LFwiYXBwbGljYXRpb24vb2R4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vb2VicHMtcGFja2FnZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJvcGZcIl19LFwiYXBwbGljYXRpb24vb2dnXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJvZ3hcIl19LFwiYXBwbGljYXRpb24vb21kb2MreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJvbWRvY1wiXX0sXCJhcHBsaWNhdGlvbi9vbmVub3RlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJvbmV0b2NcIixcIm9uZXRvYzJcIixcIm9uZXRtcFwiLFwib25lcGtnXCJdfSxcImFwcGxpY2F0aW9uL294cHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJveHBzXCJdfSxcImFwcGxpY2F0aW9uL3AycC1vdmVybGF5K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3Bhcml0eWZlY1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3Bhc3Nwb3J0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vcGF0Y2gtb3BzLWVycm9yK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhlclwiXX0sXCJhcHBsaWNhdGlvbi9wZGZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcInBkZlwiXX0sXCJhcHBsaWNhdGlvbi9wZHhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJwZ3BcIl19LFwiYXBwbGljYXRpb24vcGdwLWtleXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiYXNjXCIsXCJzaWdcIl19LFwiYXBwbGljYXRpb24vcGljcy1ydWxlc1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicHJmXCJdfSxcImFwcGxpY2F0aW9uL3BpZGYreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vcGlkZi1kaWZmK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3BrY3MxMFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInAxMFwiXX0sXCJhcHBsaWNhdGlvbi9wa2NzMTJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9wa2NzNy1taW1lXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicDdtXCIsXCJwN2NcIl19LFwiYXBwbGljYXRpb24vcGtjczctc2lnbmF0dXJlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicDdzXCJdfSxcImFwcGxpY2F0aW9uL3BrY3M4XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicDhcIl19LFwiYXBwbGljYXRpb24vcGtjczgtZW5jcnlwdGVkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vcGtpeC1hdHRyLWNlcnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJhY1wiXX0sXCJhcHBsaWNhdGlvbi9wa2l4LWNlcnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjZXJcIl19LFwiYXBwbGljYXRpb24vcGtpeC1jcmxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjcmxcIl19LFwiYXBwbGljYXRpb24vcGtpeC1wa2lwYXRoXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicGtpcGF0aFwiXX0sXCJhcHBsaWNhdGlvbi9wa2l4Y21wXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicGtpXCJdfSxcImFwcGxpY2F0aW9uL3Bscyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJwbHNcIl19LFwiYXBwbGljYXRpb24vcG9jLXNldHRpbmdzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wiYWlcIixcImVwc1wiLFwicHNcIl19LFwiYXBwbGljYXRpb24vcHBzcC10cmFja2VyK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vcHJvYmxlbStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3Byb2JsZW0reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vcHJvdmVuYW5jZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9wcnMuYWx2ZXN0cmFuZC50aXRyYXgtc2hlZXRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9wcnMuY3d3XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY3d3XCJdfSxcImFwcGxpY2F0aW9uL3Bycy5ocHViK3ppcFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3Bycy5ucHJlbmRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9wcnMucGx1Y2tlclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3Bycy5yZGYteG1sLWNyeXB0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vcHJzLnhzZit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9wc2tjK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInBza2N4bWxcIl19LFwiYXBwbGljYXRpb24vcXNpZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3JhbWwreWFtbFwiOntcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wicmFtbFwiXX0sXCJhcHBsaWNhdGlvbi9yYXB0b3JmZWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9yZGFwK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vcmRmK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJyZGZcIl19LFwiYXBwbGljYXRpb24vcmVnaW5mbyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJyaWZcIl19LFwiYXBwbGljYXRpb24vcmVsYXgtbmctY29tcGFjdC1zeW50YXhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJybmNcIl19LFwiYXBwbGljYXRpb24vcmVtb3RlLXByaW50aW5nXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vcmVwdXRvbitqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInJsXCJdfSxcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzLWRpZmYreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicmxkXCJdfSxcImFwcGxpY2F0aW9uL3JmYyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9yaXNjb3NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9ybG1pK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3Jscy1zZXJ2aWNlcyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJyc1wiXX0sXCJhcHBsaWNhdGlvbi9yb3V0ZS1hcGQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vcm91dGUtcy10c2lkK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3JvdXRlLXVzZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9ycGtpLWdob3N0YnVzdGVyc1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImdiclwiXX0sXCJhcHBsaWNhdGlvbi9ycGtpLW1hbmlmZXN0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibWZ0XCJdfSxcImFwcGxpY2F0aW9uL3Jwa2ktcHVibGljYXRpb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9ycGtpLXJvYVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInJvYVwiXX0sXCJhcHBsaWNhdGlvbi9ycGtpLXVwZG93blwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3JzZCt4bWxcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInJzZFwiXX0sXCJhcHBsaWNhdGlvbi9yc3MreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wicnNzXCJdfSxcImFwcGxpY2F0aW9uL3J0ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJydGZcIl19LFwiYXBwbGljYXRpb24vcnRwbG9vcGJhY2tcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9ydHhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9zYW1sYXNzZXJ0aW9uK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3NhbWxtZXRhZGF0YSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9zYm1sK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNibWxcIl19LFwiYXBwbGljYXRpb24vc2NhaXAreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vc2NpbStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVxdWVzdFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNjcVwiXX0sXCJhcHBsaWNhdGlvbi9zY3ZwLWN2LXJlc3BvbnNlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2NzXCJdfSxcImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVxdWVzdFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNwcVwiXX0sXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlc3BvbnNlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic3BwXCJdfSxcImFwcGxpY2F0aW9uL3NkcFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNkcFwiXX0sXCJhcHBsaWNhdGlvbi9zZXAreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vc2VwLWV4aVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3Nlc3Npb24taW5mb1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3NldC1wYXltZW50XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vc2V0LXBheW1lbnQtaW5pdGlhdGlvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNldHBheVwiXX0sXCJhcHBsaWNhdGlvbi9zZXQtcmVnaXN0cmF0aW9uXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvbi1pbml0aWF0aW9uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2V0cmVnXCJdfSxcImFwcGxpY2F0aW9uL3NnbWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9zZ21sLW9wZW4tY2F0YWxvZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3NoZit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzaGZcIl19LFwiYXBwbGljYXRpb24vc2lldmVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9zaW1wbGUtZmlsdGVyK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3NpbXBsZS1tZXNzYWdlLXN1bW1hcnlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9zaW1wbGVzeW1ib2xjb250YWluZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9zbGF0ZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3NtaWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9zbWlsK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNtaVwiLFwic21pbFwiXX0sXCJhcHBsaWNhdGlvbi9zbXB0ZTMzNm1cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi9zb2FwK2Zhc3RpbmZvc2V0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vc29hcCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vc3BhcnFsLXF1ZXJ5XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicnFcIl19LFwiYXBwbGljYXRpb24vc3BhcnFsLXJlc3VsdHMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic3J4XCJdfSxcImFwcGxpY2F0aW9uL3NwaXJpdHMtZXZlbnQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vc3FsXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vc3Jnc1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImdyYW1cIl19LFwiYXBwbGljYXRpb24vc3Jncyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJncnhtbFwiXX0sXCJhcHBsaWNhdGlvbi9zcnUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic3J1XCJdfSxcImFwcGxpY2F0aW9uL3NzZGwreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzc2RsXCJdfSxcImFwcGxpY2F0aW9uL3NzbWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic3NtbFwiXX0sXCJhcHBsaWNhdGlvbi90YW1wLWFwZXgtdXBkYXRlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdGFtcC1hcGV4LXVwZGF0ZS1jb25maXJtXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdGFtcC1jb21tdW5pdHktdXBkYXRlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdGFtcC1jb21tdW5pdHktdXBkYXRlLWNvbmZpcm1cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi90YW1wLWVycm9yXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdGFtcC1zZXF1ZW5jZS1hZGp1c3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi90YW1wLXNlcXVlbmNlLWFkanVzdC1jb25maXJtXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdGFtcC1zdGF0dXMtcXVlcnlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi90YW1wLXN0YXR1cy1yZXNwb25zZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3RhbXAtdXBkYXRlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdGFtcC11cGRhdGUtY29uZmlybVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3RhclwiOntcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdGVpK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInRlaVwiLFwidGVpY29ycHVzXCJdfSxcImFwcGxpY2F0aW9uL3RocmF1ZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ0ZmlcIl19LFwiYXBwbGljYXRpb24vdGltZXN0YW1wLXF1ZXJ5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdGltZXN0YW1wLXJlcGx5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdGltZXN0YW1wZWQtZGF0YVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInRzZFwiXX0sXCJhcHBsaWNhdGlvbi90bmF1dGhsaXN0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdHJpZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3R0bWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdHZlLXRyaWdnZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi91bHBmZWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi91cmMtZ3Jwc2hlZXQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdXJjLXJlc3NoZWV0K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3VyYy10YXJnZXRkZXNjK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3VyYy11aXNvY2tldGRlc2MreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdmNhcmQranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92Y2FyZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92ZW1taVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZpdmlkZW5jZS5zY3JpcHRmaWxlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIn0sXCJhcHBsaWNhdGlvbi92bmQuMTAwMG1pbmRzLmRlY2lzaW9uLW1vZGVsK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLXByb3NlK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLXByb3NlLXBjM2NoK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLXYyeC1sb2NhbC1zZXJ2aWNlLWluZm9ybWF0aW9uXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLjNncHAuYWNjZXNzLXRyYW5zZmVyLWV2ZW50cyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5ic2YreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLjNncHAuZ21vcCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1hZmZpbGlhdGlvbi1jb21tYW5kK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LWZsb29yLXJlcXVlc3QreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtaW5mbyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1sb2NhdGlvbi1pbmZvK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LW1ibXMtdXNhZ2UtaW5mbyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1zaWduZWQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLjNncHAubWlkLWNhbGwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LWxhcmdlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicGxiXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnBpYy1idy1zbWFsbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInBzYlwiXX0sXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctdmFyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicHZiXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNtc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNtcyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zcnZjYy1leHQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLjNncHAuc3J2Y2MtaW5mbyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zdGF0ZS1hbmQtZXZlbnQtaW5mbyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuM2dwcC51c3NkK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwMi5iY21jc2luZm8reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLjNncHAyLnNtc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwMi50Y2FwXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widGNhcFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuM2xpZ2h0c3NvZnR3YXJlLmltYWdlc2NhbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC4zbS5wb3N0LWl0LW5vdGVzXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicHduXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmFzb1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImFzb1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5pbXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJpbXBcIl19LFwiYXBwbGljYXRpb24vdm5kLmFjdWNvYm9sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiYWN1XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb3JwXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiYXRjXCIsXCJhY3V0Y1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWlyLWFwcGxpY2F0aW9uLWluc3RhbGxlci1wYWNrYWdlK3ppcFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiYWlyXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5mbGFzaC5tb3ZpZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5mb3Jtc2NlbnRyYWwuZmNkdFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImZjZHRcIl19LFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLmZ4cFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImZ4cFwiLFwiZnhwbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUucGFydGlhbC11cGxvYWRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUueGRwK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhkcFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUueGZkZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhmZGZcIl19LFwiYXBwbGljYXRpb24vdm5kLmFldGhlci5pbXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuYWgtYmFyY29kZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5haGVhZC5zcGFjZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImFoZWFkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5haXJ6aXAuZmlsZXNlY3VyZS5hemZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJhemZcIl19LFwiYXBwbGljYXRpb24vdm5kLmFpcnppcC5maWxlc2VjdXJlLmF6c1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImF6c1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuYW1hZGV1cytqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2tcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImF6d1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuYW1hem9uLm1vYmk4LWVib29rXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmFtZXJpY2FuZHluYW1pY3MuYWNjXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiYWNjXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5hbWlnYS5hbWlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJhbWlcIl19LFwiYXBwbGljYXRpb24vdm5kLmFtdW5kc2VuLm1hemUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmFuZHJvaWQucGFja2FnZS1hcmNoaXZlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImFwa1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuYW5raVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5hbnNlci13ZWItY2VydGlmaWNhdGUtaXNzdWUtaW5pdGlhdGlvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImNpaVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuYW5zZXItd2ViLWZ1bmRzLXRyYW5zZmVyLWluaXRpYXRpb25cIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImZ0aVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuYW50aXguZ2FtZS1jb21wb25lbnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJhdHhcIl19LFwiYXBwbGljYXRpb24vdm5kLmFwYWNoZS50aHJpZnQuYmluYXJ5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmFwYWNoZS50aHJpZnQuY29tcGFjdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUudGhyaWZ0Lmpzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuYXBpK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLmFwb3RoZWtlbmRlLnJlc2VydmF0aW9uK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLmluc3RhbGxlcit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtcGtnXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibTN1OFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUucGtwYXNzXCI6e1wiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wicGtwYXNzXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5hcmFzdHJhLnN3aVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5hcmlzdGFuZXR3b3Jrcy5zd2lcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzd2lcIl19LFwiYXBwbGljYXRpb24vdm5kLmFydHNxdWFyZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5hc3RyYWVhLXNvZnR3YXJlLmlvdGFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJpb3RhXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5hdWRpb2dyYXBoXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiYWVwXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5hdXRvcGFja2FnZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5hdmFsb24ranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQuYXZpc3Rhcit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuYmFsc2FtaXEuYm1tbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuYmFsc2FtaXEuYm1wclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5iYmYudXNwLm1zZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5iYmYudXNwLm1zZytqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5iZWtpdHp1ci1zdGVjaCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5iaW50Lm1lZC1jb250ZW50XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmJpb3BheC5yZGYreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmJsaW5rLWlkYi12YWx1ZS13cmFwcGVyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmJsdWVpY2UubXVsdGlwYXNzXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibXBtXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ibHVldG9vdGguZXAub29iXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmJsdWV0b290aC5sZS5vb2JcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuYm1pXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiYm1pXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5idXNpbmVzc29iamVjdHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJyZXBcIl19LFwiYXBwbGljYXRpb24vdm5kLmNhYi1qc2NyaXB0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmNhbm9uLWNwZGxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuY2Fub24tbGlwc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jYXBhc3lzdGVtcy1wZytqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5jZW5kaW8udGhpbmxpbmMuY2xpZW50Y29uZlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jZW50dXJ5LXN5c3RlbXMudGNwX3N0cmVhbVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jaGVtZHJhdyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjZHhtbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuY2hlc3MtcGduXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmNoaXBudXRzLmthcmFva2UtbW1kXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibW1kXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5jaW5kZXJlbGxhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2R5XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5jaXJwYWNrLmlzZG4tZXh0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmNpdGF0aW9uc3R5bGVzLnN0eWxlK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jbGF5bW9yZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImNsYVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuY2xvYW50by5ycDlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJycDlcIl19LFwiYXBwbGljYXRpb24vdm5kLmNsb25rLmM0Z3JvdXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjNGdcIixcImM0ZFwiLFwiYzRmXCIsXCJjNHBcIixcImM0dVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuY2x1ZXRydXN0LmNhcnRvbW9iaWxlLWNvbmZpZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImMxMWFtY1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuY2x1ZXRydXN0LmNhcnRvbW9iaWxlLWNvbmZpZy1wa2dcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjMTFhbXpcIl19LFwiYXBwbGljYXRpb24vdm5kLmNvZmZlZXNjcmlwdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5kb2N1bWVudFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5kb2N1bWVudC10ZW1wbGF0ZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5wcmVzZW50YXRpb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuY29sbGFiaW8ueG9kb2N1bWVudHMucHJlc2VudGF0aW9uLXRlbXBsYXRlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmNvbGxhYmlvLnhvZG9jdW1lbnRzLnNwcmVhZHNoZWV0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmNvbGxhYmlvLnhvZG9jdW1lbnRzLnNwcmVhZHNoZWV0LXRlbXBsYXRlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmNvbGxlY3Rpb24ranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbi5kb2MranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbi5uZXh0K2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLmNvbWljYm9vayt6aXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuY29taWNib29rLXJhclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jb21tZXJjZS1iYXR0ZWxsZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jb21tb25zcGFjZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImNzcFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuY29udGFjdC5jbXNnXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2RiY21zZ1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuY29yZW9zLmlnbml0aW9uK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLmNvc21vY2FsbGVyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY21jXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2xreFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5rZXlib2FyZFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImNsa2tcIl19LFwiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXIucGFsZXR0ZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImNsa3BcIl19LFwiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXIudGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjbGt0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLndvcmRiYW5rXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2xrd1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuY3JpdGljYWx0b29scy53YnMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wid2JzXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5jdGMtcG9zbWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJwbWxcIl19LFwiYXBwbGljYXRpb24vdm5kLmN0Y3Qud3MreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcGRmXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcG9zdHNjcmlwdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXBwZFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInBwZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuY3Vwcy1yYXN0ZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuY3Vwcy1yYXdcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuY3VybFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5jdXJsLmNhclwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiY2FyXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5jdXJsLnBjdXJsXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJwY3VybFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuY3lhbi5kZWFuLnJvb3QreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmN5YmFua1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5kMmwuY291cnNlcGFja2FnZTFwMCt6aXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZGFydFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJkYXJ0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5kYXRhLXZpc2lvbi5yZHpcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJyZHpcIl19LFwiYXBwbGljYXRpb24vdm5kLmRhdGFwYWNrYWdlK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLmRhdGFyZXNvdXJjZStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5kZWJpYW4uYmluYXJ5LXBhY2thZ2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZGVjZS5kYXRhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widXZmXCIsXCJ1dnZmXCIsXCJ1dmRcIixcInV2dmRcIl19LFwiYXBwbGljYXRpb24vdm5kLmRlY2UudHRtbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ1dnRcIixcInV2dnRcIl19LFwiYXBwbGljYXRpb24vdm5kLmRlY2UudW5zcGVjaWZpZWRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ1dnhcIixcInV2dnhcIl19LFwiYXBwbGljYXRpb24vdm5kLmRlY2UuemlwXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widXZ6XCIsXCJ1dnZ6XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5kZW5vdm8uZmNzZWxheW91dC1saW5rXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZmVfbGF1bmNoXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5kZXNtdW1lLW1vdmllXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmRlc211bWUubW92aWVcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwifSxcImFwcGxpY2F0aW9uL3ZuZC5kaXItYmkucGxhdGUtZGwtbm9zdWZmaXhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZG0uZGVsZWdhdGlvbit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZG5hXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZG5hXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5kb2N1bWVudCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5kb2xieS5tbHBcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1scFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZG9sYnkubW9iaWxlLjFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZG9sYnkubW9iaWxlLjJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZG9yZW1pci5zY29yZWNsb3VkLWJpbmFyeS1kb2N1bWVudFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5kcGdyYXBoXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZHBnXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5kcmVhbWZhY3RvcnlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkZmFjXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5kcml2ZStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5kcy1rZXlwb2ludFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wia3B4eFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZHRnLmxvY2FsXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR0Zy5sb2NhbC5mbGFzaFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5kdGcubG9jYWwuaHRtbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5kdmIuYWl0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiYWl0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5kdmIuZHZialwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5kdmIuZXNnY29udGFpbmVyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjZGZ0bm90aWZhY2Nlc3NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNlc2dhY2Nlc3NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNlc2dhY2Nlc3MyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjZXNncGRkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjcm9hbWluZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXB0di5hbGZlYy1iYXNlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcHR2LmFsZmVjLWVuaGFuY2VtZW50XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1hZ2dyZWdhdGUtcm9vdCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWNvbnRhaW5lcit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWdlbmVyaWMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1tc2dsaXN0K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtaWEtcmVnaXN0cmF0aW9uLXJlcXVlc3QreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1yZWdpc3RyYXRpb24tcmVzcG9uc2UreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pbml0K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5kdmIucGZyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmR2Yi5zZXJ2aWNlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic3ZjXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5keHJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZHluYWdlb1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImdlb1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuZHpyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmVhc3lrYXJhb2tlLmNkZ2Rvd25sb2FkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmVjZGlzLXVwZGF0ZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5lY2lwLnJscFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uY2hhcnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtYWdcIl19LFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5maWxlcmVxdWVzdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uZmlsZXVwZGF0ZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uc2VyaWVzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5zZXJpZXNyZXF1ZXN0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5zZXJpZXN1cGRhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZWZpLmltZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5lZmkuaXNvXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmVtY2xpZW50LmFjY2Vzc3JlcXVlc3QreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmVubGl2ZW5cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJubWxcIl19LFwiYXBwbGljYXRpb24vdm5kLmVucGhhc2UuZW52b3lcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXByaW50cy5kYXRhK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5lc2ZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJlc2ZcIl19LFwiYXBwbGljYXRpb24vdm5kLmVwc29uLm1zZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1zZlwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZXBzb24ucXVpY2thbmltZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInFhbVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZXBzb24uc2FsdFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNsdFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZXBzb24uc3NmXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic3NmXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5lcmljc3Nvbi5xdWlja2NhbGxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXNwYXNzLWVzcGFzcyt6aXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXN6aWdubzMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZXMzXCIsXCJldDNcIl19LFwiYXBwbGljYXRpb24vdm5kLmV0c2kuYW9jK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmFzaWMtZSt6aXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5hc2ljLXMremlwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmV0c2kuY3VnK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZjb21tYW5kK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZkaXNjb3ZlcnkreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnByb2ZpbGUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnNhZC1iYyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2FkLWNvZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2FkLW5wdnIreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnNlcnZpY2UreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnN5bmMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnVlcHJvZmlsZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5tY2lkK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLm1oZWc1XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmV0c2kub3ZlcmxvYWQtY29udHJvbC1wb2xpY3ktZGF0YXNldCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5wc3RuK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnNjaSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5zaW1zZXJ2cyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXRzaS50aW1lc3RhbXAtdG9rZW5cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXRzaS50c2wreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmV0c2kudHNsLmRlclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ldWRvcmEuZGF0YVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ldm9sdi5lY2lnLnByb2ZpbGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZXZvbHYuZWNpZy5zZXR0aW5nc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ldm9sdi5lY2lnLnRoZW1lXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmV6cGl4LWFsYnVtXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZXoyXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5lenBpeC1wYWNrYWdlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZXozXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5mLXNlY3VyZS5tb2JpbGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZmFzdGNvcHktZGlzay1pbWFnZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5mZGZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJmZGZcIl19LFwiYXBwbGljYXRpb24vdm5kLmZkc24ubXNlZWRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtc2VlZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZmRzbi5zZWVkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2VlZFwiLFwiZGF0YWxlc3NcIl19LFwiYXBwbGljYXRpb24vdm5kLmZmc25zXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmZpbG1pdC56ZmNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZmludHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZmlyZW1vbmtleXMuY2xvdWRjZWxsXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmZsb2dyYXBoaXRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJncGhcIl19LFwiYXBwbGljYXRpb24vdm5kLmZsdXh0aW1lLmNsaXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJmdGNcIl19LFwiYXBwbGljYXRpb24vdm5kLmZvbnQtZm9udGZvcmdlLXNmZFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5mcmFtZW1ha2VyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZm1cIixcImZyYW1lXCIsXCJtYWtlclwiLFwiYm9va1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5mbmNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJmbmNcIl19LFwiYXBwbGljYXRpb24vdm5kLmZyb2dhbnMubHRmXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibHRmXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5mc2Mud2VibGF1bmNoXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZnNjXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wib2FzXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm9hMlwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5czNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJvYTNcIl19LFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXNncFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImZnNVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c3Byc1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImJoMlwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmFydC1leFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guYXJ0NFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZGRkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZGRkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZG9jdXdvcmtzXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wieGR3XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZG9jdXdvcmtzLmJpbmRlclwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhiZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRvY3V3b3Jrcy5jb250YWluZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmhicGxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZnV0LW1pc25ldFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5mdXp6eXNoZWV0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZnpzXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5nZW5vbWF0aXgudHV4ZWRvXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widHhkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5nZW8ranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQuZ2VvY3ViZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZ2VvZ2VicmEuZmlsZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImdnYlwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZ2VvZ2VicmEudG9vbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImdndFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZ2VvbWV0cnktZXhwbG9yZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJnZXhcIixcImdyZVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZ2VvbmV4dFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImd4dFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZ2VvcGxhblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImcyd1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuZ2Vvc3BhY2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJnM3dcIl19LFwiYXBwbGljYXRpb24vdm5kLmdlcmJlclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5nbG9iYWxwbGF0Zm9ybS5jYXJkLWNvbnRlbnQtbWd0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmdsb2JhbHBsYXRmb3JtLmNhcmQtY29udGVudC1tZ3QtcmVzcG9uc2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZ214XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZ214XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5kb2N1bWVudFwiOntcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImdkb2NcIl19LFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLnByZXNlbnRhdGlvblwiOntcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImdzbGlkZXNcIl19LFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLnNwcmVhZHNoZWV0XCI6e1wiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wiZ3NoZWV0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtZWFydGgua21sK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJrbWxcIl19LFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1lYXJ0aC5rbXpcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImttelwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZ292LnNrLmUtZm9ybSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZ292LnNrLmUtZm9ybSt6aXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZ292LnNrLnhtbGRhdGFjb250YWluZXIreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmdyYWZlcVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImdxZlwiLFwiZ3FzXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ncmlkbXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWFjY291bnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJnYWNcIl19LFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS1oZWxwXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZ2hmXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtaWRlbnRpdHktbWVzc2FnZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImdpbVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWluamVjdG9yXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZ3J2XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtdG9vbC1tZXNzYWdlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZ3RtXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtdG9vbC10ZW1wbGF0ZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInRwbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXZjYXJkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widmNnXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5oYWwranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQuaGFsK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImhhbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuaGFuZGhlbGQtZW50ZXJ0YWlubWVudCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ6bW1cIl19LFwiYXBwbGljYXRpb24vdm5kLmhiY2lcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJoYmNpXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5oYytqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5oY2wtYmlyZXBvcnRzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmhkdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5oZXJva3UranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQuaGhlLmxlc3Nvbi1wbGF5ZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJsZXNcIl19LFwiYXBwbGljYXRpb24vdm5kLmhwLWhwZ2xcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJocGdsXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ocC1ocGlkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaHBpZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBzXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaHBzXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ocC1qbHl0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiamx0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ocC1wY2xcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJwY2xcIl19LFwiYXBwbGljYXRpb24vdm5kLmhwLXBjbHhsXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicGNseGxcIl19LFwiYXBwbGljYXRpb24vdm5kLmh0dHBob25lXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmh5ZHJvc3RhdGl4LnNvZi1kYXRhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2ZkLWhkc3R4XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5oeXBlci1pdGVtK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLmh5cGVyZHJpdmUranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQuaHpuLTNkLWNyb3Nzd29yZFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5pYm0uYWZwbGluZWRhdGFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaWJtLmVsZWN0cm9uaWMtbWVkaWFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaWJtLm1pbmlwYXlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtcHlcIl19LFwiYXBwbGljYXRpb24vdm5kLmlibS5tb2RjYXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJhZnBcIixcImxpc3RhZnBcIixcImxpc3QzODIwXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5pYm0ucmlnaHRzLW1hbmFnZW1lbnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJpcm1cIl19LFwiYXBwbGljYXRpb24vdm5kLmlibS5zZWN1cmUtY29udGFpbmVyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2NcIl19LFwiYXBwbGljYXRpb24vdm5kLmljY3Byb2ZpbGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJpY2NcIixcImljbVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuaWVlZS4xOTA1XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmlnbG9hZGVyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaWdsXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5pbWFnZW1ldGVyLmZvbGRlcit6aXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaW1hZ2VtZXRlci5pbWFnZSt6aXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZwXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaXZwXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5pbW1lcnZpc2lvbi1pdnVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJpdnVcIl19LFwiYXBwbGljYXRpb24vdm5kLmltcy5pbXNjY3YxcDFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaW1zLmltc2NjdjFwMlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5pbXMuaW1zY2N2MXAzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmltcy5saXMudjIucmVzdWx0K2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLmltcy5sdGkudjIudG9vbGNvbnN1bWVycHJvZmlsZStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xwcm94eStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xwcm94eS5pZCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xzZXR0aW5ncytqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xzZXR0aW5ncy5zaW1wbGUranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQuaW5mb3JtZWRjb250cm9sLnJtcyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaW5mb3JtaXgtdmlzaW9uYXJ5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmluZm90ZWNoLnByb2plY3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaW5mb3RlY2gucHJvamVjdCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaW5ub3BhdGgud2FtcC5ub3RpZmljYXRpb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaW5zb3JzLmlnbVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImlnbVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJjb24uZm9ybW5ldFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhwd1wiLFwieHB4XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5pbnRlcmdlb1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImkyZ1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJ0cnVzdC5kaWdpYm94XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmludGVydHJ1c3Qubm5jcFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5pbnR1LnFib1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInFib1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuaW50dS5xZnhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJxZnhcIl19LFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIuY2F0YWxvZ2l0ZW0reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIuY29uY2VwdGl0ZW0reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIua25vd2xlZGdlaXRlbSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5uZXdzaXRlbSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5uZXdzbWVzc2FnZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5wYWNrYWdlaXRlbSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5wbGFubmluZ2l0ZW0reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmlwdW5wbHVnZ2VkLnJjcHJvZmlsZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInJjcHJvZmlsZVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuaXJlcG9zaXRvcnkucGFja2FnZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJpcnBcIl19LFwiYXBwbGljYXRpb24vdm5kLmlzLXhwclwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhwclwiXX0sXCJhcHBsaWNhdGlvbi92bmQuaXNhYy5mY3NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJmY3NcIl19LFwiYXBwbGljYXRpb24vdm5kLmphbVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImphbVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtZGlyZWN0b3J5LXNlcnZpY2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtanBuc3RvcmUtd2FrZXVwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LXBheW1lbnQtd2FrZXVwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LXJlZ2lzdHJhdGlvblwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1yZWdpc3RyYXRpb24td2FrZXVwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LXNldHN0b3JlLXdha2V1cFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC12ZXJpZmljYXRpb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtdmVyaWZpY2F0aW9uLXdha2V1cFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5qY3AuamF2YW1lLm1pZGxldC1ybXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJybXNcIl19LFwiYXBwbGljYXRpb24vdm5kLmppc3BcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJqaXNwXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5qb29zdC5qb2RhLWFyY2hpdmVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJqb2RhXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5qc2suaXNkbi1uZ25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQua2Fob290elwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImt0elwiLFwia3RyXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2FyYm9uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wia2FyYm9uXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2NoYXJ0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2hydFwiXX0sXCJhcHBsaWNhdGlvbi92bmQua2RlLmtmb3JtdWxhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wia2ZvXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2l2aW9cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJmbHdcIl19LFwiYXBwbGljYXRpb24vdm5kLmtkZS5rb250b3VyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wia29uXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5rZGUua3ByZXNlbnRlclwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImtwclwiLFwia3B0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5rZGUua3NwcmVhZFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImtzcFwiXX0sXCJhcHBsaWNhdGlvbi92bmQua2RlLmt3b3JkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wia3dkXCIsXCJrd3RcIl19LFwiYXBwbGljYXRpb24vdm5kLmtlbmFtZWFhcHBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJodGtlXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5raWRzcGlyYXRpb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJraWFcIl19LFwiYXBwbGljYXRpb24vdm5kLmtpbmFyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wia25lXCIsXCJrbnBcIl19LFwiYXBwbGljYXRpb24vdm5kLmtvYW5cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJza3BcIixcInNrZFwiLFwic2t0XCIsXCJza21cIl19LFwiYXBwbGljYXRpb24vdm5kLmtvZGFrLWRlc2NyaXB0b3JcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzc2VcIl19LFwiYXBwbGljYXRpb24vdm5kLmxhcy5sYXMranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQubGFzLmxhcyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJsYXN4bWxcIl19LFwiYXBwbGljYXRpb24vdm5kLmxpYmVydHktcmVxdWVzdCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubGxhbWFncmFwaGljcy5saWZlLWJhbGFuY2UuZGVza3RvcFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImxiZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQubGxhbWFncmFwaGljcy5saWZlLWJhbGFuY2UuZXhjaGFuZ2UreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibGJlXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy0xLTItM1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIjEyM1wiXX0sXCJhcHBsaWNhdGlvbi92bmQubG90dXMtYXBwcm9hY2hcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJhcHJcIl19LFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLWZyZWVsYW5jZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInByZVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubG90dXMtbm90ZXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJuc2ZcIl19LFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLW9yZ2FuaXplclwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm9yZ1wiXX0sXCJhcHBsaWNhdGlvbi92bmQubG90dXMtc2NyZWVuY2FtXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2NtXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy13b3JkcHJvXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibHdwXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tYWNwb3J0cy5wb3J0cGtnXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicG9ydHBrZ1wiXX0sXCJhcHBsaWNhdGlvbi92bmQubWFwYm94LXZlY3Rvci10aWxlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1hcmxpbi5kcm0uYWN0aW9udG9rZW4reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1hcmxpbi5kcm0uY29uZnRva2VuK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLmxpY2Vuc2UreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1hcmxpbi5kcm0ubWRjZlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tYXNvbitqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5tYXhtaW5kLm1heG1pbmQtZGJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubWNkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibWNkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tZWRjYWxjZGF0YVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1jMVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubWVkaWFzdGF0aW9uLmNka2V5XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2RrZXlcIl19LFwiYXBwbGljYXRpb24vdm5kLm1lcmlkaWFuLXNsaW5nc2hvdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tZmVyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibXdmXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tZm1wXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibWZtXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5taWNybytqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5taWNyb2dyYWZ4LmZsb1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImZsb1wiXX0sXCJhcHBsaWNhdGlvbi92bmQubWljcm9ncmFmeC5pZ3hcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJpZ3hcIl19LFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5wb3J0YWJsZS1leGVjdXRhYmxlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC53aW5kb3dzLnRodW1ibmFpbC1jYWNoZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5taWVsZStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5taWZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtaWZcIl19LFwiYXBwbGljYXRpb24vdm5kLm1pbmlzb2Z0LWhwMzAwMC1zYXZlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1pdHN1YmlzaGkubWlzdHktZ3VhcmQudHJ1c3R3ZWJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLmRhZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImRhZlwiXX0sXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLmRpc1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImRpc1wiXX0sXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLm1ia1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1ia1wiXX0sXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLm1xeVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1xeVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLm1zbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1zbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLnBsY1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInBsY1wiXX0sXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLnR4ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInR4ZlwiXX0sXCJhcHBsaWNhdGlvbi92bmQubW9waHVuLmFwcGxpY2F0aW9uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibXBuXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tb3BodW4uY2VydGlmaWNhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtcGNcIl19LFwiYXBwbGljYXRpb24vdm5kLm1vdG9yb2xhLmZsZXhzdWl0ZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUuYWRzaVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUuZmlzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1vdG9yb2xhLmZsZXhzdWl0ZS5nb3RhcFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUua21yXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1vdG9yb2xhLmZsZXhzdWl0ZS50dGNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLndlbVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5pcHJtXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1vemlsbGEueHVsK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJ4dWxcIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLTNtZmRvY3VtZW50XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1zLWFydGdhbHJ5XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY2lsXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1hc2ZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubXMtY2FiLWNvbXByZXNzZWRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjYWJcIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLWNvbG9yLmljY3Byb2ZpbGVcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wieGxzXCIsXCJ4bG1cIixcInhsYVwiLFwieGxjXCIsXCJ4bHRcIixcInhsd1wiXX0sXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYWRkaW4ubWFjcm9lbmFibGVkLjEyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wieGxhbVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvZW5hYmxlZC4xMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhsc2JcIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvZW5hYmxlZC4xMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhsc21cIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRlbXBsYXRlLm1hY3JvZW5hYmxlZC4xMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhsdG1cIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wiZW90XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImNobVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubXMtaW1zXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaW1zXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1scm1cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJscm1cIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmV4K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInRobXhcIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLW9wZW50eXBlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLm1zLW91dGxvb2tcIjp7XCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJtc2dcIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLXBhY2thZ2Uub2JmdXNjYXRlZC1vcGVudHlwZVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1zLXBraS5zZWNjYXRcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImNhdFwiXX0sXCJhcHBsaWNhdGlvbi92bmQubXMtcGtpLnN0bFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic3RsXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1wbGF5cmVhZHkuaW5pdGlhdG9yK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJwcHRcIixcInBwc1wiLFwicG90XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LmFkZGluLm1hY3JvZW5hYmxlZC4xMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInBwYW1cIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQucHJlc2VudGF0aW9uLm1hY3JvZW5hYmxlZC4xMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInBwdG1cIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQuc2xpZGUubWFjcm9lbmFibGVkLjEyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2xkbVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5zbGlkZXNob3cubWFjcm9lbmFibGVkLjEyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicHBzbVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJwb3RtXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1wcmludGRldmljZWNhcGFiaWxpdGllcyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubXMtcHJpbnRpbmcucHJpbnR0aWNrZXQreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIn0sXCJhcHBsaWNhdGlvbi92bmQubXMtcHJpbnRzY2hlbWF0aWNrZXQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1zLXByb2plY3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtcHBcIixcIm1wdFwiXX0sXCJhcHBsaWNhdGlvbi92bmQubXMtdG5lZlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLmRldmljZXBhaXJpbmdcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubXMtd2luZG93cy5ud3ByaW50aW5nLm9vYlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLnByaW50ZXJwYWlyaW5nXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm1zLXdpbmRvd3Mud3NkLm9vYlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tcy13bWRybS5saWMtY2hsZy1yZXFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubXMtd21kcm0ubGljLXJlc3BcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubXMtd21kcm0ubWV0ZXItY2hsZy1yZXFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubXMtd21kcm0ubWV0ZXItcmVzcFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tcy13b3JkLmRvY3VtZW50Lm1hY3JvZW5hYmxlZC4xMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImRvY21cIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLXdvcmQudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZG90bVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubXMtd29ya3NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ3cHNcIixcIndrc1wiLFwid2NtXCIsXCJ3ZGJcIl19LFwiYXBwbGljYXRpb24vdm5kLm1zLXdwbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIndwbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQubXMteHBzZG9jdW1lbnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcInhwc1wiXX0sXCJhcHBsaWNhdGlvbi92bmQubXNhLWRpc2staW1hZ2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubXNlcVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1zZXFcIl19LFwiYXBwbGljYXRpb24vdm5kLm1zaWduXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm11bHRpYWQuY3JlYXRvclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5tdWx0aWFkLmNyZWF0b3IuY2lmXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm11c2ljLW5pZmZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubXVzaWNpYW5cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtdXNcIl19LFwiYXBwbGljYXRpb24vdm5kLm11dmVlLnN0eWxlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibXN0eVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubXluZmNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ0YWdsZXRcIl19LFwiYXBwbGljYXRpb24vdm5kLm5jZC5jb250cm9sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5jZC5yZWZlcmVuY2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubmVhcnN0Lmluditqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5uZXJ2YW5hXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5ldGZweFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5uZXVyb2xhbmd1YWdlLm5sdVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm5sdVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubmludGVuZG8ubml0cm8ucm9tXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5pbnRlbmRvLnNuZXMucm9tXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5pdGZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJudGZcIixcIm5pdGZcIl19LFwiYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LWRpcmVjdG9yeVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm5uZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtc2VhbGVyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibm5zXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC13ZWJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJubndcIl19LFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmNhdGFsb2dzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmNvbm1sK3dieG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmNvbm1sK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5pcHR2LmNvbmZpZyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubm9raWEuaXNkcy1yYWRpby1wcmVzZXRzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmxhbmRtYXJrK3dieG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmxhbmRtYXJrK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5sYW5kbWFya2NvbGxlY3Rpb24reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5va2lhLm4tZ2FnZS5hYyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLmRhdGFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJuZ2RhdFwiXX0sXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLnN5bWJpYW4uaW5zdGFsbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm4tZ2FnZVwiXX0sXCJhcHBsaWNhdGlvbi92bmQubm9raWEubmNkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5va2lhLnBjZCt3YnhtbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5wY2QreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm5va2lhLnJhZGlvLXByZXNldFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInJwc3RcIl19LFwiYXBwbGljYXRpb24vdm5kLm5va2lhLnJhZGlvLXByZXNldHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJycHNzXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ub3ZhZGlnbS5lZG1cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJlZG1cIl19LFwiYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkeFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImVkeFwiXX0sXCJhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZXh0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZXh0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwuY29udGVudC1zaGFyZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwuZmlsZS10cmFuc2ZlclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwub2d3X3JlbW90ZS1hY2Nlc3NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubnR0LWxvY2FsLnNpcC10YV9yZW1vdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQubnR0LWxvY2FsLnNpcC10YV90Y3Bfc3RyZWFtXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5jaGFydFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm9kY1wiXX0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmNoYXJ0LXRlbXBsYXRlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wib3RjXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZGF0YWJhc2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJvZGJcIl19LFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wib2RmXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZm9ybXVsYS10ZW1wbGF0ZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm9kZnRcIl19LFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljc1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wib2RnXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3MtdGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJvdGdcIl19LFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm9kaVwiXX0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmltYWdlLXRlbXBsYXRlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wib3RpXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJvZHBcIl19LFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24tdGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJvdHBcIl19LFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wib2RzXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQtdGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJvdHNcIl19LFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJvZHRcIl19LFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LW1hc3RlclwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm9kbVwiXX0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtdGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJvdHRcIl19LFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LXdlYlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm90aFwiXX0sXCJhcHBsaWNhdGlvbi92bmQub2JuXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9jZitjYm9yXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9mdG4ubDEwbitqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNvbnRlbnRhY2Nlc3Nkb3dubG9hZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub2lwZi5jb250ZW50YWNjZXNzc3RyZWFtaW5nK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNzcGctaGV4YmluYXJ5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9pcGYuZGFlLnN2Zyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub2lwZi5kYWUueGh0bWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9pcGYubWlwcHZjb250cm9sbWVzc2FnZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub2lwZi5wYWUuZ2VtXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9pcGYuc3BkaXNjb3ZlcnkreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9pcGYuc3BkbGlzdCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub2lwZi51ZXByb2ZpbGUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9pcGYudXNlcnByb2ZpbGUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9scGMtc3VnYXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ4b1wiXX0sXCJhcHBsaWNhdGlvbi92bmQub21hLXNjd3MtY29uZmlnXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS1zY3dzLWh0dHAtcmVxdWVzdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEtc2N3cy1odHRwLXJlc3BvbnNlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5hc3NvY2lhdGVkLXByb2NlZHVyZS1wYXJhbWV0ZXIreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5kcm0tdHJpZ2dlcit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LmltZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0Lmx0a21cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0Lm5vdGlmaWNhdGlvbit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnByb3Zpc2lvbmluZ3RyaWdnZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnYm9vdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc2dkZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnZHVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNpbXBsZS1zeW1ib2wtY29udGFpbmVyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zbWFydGNhcmQtdHJpZ2dlcit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNwcm92K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc3RrbVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEuY2FiLWFkZHJlc3MtYm9vayt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1mZWF0dXJlLWhhbmRsZXIreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5jYWItcGNjK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEuY2FiLXN1YnMtaW52aXRlK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEuY2FiLXVzZXItcHJlZnMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5kY2RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmRjZGNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmRkMit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkZDJcIl19LFwiYXBwbGljYXRpb24vdm5kLm9tYS5kcm0ucmlzZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLmdyb3VwLXVzYWdlLWxpc3QreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5sd20ybStqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEubHdtMm0rdGx2XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5wYWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2MuZGV0YWlsZWQtcHJvZ3Jlc3MtcmVwb3J0K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEucG9jLmZpbmFsLXJlcG9ydCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLnBvYy5ncm91cHMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2MuaW52b2NhdGlvbi1kZXNjcmlwdG9yK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEucG9jLm9wdGltaXplZC1wcm9ncmVzcy1yZXBvcnQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5wdXNoXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9tYS5zY2lkbS5tZXNzYWdlcyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hLnhjYXAtZGlyZWN0b3J5K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWFkcy1lbWFpbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hZHMtZmlsZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub21hZHMtZm9sZGVyK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbWFsb2Mtc3VwbC1pbml0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9uZXBhZ2VyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9uZXBhZ2VydGFtcFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlcnRhbXhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub25lcGFnZXJ0YXRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub25lcGFnZXJ0YXRwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9uZXBhZ2VydGF0eFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVuYmxveC5nYW1lK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVuYmxveC5nYW1lLWJpbmFyeVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVuZXllLm9lYlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVub2ZmaWNlb3JnLmV4dGVuc2lvblwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wib3h0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVuc3RyZWV0bWFwLmRhdGEreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b214bWxwcm9wZXJ0aWVzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1jb2xvcnMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtZGF0YSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1sYXlvdXQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtc3R5bGUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLmNvbW1lbnRhdXRob3JzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5jb21tZW50cyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuaGFuZG91dG1hc3Rlcit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwubm90ZXNtYXN0ZXIreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLm5vdGVzc2xpZGUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wicHB0eFwiXX0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uLm1haW4reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNwcm9wcyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzbGR4XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVsYXlvdXQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlbWFzdGVyK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXNob3dcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJwcHN4XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXNob3cubWFpbit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGV1cGRhdGVpbmZvK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50YWJsZXN0eWxlcyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGFncyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJwb3R4XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50ZW1wbGF0ZS5tYWluK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC52aWV3cHJvcHMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY2NoYWluK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxsaW5rK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Y2FjaGVkZWZpbml0aW9uK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Y2FjaGVyZWNvcmRzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90dGFibGUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnl0YWJsZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbmhlYWRlcnMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25sb2creG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkc3RyaW5ncyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wieGxzeFwiXX0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0bWV0YWRhdGEreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlc2luZ2xlY2VsbHMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ4bHR4XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlcm5hbWVzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlZGVwZW5kZW5jaWVzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lb3ZlcnJpZGUreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbGRyYXdpbmdcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5jb21tZW50cyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wiZG9jeFwiXX0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5nbG9zc2FyeSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5tYWluK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmVuZG5vdGVzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmZvbnR0YWJsZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5mb290ZXIreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZm9vdG5vdGVzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLm51bWJlcmluZyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5zZXR0aW5ncyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5zdHlsZXMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkb3R4XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlLm1haW4reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwud2Vic2V0dGluZ3MreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmRpZ2l0YWwtc2lnbmF0dXJlLXhtbHNpZ25hdHVyZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vcmFjbGUucmVzb3VyY2UranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi92bmQub3JhbmdlLmluZGF0YVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5vc2EubmV0ZGVwbG95XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9zZ2VvLm1hcGd1aWRlLnBhY2thZ2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtZ3BcIl19LFwiYXBwbGljYXRpb24vdm5kLm9zZ2kuYnVuZGxlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLm9zZ2kuZHBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkcFwiXX0sXCJhcHBsaWNhdGlvbi92bmQub3NnaS5zdWJzeXN0ZW1cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJlc2FcIl19LFwiYXBwbGljYXRpb24vdm5kLm90cHMuY3Qta2lwK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5veGxpLmNvdW50Z3JhcGhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucGFnZXJkdXR5K2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLnBhbG1cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJwZGJcIixcInBxYVwiLFwib3ByY1wiXX0sXCJhcHBsaWNhdGlvbi92bmQucGFub3BseVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5wYW9zK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5wYW9zLnhtbFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCJ9LFwiYXBwbGljYXRpb24vdm5kLnBhdGVudGRpdmVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucGF3YWFmaWxlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicGF3XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5wY29zXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnBnLmZvcm1hdFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInN0clwiXX0sXCJhcHBsaWNhdGlvbi92bmQucGcub3Nhc2xpXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZWk2XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5waWFjY2Vzcy5hcHBsaWNhdGlvbi1saWNlbmNlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnBpY3NlbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImVmaWZcIl19LFwiYXBwbGljYXRpb24vdm5kLnBtaS53aWRnZXRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ3Z1wiXX0sXCJhcHBsaWNhdGlvbi92bmQucG9jLmdyb3VwLWFkdmVydGlzZW1lbnQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnBvY2tldGxlYXJuXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicGxmXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI2XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicGJkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI2LXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyN1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI3LXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNzVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNzUtc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5wcmVtaW5ldFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5wcmV2aWV3c3lzdGVtcy5ib3hcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJib3hcIl19LFwiYXBwbGljYXRpb24vdm5kLnByb3RldXMubWFnYXppbmVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtZ3pcIl19LFwiYXBwbGljYXRpb24vdm5kLnB1Ymxpc2hhcmUtZGVsdGEtdHJlZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInFwc1wiXX0sXCJhcHBsaWNhdGlvbi92bmQucHZpLnB0aWQxXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicHRpZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQucHdnLW11bHRpcGxleGVkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnB3Zy14aHRtbC1wcmludCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucXVhbGNvbW0uYnJldy1hcHAtcmVzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnF1YXJhbnRhaW5lbmV0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnF1YXJrLnF1YXJreHByZXNzXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicXhkXCIsXCJxeHRcIixcInF3ZFwiLFwicXd0XCIsXCJxeGxcIixcInF4YlwiXX0sXCJhcHBsaWNhdGlvbi92bmQucXVvYmplY3QtcXVveGRvY3VtZW50XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubW9tbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1jb25mK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQtY29ubit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0LWRpYWxvZyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0LXN0cmVhbSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWNvbmYreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2creG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctYmFzZSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWRpYWxvZy1mYXgtZGV0ZWN0K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWZheC1zZW5kcmVjdit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWRpYWxvZy1ncm91cCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWRpYWxvZy1zcGVlY2greG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctdHJhbnNmb3JtK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5yYWluc3Rvci5kYXRhXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnJhcGlkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnJhclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5yZWFsdm5jLmJlZFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImJlZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQucmVjb3JkYXJlLm11c2ljeG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibXhsXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5yZWNvcmRhcmUubXVzaWN4bWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibXVzaWN4bWxcIl19LFwiYXBwbGljYXRpb24vdm5kLnJlbmxlYXJuLnJscHJpbnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQucmVzdGZ1bCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC5yaWcuY3J5cHRvbm90ZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImNyeXB0b25vdGVcIl19LFwiYXBwbGljYXRpb24vdm5kLnJpbS5jb2RcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImNvZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJybVwiXX0sXCJhcHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhLXZiclwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicm12YlwiXX0sXCJhcHBsaWNhdGlvbi92bmQucm91dGU2Ni5saW5rNjYreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibGluazY2XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5ycy0yNzR4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnJ1Y2t1cy5kb3dubG9hZFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zM3Ntc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zYWlsaW5ndHJhY2tlci50cmFja1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInN0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zYm0uY2lkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnNibS5taWQyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnNjcmlidXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLjNkZlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuY3NmXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5kb2NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLmVtbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQubWh0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5uZXRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLnBwdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQudGlmZlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQueGxzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLmh0bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwucGRmXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnNlZW1haWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzZWVcIl19LFwiYXBwbGljYXRpb24vdm5kLnNlbWFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzZW1hXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zZW1kXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2VtZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuc2VtZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNlbWZcIl19LFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm1kYXRhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaWZtXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5mb3JtdGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJpdHBcIl19LFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmludGVyY2hhbmdlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaWlmXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5wYWNrYWdlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaXBrXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zaWdyb2suc2Vzc2lvblwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zaW10ZWNoLW1pbmRtYXBwZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ0d2RcIixcInR3ZHNcIl19LFwiYXBwbGljYXRpb24vdm5kLnNpcmVuK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLnNtYWZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtbWZcIl19LFwiYXBwbGljYXRpb24vdm5kLnNtYXJ0Lm5vdGVib29rXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnNtYXJ0LnRlYWNoZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ0ZWFjaGVyXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zb2Z0d2FyZTYwMi5maWxsZXIuZm9ybSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuc29mdHdhcmU2MDIuZmlsbGVyLmZvcm0teG1sLXppcFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zb2xlbnQuc2RrbSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzZGttXCIsXCJzZGtkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zcG90ZmlyZS5keHBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkeHBcIl19LFwiYXBwbGljYXRpb24vdm5kLnNwb3RmaXJlLnNmc1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNmc1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuc3FsaXRlM1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zc3MtY29kXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnNzcy1kdGZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuc3NzLW50ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uY2FsY1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic2RjXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uZHJhd1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic2RhXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uaW1wcmVzc1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic2RkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ubWF0aFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic21mXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzZHdcIixcInZvclwiXX0sXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLndyaXRlci1nbG9iYWxcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInNnbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuc3RlcG1hbmlhLnBhY2thZ2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzbXppcFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuc3RlcG1hbmlhLnN0ZXBjaGFydFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNtXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zdHJlZXQtc3RyZWFtXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnN1bi53YWRsK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJ3YWRsXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmNhbGNcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInN4Y1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjLnRlbXBsYXRlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzdGNcIl19LFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuZHJhd1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic3hkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmRyYXcudGVtcGxhdGVcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInN0ZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzeGlcIl19LFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuaW1wcmVzcy50ZW1wbGF0ZVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic3RpXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLm1hdGhcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInN4bVwiXX0sXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXJcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInN4d1wiXX0sXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXIuZ2xvYmFsXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzeGdcIl19LFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwud3JpdGVyLnRlbXBsYXRlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzdHdcIl19LFwiYXBwbGljYXRpb24vdm5kLnN1cy1jYWxlbmRhclwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInN1c1wiLFwic3VzcFwiXX0sXCJhcHBsaWNhdGlvbi92bmQuc3ZkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic3ZkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zd2lmdHZpZXctaWNzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnN5bWJpYW4uaW5zdGFsbFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic2lzXCIsXCJzaXN4XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wieHNtXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0rd2J4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJiZG1cIl19LFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ4ZG1cIl19LFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbS5ub3RpZmljYXRpb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtZGRmK3dieG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbWRkZit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtdG5kcyt3YnhtbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG10bmRzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZHMubm90aWZpY2F0aW9uXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnRhYmxlc2NoZW1hK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdm5kLnRhby5pbnRlbnQtbW9kdWxlLWFyY2hpdmVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ0YW9cIl19LFwiYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInBjYXBcIixcImNhcFwiLFwiZG1wXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC50bWQubWVkaWFmbGV4LmFwaSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQudG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnRtb2JpbGUtbGl2ZXR2XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widG1vXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC50cmkub25lc291cmNlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnRyaWQudHB0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widHB0XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC50cmlzY2FwZS5teHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJteHNcIl19LFwiYXBwbGljYXRpb24vdm5kLnRydWVhcHBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ0cmFcIl19LFwiYXBwbGljYXRpb24vdm5kLnRydWVkb2NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQudWJpc29mdC53ZWJwbGF5ZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQudWZkbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInVmZFwiLFwidWZkbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQudWlxLnRoZW1lXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widXR6XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC51bWFqaW5cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ1bWpcIl19LFwiYXBwbGljYXRpb24vdm5kLnVuaXR5XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widW5pdHl3ZWJcIl19LFwiYXBwbGljYXRpb24vdm5kLnVvbWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widW9tbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5hbGVydFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmFsZXJ0LXdieG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuYmVhcmVyLWNob2ljZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmJlYXJlci1jaG9pY2Utd2J4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jYWNoZW9wXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuY2FjaGVvcC13YnhtbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmNoYW5uZWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jaGFubmVsLXdieG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQubGlzdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0Lmxpc3Qtd2J4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0Y21kXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQubGlzdGNtZC13YnhtbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LnNpZ25hbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC51cmktbWFwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnZhbHZlLnNvdXJjZS5tYXRlcmlhbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC52Y3hcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ2Y3hcIl19LFwiYXBwbGljYXRpb24vdm5kLnZkLXN0dWR5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnZlY3RvcndvcmtzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnZlbCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC52ZXJpbWF0cml4LnZjYXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQudmlkc29mdC52aWRjb25mZXJlbmNlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnZpc2lvXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widnNkXCIsXCJ2c3RcIixcInZzc1wiLFwidnN3XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC52aXNpb25hcnlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ2aXNcIl19LFwiYXBwbGljYXRpb24vdm5kLnZpdmlkZW5jZS5zY3JpcHRmaWxlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnZzZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInZzZlwiXX0sXCJhcHBsaWNhdGlvbi92bmQud2FwLnNpY1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC53YXAuc2xjXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLndhcC53YnhtbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIndieG1sXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC53YXAud21sY1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIndtbGNcIl19LFwiYXBwbGljYXRpb24vdm5kLndhcC53bWxzY3JpcHRjXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wid21sc2NcIl19LFwiYXBwbGljYXRpb24vdm5kLndlYnR1cmJvXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wid3RiXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC53ZmEucDJwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLndmYS53c2NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQud2luZG93cy5kZXZpY2VwYWlyaW5nXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLndtY1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC53bWYuYm9vdHN0cmFwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLndvbGZyYW0ubWF0aGVtYXRpY2FcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5tYXRoZW1hdGljYS5wYWNrYWdlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLndvbGZyYW0ucGxheWVyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibmJwXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC53b3JkcGVyZmVjdFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIndwZFwiXX0sXCJhcHBsaWNhdGlvbi92bmQud3FkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wid3FkXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC53cnEtaHAzMDAwLWxhYmVsbGVkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnd0LnN0ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInN0ZlwiXX0sXCJhcHBsaWNhdGlvbi92bmQud3YuY3NwK3dieG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnd2LmNzcCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQud3Yuc3NwK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC54YWNtbCtqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3ZuZC54YXJhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wieGFyXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC54ZmRsXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wieGZkbFwiXX0sXCJhcHBsaWNhdGlvbi92bmQueGZkbC53ZWJmb3JtXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnhtaSt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQueG1waWUuY3BrZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC54bXBpZS5kcGtnXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnhtcGllLnBsYW5cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQueG1waWUucHBrZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC54bXBpZS54bGltXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi1kaWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJodmRcIl19LFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi1zY3JpcHRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJodnNcIl19LFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi12b2ljZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImh2cFwiXX0sXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLm9wZW5zY29yZWZvcm1hdFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm9zZlwiXX0sXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLm9wZW5zY29yZWZvcm1hdC5vc2ZwdmcreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wib3NmcHZnXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEucmVtb3RlLXNldHVwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5zbWFmLWF1ZGlvXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2FmXCJdfSxcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuc21hZi1waHJhc2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzcGZcIl19LFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS50aHJvdWdoLW5nblwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEudHVubmVsLXVkcGVuY2FwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vdm5kLnlhb3dlbWVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQueWVsbG93cml2ZXItY3VzdG9tLW1lbnVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjbXBcIl19LFwiYXBwbGljYXRpb24vdm5kLnlvdXR1YmUueXRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi92bmQuenVsXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiemlyXCIsXCJ6aXJ6XCJdfSxcImFwcGxpY2F0aW9uL3ZuZC56emF6ei5kZWNrK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInphelwiXX0sXCJhcHBsaWNhdGlvbi92b2ljZXhtbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ2eG1sXCJdfSxcImFwcGxpY2F0aW9uL3ZvdWNoZXItY21zK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24vdnEtcnRjcHhyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vd2FzbVwiOntcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wid2FzbVwiXX0sXCJhcHBsaWNhdGlvbi93YXRjaGVyaW5mbyt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi93ZWJwdXNoLW9wdGlvbnMranNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi93aG9pc3BwLXF1ZXJ5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vd2hvaXNwcC1yZXNwb25zZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3dpZGdldFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIndndFwiXX0sXCJhcHBsaWNhdGlvbi93aW5obHBcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImhscFwiXX0sXCJhcHBsaWNhdGlvbi93aXRhXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24vd29yZHBlcmZlY3Q1LjFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi93c2RsK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIndzZGxcIl19LFwiYXBwbGljYXRpb24vd3Nwb2xpY3kreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wid3Nwb2xpY3lcIl19LFwiYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIjd6XCJdfSxcImFwcGxpY2F0aW9uL3gtYWJpd29yZFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiYWJ3XCJdfSxcImFwcGxpY2F0aW9uL3gtYWNlLWNvbXByZXNzZWRcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImFjZVwiXX0sXCJhcHBsaWNhdGlvbi94LWFtZlwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCJ9LFwiYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2VcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImRtZ1wiXX0sXCJhcHBsaWNhdGlvbi94LWFyalwiOntcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImFyalwiXX0sXCJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJhYWJcIixcIngzMlwiLFwidTMyXCIsXCJ2b3hcIl19LFwiYXBwbGljYXRpb24veC1hdXRob3J3YXJlLW1hcFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiYWFtXCJdfSxcImFwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1zZWdcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImFhc1wiXX0sXCJhcHBsaWNhdGlvbi94LWJjcGlvXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJiY3Bpb1wiXX0sXCJhcHBsaWNhdGlvbi94LWJkb2NcIjp7XCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJiZG9jXCJdfSxcImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widG9ycmVudFwiXX0sXCJhcHBsaWNhdGlvbi94LWJsb3JiXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJibGJcIixcImJsb3JiXCJdfSxcImFwcGxpY2F0aW9uL3gtYnppcFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJielwiXX0sXCJhcHBsaWNhdGlvbi94LWJ6aXAyXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImJ6MlwiLFwiYm96XCJdfSxcImFwcGxpY2F0aW9uL3gtY2JyXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJjYnJcIixcImNiYVwiLFwiY2J0XCIsXCJjYnpcIixcImNiN1wiXX0sXCJhcHBsaWNhdGlvbi94LWNkbGlua1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widmNkXCJdfSxcImFwcGxpY2F0aW9uL3gtY2ZzLWNvbXByZXNzZWRcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImNmc1wiXX0sXCJhcHBsaWNhdGlvbi94LWNoYXRcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImNoYXRcIl19LFwiYXBwbGljYXRpb24veC1jaGVzcy1wZ25cIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInBnblwiXX0sXCJhcHBsaWNhdGlvbi94LWNocm9tZS1leHRlbnNpb25cIjp7XCJleHRlbnNpb25zXCI6W1wiY3J4XCJdfSxcImFwcGxpY2F0aW9uL3gtY29jb2FcIjp7XCJzb3VyY2VcIjpcIm5naW54XCIsXCJleHRlbnNpb25zXCI6W1wiY2NvXCJdfSxcImFwcGxpY2F0aW9uL3gtY29tcHJlc3NcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwifSxcImFwcGxpY2F0aW9uL3gtY29uZmVyZW5jZVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wibnNjXCJdfSxcImFwcGxpY2F0aW9uL3gtY3Bpb1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiY3Bpb1wiXX0sXCJhcHBsaWNhdGlvbi94LWNzaFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiY3NoXCJdfSxcImFwcGxpY2F0aW9uL3gtZGViXCI6e1wiY29tcHJlc3NpYmxlXCI6ZmFsc2V9LFwiYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiZGViXCIsXCJ1ZGViXCJdfSxcImFwcGxpY2F0aW9uL3gtZGdjLWNvbXByZXNzZWRcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImRnY1wiXX0sXCJhcHBsaWNhdGlvbi94LWRpcmVjdG9yXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJkaXJcIixcImRjclwiLFwiZHhyXCIsXCJjc3RcIixcImNjdFwiLFwiY3h0XCIsXCJ3M2RcIixcImZnZFwiLFwic3dhXCJdfSxcImFwcGxpY2F0aW9uL3gtZG9vbVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wid2FkXCJdfSxcImFwcGxpY2F0aW9uL3gtZHRibmN4K3htbFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wibmN4XCJdfSxcImFwcGxpY2F0aW9uL3gtZHRib29rK3htbFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiZHRiXCJdfSxcImFwcGxpY2F0aW9uL3gtZHRicmVzb3VyY2UreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJyZXNcIl19LFwiYXBwbGljYXRpb24veC1kdmlcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wiZHZpXCJdfSxcImFwcGxpY2F0aW9uL3gtZW52b3lcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImV2eVwiXX0sXCJhcHBsaWNhdGlvbi94LWV2YVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiZXZhXCJdfSxcImFwcGxpY2F0aW9uL3gtZm9udC1iZGZcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImJkZlwiXX0sXCJhcHBsaWNhdGlvbi94LWZvbnQtZG9zXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIn0sXCJhcHBsaWNhdGlvbi94LWZvbnQtZnJhbWVtYWtlclwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCJ9LFwiYXBwbGljYXRpb24veC1mb250LWdob3N0c2NyaXB0XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJnc2ZcIl19LFwiYXBwbGljYXRpb24veC1mb250LWxpYmdyeFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCJ9LFwiYXBwbGljYXRpb24veC1mb250LWxpbnV4LXBzZlwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicHNmXCJdfSxcImFwcGxpY2F0aW9uL3gtZm9udC1wY2ZcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInBjZlwiXX0sXCJhcHBsaWNhdGlvbi94LWZvbnQtc25mXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzbmZcIl19LFwiYXBwbGljYXRpb24veC1mb250LXNwZWVkb1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCJ9LFwiYXBwbGljYXRpb24veC1mb250LXN1bm9zLW5ld3NcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwifSxcImFwcGxpY2F0aW9uL3gtZm9udC10eXBlMVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicGZhXCIsXCJwZmJcIixcInBmbVwiLFwiYWZtXCJdfSxcImFwcGxpY2F0aW9uL3gtZm9udC12Zm9udFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCJ9LFwiYXBwbGljYXRpb24veC1mcmVlYXJjXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJhcmNcIl19LFwiYXBwbGljYXRpb24veC1mdXR1cmVzcGxhc2hcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInNwbFwiXX0sXCJhcHBsaWNhdGlvbi94LWdjYS1jb21wcmVzc2VkXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJnY2FcIl19LFwiYXBwbGljYXRpb24veC1nbHVseFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widWx4XCJdfSxcImFwcGxpY2F0aW9uL3gtZ251bWVyaWNcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImdudW1lcmljXCJdfSxcImFwcGxpY2F0aW9uL3gtZ3JhbXBzLXhtbFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiZ3JhbXBzXCJdfSxcImFwcGxpY2F0aW9uL3gtZ3RhclwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiZ3RhclwiXX0sXCJhcHBsaWNhdGlvbi94LWd6aXBcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwifSxcImFwcGxpY2F0aW9uL3gtaGRmXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJoZGZcIl19LFwiYXBwbGljYXRpb24veC1odHRwZC1waHBcIjp7XCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInBocFwiXX0sXCJhcHBsaWNhdGlvbi94LWluc3RhbGwtaW5zdHJ1Y3Rpb25zXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJpbnN0YWxsXCJdfSxcImFwcGxpY2F0aW9uL3gtaXNvOTY2MC1pbWFnZVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiaXNvXCJdfSxcImFwcGxpY2F0aW9uL3gtamF2YS1hcmNoaXZlLWRpZmZcIjp7XCJzb3VyY2VcIjpcIm5naW54XCIsXCJleHRlbnNpb25zXCI6W1wiamFyZGlmZlwiXX0sXCJhcHBsaWNhdGlvbi94LWphdmEtam5scC1maWxlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImpubHBcIl19LFwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0XCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi94LWxhdGV4XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImxhdGV4XCJdfSxcImFwcGxpY2F0aW9uL3gtbHVhLWJ5dGVjb2RlXCI6e1wiZXh0ZW5zaW9uc1wiOltcImx1YWNcIl19LFwiYXBwbGljYXRpb24veC1semgtY29tcHJlc3NlZFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wibHpoXCIsXCJsaGFcIl19LFwiYXBwbGljYXRpb24veC1tYWtlc2VsZlwiOntcInNvdXJjZVwiOlwibmdpbnhcIixcImV4dGVuc2lvbnNcIjpbXCJydW5cIl19LFwiYXBwbGljYXRpb24veC1taWVcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1pZVwiXX0sXCJhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2tcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInByY1wiLFwibW9iaVwiXX0sXCJhcHBsaWNhdGlvbi94LW1wZWd1cmxcIjp7XCJjb21wcmVzc2libGVcIjpmYWxzZX0sXCJhcHBsaWNhdGlvbi94LW1zLWFwcGxpY2F0aW9uXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJhcHBsaWNhdGlvblwiXX0sXCJhcHBsaWNhdGlvbi94LW1zLXNob3J0Y3V0XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJsbmtcIl19LFwiYXBwbGljYXRpb24veC1tcy13bWRcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIndtZFwiXX0sXCJhcHBsaWNhdGlvbi94LW1zLXdtelwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wid216XCJdfSxcImFwcGxpY2F0aW9uL3gtbXMteGJhcFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wieGJhcFwiXX0sXCJhcHBsaWNhdGlvbi94LW1zYWNjZXNzXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJtZGJcIl19LFwiYXBwbGljYXRpb24veC1tc2JpbmRlclwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wib2JkXCJdfSxcImFwcGxpY2F0aW9uL3gtbXNjYXJkZmlsZVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiY3JkXCJdfSxcImFwcGxpY2F0aW9uL3gtbXNjbGlwXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJjbHBcIl19LFwiYXBwbGljYXRpb24veC1tc2Rvcy1wcm9ncmFtXCI6e1wiZXh0ZW5zaW9uc1wiOltcImV4ZVwiXX0sXCJhcHBsaWNhdGlvbi94LW1zZG93bmxvYWRcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImV4ZVwiLFwiZGxsXCIsXCJjb21cIixcImJhdFwiLFwibXNpXCJdfSxcImFwcGxpY2F0aW9uL3gtbXNtZWRpYXZpZXdcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIm12YlwiLFwibTEzXCIsXCJtMTRcIl19LFwiYXBwbGljYXRpb24veC1tc21ldGFmaWxlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ3bWZcIixcIndtelwiLFwiZW1mXCIsXCJlbXpcIl19LFwiYXBwbGljYXRpb24veC1tc21vbmV5XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJtbnlcIl19LFwiYXBwbGljYXRpb24veC1tc3B1Ymxpc2hlclwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicHViXCJdfSxcImFwcGxpY2F0aW9uL3gtbXNzY2hlZHVsZVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic2NkXCJdfSxcImFwcGxpY2F0aW9uL3gtbXN0ZXJtaW5hbFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widHJtXCJdfSxcImFwcGxpY2F0aW9uL3gtbXN3cml0ZVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wid3JpXCJdfSxcImFwcGxpY2F0aW9uL3gtbmV0Y2RmXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJuY1wiLFwiY2RmXCJdfSxcImFwcGxpY2F0aW9uL3gtbnMtcHJveHktYXV0b2NvbmZpZ1wiOntcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wicGFjXCJdfSxcImFwcGxpY2F0aW9uL3gtbnpiXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJuemJcIl19LFwiYXBwbGljYXRpb24veC1wZXJsXCI6e1wic291cmNlXCI6XCJuZ2lueFwiLFwiZXh0ZW5zaW9uc1wiOltcInBsXCIsXCJwbVwiXX0sXCJhcHBsaWNhdGlvbi94LXBpbG90XCI6e1wic291cmNlXCI6XCJuZ2lueFwiLFwiZXh0ZW5zaW9uc1wiOltcInByY1wiLFwicGRiXCJdfSxcImFwcGxpY2F0aW9uL3gtcGtjczEyXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcInAxMlwiLFwicGZ4XCJdfSxcImFwcGxpY2F0aW9uL3gtcGtjczctY2VydGlmaWNhdGVzXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJwN2JcIixcInNwY1wiXX0sXCJhcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRyZXFyZXNwXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJwN3JcIl19LFwiYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJyYXJcIl19LFwiYXBwbGljYXRpb24veC1yZWRoYXQtcGFja2FnZS1tYW5hZ2VyXCI6e1wic291cmNlXCI6XCJuZ2lueFwiLFwiZXh0ZW5zaW9uc1wiOltcInJwbVwiXX0sXCJhcHBsaWNhdGlvbi94LXJlc2VhcmNoLWluZm8tc3lzdGVtc1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicmlzXCJdfSxcImFwcGxpY2F0aW9uL3gtc2VhXCI6e1wic291cmNlXCI6XCJuZ2lueFwiLFwiZXh0ZW5zaW9uc1wiOltcInNlYVwiXX0sXCJhcHBsaWNhdGlvbi94LXNoXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wic2hcIl19LFwiYXBwbGljYXRpb24veC1zaGFyXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzaGFyXCJdfSxcImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcInN3ZlwiXX0sXCJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0LWFwcFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wieGFwXCJdfSxcImFwcGxpY2F0aW9uL3gtc3FsXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzcWxcIl19LFwiYXBwbGljYXRpb24veC1zdHVmZml0XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcInNpdFwiXX0sXCJhcHBsaWNhdGlvbi94LXN0dWZmaXR4XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzaXR4XCJdfSxcImFwcGxpY2F0aW9uL3gtc3VicmlwXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzcnRcIl19LFwiYXBwbGljYXRpb24veC1zdjRjcGlvXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzdjRjcGlvXCJdfSxcImFwcGxpY2F0aW9uL3gtc3Y0Y3JjXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzdjRjcmNcIl19LFwiYXBwbGljYXRpb24veC10M3ZtLWltYWdlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ0M1wiXX0sXCJhcHBsaWNhdGlvbi94LXRhZHNcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImdhbVwiXX0sXCJhcHBsaWNhdGlvbi94LXRhclwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInRhclwiXX0sXCJhcHBsaWNhdGlvbi94LXRjbFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widGNsXCIsXCJ0a1wiXX0sXCJhcHBsaWNhdGlvbi94LXRleFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widGV4XCJdfSxcImFwcGxpY2F0aW9uL3gtdGV4LXRmbVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widGZtXCJdfSxcImFwcGxpY2F0aW9uL3gtdGV4aW5mb1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widGV4aW5mb1wiLFwidGV4aVwiXX0sXCJhcHBsaWNhdGlvbi94LXRnaWZcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIm9ialwiXX0sXCJhcHBsaWNhdGlvbi94LXVzdGFyXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ1c3RhclwiXX0sXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtaGRkXCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJoZGRcIl19LFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LW92YVwiOntcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wib3ZhXCJdfSxcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1vdmZcIjp7XCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcIm92ZlwiXX0sXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdmJveFwiOntcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1widmJveFwiXX0sXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdmJveC1leHRwYWNrXCI6e1wiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1widmJveC1leHRwYWNrXCJdfSxcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12ZGlcIjp7XCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInZkaVwiXX0sXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdmhkXCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJ2aGRcIl19LFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LXZtZGtcIjp7XCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInZtZGtcIl19LFwiYXBwbGljYXRpb24veC13YWlzLXNvdXJjZVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wic3JjXCJdfSxcImFwcGxpY2F0aW9uL3gtd2ViLWFwcC1tYW5pZmVzdCtqc29uXCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJ3ZWJhcHBcIl19LFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcImFwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJkZXJcIixcImNydFwiLFwicGVtXCJdfSxcImFwcGxpY2F0aW9uL3gteGZpZ1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiZmlnXCJdfSxcImFwcGxpY2F0aW9uL3gteGxpZmYreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ4bGZcIl19LFwiYXBwbGljYXRpb24veC14cGluc3RhbGxcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wieHBpXCJdfSxcImFwcGxpY2F0aW9uL3gteHpcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInh6XCJdfSxcImFwcGxpY2F0aW9uL3gtem1hY2hpbmVcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInoxXCIsXCJ6MlwiLFwiejNcIixcIno0XCIsXCJ6NVwiLFwiejZcIixcIno3XCIsXCJ6OFwiXX0sXCJhcHBsaWNhdGlvbi94NDAwLWJwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24veGFjbWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24veGFtbCt4bWxcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInhhbWxcIl19LFwiYXBwbGljYXRpb24veGNhcC1hdHQreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24veGNhcC1jYXBzK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3hjYXAtZGlmZit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ4ZGZcIl19LFwiYXBwbGljYXRpb24veGNhcC1lbCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi94Y2FwLWVycm9yK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3hjYXAtbnMreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24veGNvbi1jb25mZXJlbmNlLWluZm8reG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24veGNvbi1jb25mZXJlbmNlLWluZm8tZGlmZit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhcHBsaWNhdGlvbi94ZW5jK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhlbmNcIl19LFwiYXBwbGljYXRpb24veGh0bWwreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInhodG1sXCIsXCJ4aHRcIl19LFwiYXBwbGljYXRpb24veGh0bWwtdm9pY2UreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIn0sXCJhcHBsaWNhdGlvbi94bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wieG1sXCIsXCJ4c2xcIixcInhzZFwiLFwicm5nXCJdfSxcImFwcGxpY2F0aW9uL3htbC1kdGRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wiZHRkXCJdfSxcImFwcGxpY2F0aW9uL3htbC1leHRlcm5hbC1wYXJzZWQtZW50aXR5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24veG1sLXBhdGNoK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3htcHAreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXBwbGljYXRpb24veG9wK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJ4b3BcIl19LFwiYXBwbGljYXRpb24veHByb2MreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ4cGxcIl19LFwiYXBwbGljYXRpb24veHNsdCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ4c2x0XCJdfSxcImFwcGxpY2F0aW9uL3hzcGYreG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ4c3BmXCJdfSxcImFwcGxpY2F0aW9uL3h2K3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm14bWxcIixcInhodm1sXCIsXCJ4dm1sXCIsXCJ4dm1cIl19LFwiYXBwbGljYXRpb24veWFuZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInlhbmdcIl19LFwiYXBwbGljYXRpb24veWFuZy1kYXRhK2pzb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwiYXBwbGljYXRpb24veWFuZy1kYXRhK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3lhbmctcGF0Y2granNvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJhcHBsaWNhdGlvbi95YW5nLXBhdGNoK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImFwcGxpY2F0aW9uL3lpbit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ5aW5cIl19LFwiYXBwbGljYXRpb24vemlwXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJ6aXBcIl19LFwiYXBwbGljYXRpb24vemxpYlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvLzFkLWludGVybGVhdmVkLXBhcml0eWZlY1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvLzMya2FkcGNtXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vM2dwcFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wiM2dwcFwiXX0sXCJhdWRpby8zZ3BwMlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2FjM1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2FkcGNtXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJhZHBcIl19LFwiYXVkaW8vYW1yXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vYW1yLXdiXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vYW1yLXdiK1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2FwdHhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9hc2NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9hdHJhYy1hZHZhbmNlZC1sb3NzbGVzc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2F0cmFjLXhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9hdHJhYzNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9iYXNpY1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wiYXVcIixcInNuZFwiXX0sXCJhdWRpby9idjE2XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vYnYzMlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2NsZWFybW9kZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2NuXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZGF0MTJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9kbHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9kc3ItZXMyMDExMDhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9kc3ItZXMyMDIwNTBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9kc3ItZXMyMDIyMTFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9kc3ItZXMyMDIyMTJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9kdlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2R2aTRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9lYWMzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZW5jYXBydHBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9ldnJjXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZXZyYy1xY3BcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9ldnJjMFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2V2cmMxXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZXZyY2JcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9ldnJjYjBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9ldnJjYjFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9ldnJjbndcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9ldnJjbncwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZXZyY253MVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2V2cmN3YlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2V2cmN3YjBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9ldnJjd2IxXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZXZzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZndkcmVkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZzcxMS0wXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZzcxOVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2c3MjJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9nNzIyMVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2c3MjNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9nNzI2LTE2XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZzcyNi0yNFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2c3MjYtMzJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9nNzI2LTQwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZzcyOFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2c3MjlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9nNzI5MVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2c3MjlkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZzcyOWVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9nc21cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9nc20tZWZyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vZ3NtLWhyLTA4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vaWxiY1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL2lwLW1yX3YyLjVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9pc2FjXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIn0sXCJhdWRpby9sMTZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9sMjBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9sMjRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlfSxcImF1ZGlvL2w4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vbHBjXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vbWVscFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL21lbHAxMjAwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vbWVscDI0MDBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9tZWxwNjAwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vbWlkaVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wibWlkXCIsXCJtaWRpXCIsXCJrYXJcIixcInJtaVwiXX0sXCJhdWRpby9tb2JpbGUteG1mXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vbXAzXCI6e1wiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wibXAzXCJdfSxcImF1ZGlvL21wNFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wibTRhXCIsXCJtcDRhXCJdfSxcImF1ZGlvL21wNGEtbGF0bVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL21wYVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL21wYS1yb2J1c3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9tcGVnXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJtcGdhXCIsXCJtcDJcIixcIm1wMmFcIixcIm1wM1wiLFwibTJhXCIsXCJtM2FcIl19LFwiYXVkaW8vbXBlZzQtZ2VuZXJpY1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL211c2VwYWNrXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIn0sXCJhdWRpby9vZ2dcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIm9nYVwiLFwib2dnXCIsXCJzcHhcIl19LFwiYXVkaW8vb3B1c1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3Bhcml0eWZlY1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3BjbWFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9wY21hLXdiXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vcGNtdVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3BjbXUtd2JcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9wcnMuc2lkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vcWNlbHBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9yYXB0b3JmZWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9yZWRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9ydHAtZW5jLWFlc2NtMTI4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vcnRwLW1pZGlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9ydHBsb29wYmFja1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3J0eFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3MzbVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiczNtXCJdfSxcImF1ZGlvL3NpbGtcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInNpbFwiXX0sXCJhdWRpby9zbXZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9zbXYtcWNwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vc212MFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3NwLW1pZGlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby9zcGVleFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3QxNDBjXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdDM4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdGVsZXBob25lLWV2ZW50XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdG9uZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3VlbWNsaXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby91bHBmZWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby92ZHZpXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm1yLXdiXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLjNncHAuaXVmcFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC40c2JcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby92bmQuYXVkaW9rb3pcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby92bmQuY2VscFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5jaXNjby5uc2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby92bmQuY21sZXMucmFkaW8tZXZlbnRzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLmNucy5hbnAxXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLmNucy5pbmYxXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLmRlY2UuYXVkaW9cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ1dmFcIixcInV2dmFcIl19LFwiYXVkaW8vdm5kLmRpZ2l0YWwtd2luZHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJlb2xcIl19LFwiYXVkaW8vdm5kLmRsbmEuYWR0c1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5kb2xieS5oZWFhYy4xXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLmRvbGJ5LmhlYWFjLjJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby92bmQuZG9sYnkubWxwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLmRvbGJ5Lm1wc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5kb2xieS5wbDJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby92bmQuZG9sYnkucGwyeFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5kb2xieS5wbDJ6XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLmRvbGJ5LnB1bHNlLjFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby92bmQuZHJhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZHJhXCJdfSxcImF1ZGlvL3ZuZC5kdHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkdHNcIl19LFwiYXVkaW8vdm5kLmR0cy5oZFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImR0c2hkXCJdfSxcImF1ZGlvL3ZuZC5kdmIuZmlsZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5ldmVyYWQucGxqXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLmhucy5hdWRpb1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5sdWNlbnQudm9pY2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJsdnBcIl19LFwiYXVkaW8vdm5kLm1zLXBsYXlyZWFkeS5tZWRpYS5weWFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJweWFcIl19LFwiYXVkaW8vdm5kLm5va2lhLm1vYmlsZS14bWZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby92bmQubm9ydGVsLnZia1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5udWVyYS5lY2VscDQ4MDBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJlY2VscDQ4MDBcIl19LFwiYXVkaW8vdm5kLm51ZXJhLmVjZWxwNzQ3MFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImVjZWxwNzQ3MFwiXX0sXCJhdWRpby92bmQubnVlcmEuZWNlbHA5NjAwXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZWNlbHA5NjAwXCJdfSxcImF1ZGlvL3ZuZC5vY3RlbC5zYmNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby92bmQucHJlc29udXMubXVsdGl0cmFja1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5xY2VscFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5yaGV0b3JleC4zMmthZHBjbVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImF1ZGlvL3ZuZC5yaXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJyaXBcIl19LFwiYXVkaW8vdm5kLnJuLXJlYWxhdWRpb1wiOntcImNvbXByZXNzaWJsZVwiOmZhbHNlfSxcImF1ZGlvL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5tcGVnXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLnZteC5jdnNkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiYXVkaW8vdm5kLndhdmVcIjp7XCJjb21wcmVzc2libGVcIjpmYWxzZX0sXCJhdWRpby92b3JiaXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlfSxcImF1ZGlvL3ZvcmJpcy1jb25maWdcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJhdWRpby93YXZcIjp7XCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJ3YXZcIl19LFwiYXVkaW8vd2F2ZVwiOntcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIndhdlwiXX0sXCJhdWRpby93ZWJtXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIndlYmFcIl19LFwiYXVkaW8veC1hYWNcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wiYWFjXCJdfSxcImF1ZGlvL3gtYWlmZlwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiYWlmXCIsXCJhaWZmXCIsXCJhaWZjXCJdfSxcImF1ZGlvL3gtY2FmXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImNhZlwiXX0sXCJhdWRpby94LWZsYWNcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImZsYWNcIl19LFwiYXVkaW8veC1tNGFcIjp7XCJzb3VyY2VcIjpcIm5naW54XCIsXCJleHRlbnNpb25zXCI6W1wibTRhXCJdfSxcImF1ZGlvL3gtbWF0cm9za2FcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1rYVwiXX0sXCJhdWRpby94LW1wZWd1cmxcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIm0zdVwiXX0sXCJhdWRpby94LW1zLXdheFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wid2F4XCJdfSxcImF1ZGlvL3gtbXMtd21hXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ3bWFcIl19LFwiYXVkaW8veC1wbi1yZWFsYXVkaW9cIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInJhbVwiLFwicmFcIl19LFwiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJybXBcIl19LFwiYXVkaW8veC1yZWFsYXVkaW9cIjp7XCJzb3VyY2VcIjpcIm5naW54XCIsXCJleHRlbnNpb25zXCI6W1wicmFcIl19LFwiYXVkaW8veC10dGFcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwifSxcImF1ZGlvL3gtd2F2XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ3YXZcIl19LFwiYXVkaW8veG1cIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInhtXCJdfSxcImNoZW1pY2FsL3gtY2R4XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJjZHhcIl19LFwiY2hlbWljYWwveC1jaWZcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImNpZlwiXX0sXCJjaGVtaWNhbC94LWNtZGZcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImNtZGZcIl19LFwiY2hlbWljYWwveC1jbWxcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImNtbFwiXX0sXCJjaGVtaWNhbC94LWNzbWxcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImNzbWxcIl19LFwiY2hlbWljYWwveC1wZGJcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwifSxcImNoZW1pY2FsL3gteHl6XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ4eXpcIl19LFwiZm9udC9jb2xsZWN0aW9uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widHRjXCJdfSxcImZvbnQvb3RmXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcIm90ZlwiXX0sXCJmb250L3NmbnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJmb250L3R0ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInR0ZlwiXX0sXCJmb250L3dvZmZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ3b2ZmXCJdfSxcImZvbnQvd29mZjJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ3b2ZmMlwiXX0sXCJpbWFnZS9hY2VzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2UvYXBuZ1wiOntcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImFwbmdcIl19LFwiaW1hZ2UvYm1wXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcImJtcFwiXX0sXCJpbWFnZS9jZ21cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJjZ21cIl19LFwiaW1hZ2UvZGljb20tcmxlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2UvZW1mXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2UvZml0c1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImltYWdlL2czZmF4XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZzNcIl19LFwiaW1hZ2UvZ2lmXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJnaWZcIl19LFwiaW1hZ2UvaWVmXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaWVmXCJdfSxcImltYWdlL2psc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImltYWdlL2pwMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wianAyXCIsXCJqcGcyXCJdfSxcImltYWdlL2pwZWdcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImpwZWdcIixcImpwZ1wiLFwianBlXCJdfSxcImltYWdlL2pwbVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wianBtXCJdfSxcImltYWdlL2pweFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wianB4XCIsXCJqcGZcIl19LFwiaW1hZ2Uva3R4XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wia3R4XCJdfSxcImltYWdlL25hcGxwc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImltYWdlL3BqcGVnXCI6e1wiY29tcHJlc3NpYmxlXCI6ZmFsc2V9LFwiaW1hZ2UvcG5nXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJwbmdcIl19LFwiaW1hZ2UvcHJzLmJ0aWZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJidGlmXCJdfSxcImltYWdlL3Bycy5wdGlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJpbWFnZS9wd2ctcmFzdGVyXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2Uvc2dpXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzZ2lcIl19LFwiaW1hZ2Uvc3ZnK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJzdmdcIixcInN2Z3pcIl19LFwiaW1hZ2UvdDM4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2UvdGlmZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1widGlmZlwiLFwidGlmXCJdfSxcImltYWdlL3RpZmYtZnhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJpbWFnZS92bmQuYWRvYmUucGhvdG9zaG9wXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInBzZFwiXX0sXCJpbWFnZS92bmQuYWlyemlwLmFjY2VsZXJhdG9yLmF6dlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImltYWdlL3ZuZC5jbnMuaW5mMlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImltYWdlL3ZuZC5kZWNlLmdyYXBoaWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ1dmlcIixcInV2dmlcIixcInV2Z1wiLFwidXZ2Z1wiXX0sXCJpbWFnZS92bmQuZGp2dVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImRqdnVcIixcImRqdlwiXX0sXCJpbWFnZS92bmQuZHZiLnN1YnRpdGxlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic3ViXCJdfSxcImltYWdlL3ZuZC5kd2dcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkd2dcIl19LFwiaW1hZ2Uvdm5kLmR4ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImR4ZlwiXX0sXCJpbWFnZS92bmQuZmFzdGJpZHNoZWV0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZmJzXCJdfSxcImltYWdlL3ZuZC5mcHhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJmcHhcIl19LFwiaW1hZ2Uvdm5kLmZzdFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImZzdFwiXX0sXCJpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1tbXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtbXJcIl19LFwiaW1hZ2Uvdm5kLmZ1aml4ZXJveC5lZG1pY3MtcmxjXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wicmxjXCJdfSxcImltYWdlL3ZuZC5nbG9iYWxncmFwaGljcy5wZ2JcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJpbWFnZS92bmQubWljcm9zb2Z0Lmljb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJpbWFnZS92bmQubWl4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2Uvdm5kLm1vemlsbGEuYXBuZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImltYWdlL3ZuZC5tcy1tb2RpXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibWRpXCJdfSxcImltYWdlL3ZuZC5tcy1waG90b1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wid2RwXCJdfSxcImltYWdlL3ZuZC5uZXQtZnB4XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wibnB4XCJdfSxcImltYWdlL3ZuZC5yYWRpYW5jZVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImltYWdlL3ZuZC5zZWFsZWQucG5nXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2Uvdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLmdpZlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImltYWdlL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5qcGdcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJpbWFnZS92bmQuc3ZmXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2Uvdm5kLnRlbmNlbnQudGFwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2Uvdm5kLnZhbHZlLnNvdXJjZS50ZXh0dXJlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2Uvdm5kLndhcC53Ym1wXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wid2JtcFwiXX0sXCJpbWFnZS92bmQueGlmZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInhpZlwiXX0sXCJpbWFnZS92bmQuemJydXNoLnBjeFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcImltYWdlL3dlYnBcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIndlYnBcIl19LFwiaW1hZ2Uvd21mXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwiaW1hZ2UveC0zZHNcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIjNkc1wiXX0sXCJpbWFnZS94LWNtdS1yYXN0ZXJcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInJhc1wiXX0sXCJpbWFnZS94LWNteFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiY214XCJdfSxcImltYWdlL3gtZnJlZWhhbmRcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImZoXCIsXCJmaGNcIixcImZoNFwiLFwiZmg1XCIsXCJmaDdcIl19LFwiaW1hZ2UveC1pY29uXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wiaWNvXCJdfSxcImltYWdlL3gtam5nXCI6e1wic291cmNlXCI6XCJuZ2lueFwiLFwiZXh0ZW5zaW9uc1wiOltcImpuZ1wiXX0sXCJpbWFnZS94LW1yc2lkLWltYWdlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzaWRcIl19LFwiaW1hZ2UveC1tcy1ibXBcIjp7XCJzb3VyY2VcIjpcIm5naW54XCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcImJtcFwiXX0sXCJpbWFnZS94LXBjeFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicGN4XCJdfSxcImltYWdlL3gtcGljdFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicGljXCIsXCJwY3RcIl19LFwiaW1hZ2UveC1wb3J0YWJsZS1hbnltYXBcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInBubVwiXX0sXCJpbWFnZS94LXBvcnRhYmxlLWJpdG1hcFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicGJtXCJdfSxcImltYWdlL3gtcG9ydGFibGUtZ3JheW1hcFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wicGdtXCJdfSxcImltYWdlL3gtcG9ydGFibGUtcGl4bWFwXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJwcG1cIl19LFwiaW1hZ2UveC1yZ2JcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInJnYlwiXX0sXCJpbWFnZS94LXRnYVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widGdhXCJdfSxcImltYWdlL3gteGJpdG1hcFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wieGJtXCJdfSxcImltYWdlL3gteGNmXCI6e1wiY29tcHJlc3NpYmxlXCI6ZmFsc2V9LFwiaW1hZ2UveC14cGl4bWFwXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ4cG1cIl19LFwiaW1hZ2UveC14d2luZG93ZHVtcFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wieHdkXCJdfSxcIm1lc3NhZ2UvY3BpbVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm1lc3NhZ2UvZGVsaXZlcnktc3RhdHVzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwibWVzc2FnZS9kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIl19LFwibWVzc2FnZS9leHRlcm5hbC1ib2R5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwibWVzc2FnZS9mZWVkYmFjay1yZXBvcnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJtZXNzYWdlL2dsb2JhbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInU4bXNnXCJdfSxcIm1lc3NhZ2UvZ2xvYmFsLWRlbGl2ZXJ5LXN0YXR1c1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInU4ZHNuXCJdfSxcIm1lc3NhZ2UvZ2xvYmFsLWRpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInU4bWRuXCJdfSxcIm1lc3NhZ2UvZ2xvYmFsLWhlYWRlcnNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ1OGhkclwiXX0sXCJtZXNzYWdlL2h0dHBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlfSxcIm1lc3NhZ2UvaW1kbit4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWV9LFwibWVzc2FnZS9uZXdzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwibWVzc2FnZS9wYXJ0aWFsXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZX0sXCJtZXNzYWdlL3JmYzgyMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJlbWxcIixcIm1pbWVcIl19LFwibWVzc2FnZS9zLWh0dHBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJtZXNzYWdlL3NpcFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm1lc3NhZ2Uvc2lwZnJhZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm1lc3NhZ2UvdHJhY2tpbmctc3RhdHVzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwibWVzc2FnZS92bmQuc2kuc2ltcFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm1lc3NhZ2Uvdm5kLndmYS53c2NcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ3c2NcIl19LFwibW9kZWwvM21mXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwibW9kZWwvZ2x0Zitqc29uXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcImdsdGZcIl19LFwibW9kZWwvZ2x0Zi1iaW5hcnlcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wiZ2xiXCJdfSxcIm1vZGVsL2lnZXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcImlnc1wiLFwiaWdlc1wiXX0sXCJtb2RlbC9tZXNoXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJtc2hcIixcIm1lc2hcIixcInNpbG9cIl19LFwibW9kZWwvdm5kLmNvbGxhZGEreG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZGFlXCJdfSxcIm1vZGVsL3ZuZC5kd2ZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJkd2ZcIl19LFwibW9kZWwvdm5kLmZsYXRsYW5kLjNkbWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJtb2RlbC92bmQuZ2RsXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZ2RsXCJdfSxcIm1vZGVsL3ZuZC5ncy1nZGxcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwifSxcIm1vZGVsL3ZuZC5ncy5nZGxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJtb2RlbC92bmQuZ3R3XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZ3R3XCJdfSxcIm1vZGVsL3ZuZC5tb21sK3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm1vZGVsL3ZuZC5tdHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJtdHNcIl19LFwibW9kZWwvdm5kLm9wZW5nZXhcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJtb2RlbC92bmQucGFyYXNvbGlkLnRyYW5zbWl0LmJpbmFyeVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm1vZGVsL3ZuZC5wYXJhc29saWQudHJhbnNtaXQudGV4dFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm1vZGVsL3ZuZC5yb3NldHRlLmFubm90YXRlZC1kYXRhLW1vZGVsXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwibW9kZWwvdm5kLnZhbHZlLnNvdXJjZS5jb21waWxlZC1tYXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJtb2RlbC92bmQudnR1XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widnR1XCJdfSxcIm1vZGVsL3ZybWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIndybFwiLFwidnJtbFwiXX0sXCJtb2RlbC94M2QrYmluYXJ5XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIngzZGJcIixcIngzZGJ6XCJdfSxcIm1vZGVsL3gzZCtmYXN0aW5mb3NldFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm1vZGVsL3gzZCt2cm1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIngzZHZcIixcIngzZHZ6XCJdfSxcIm1vZGVsL3gzZCt4bWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wieDNkXCIsXCJ4M2R6XCJdfSxcIm1vZGVsL3gzZC12cm1sXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwibXVsdGlwYXJ0L2FsdGVybmF0aXZlXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZX0sXCJtdWx0aXBhcnQvYXBwbGVkb3VibGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJtdWx0aXBhcnQvYnl0ZXJhbmdlc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm11bHRpcGFydC9kaWdlc3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJtdWx0aXBhcnQvZW5jcnlwdGVkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZX0sXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZX0sXCJtdWx0aXBhcnQvaGVhZGVyLXNldFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm11bHRpcGFydC9taXhlZFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2V9LFwibXVsdGlwYXJ0L211bHRpbGluZ3VhbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm11bHRpcGFydC9wYXJhbGxlbFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcIm11bHRpcGFydC9yZWxhdGVkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZX0sXCJtdWx0aXBhcnQvcmVwb3J0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwibXVsdGlwYXJ0L3NpZ25lZFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2V9LFwibXVsdGlwYXJ0L3ZuZC5iaW50Lm1lZC1wbHVzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwibXVsdGlwYXJ0L3ZvaWNlLW1lc3NhZ2VcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L2NhY2hlLW1hbmlmZXN0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcImFwcGNhY2hlXCIsXCJtYW5pZmVzdFwiXX0sXCJ0ZXh0L2NhbGVuZGFyXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiaWNzXCIsXCJpZmJcIl19LFwidGV4dC9jYWxlbmRlclwiOntcImNvbXByZXNzaWJsZVwiOnRydWV9LFwidGV4dC9jbWRcIjp7XCJjb21wcmVzc2libGVcIjp0cnVlfSxcInRleHQvY29mZmVlc2NyaXB0XCI6e1wiZXh0ZW5zaW9uc1wiOltcImNvZmZlZVwiLFwibGl0Y29mZmVlXCJdfSxcInRleHQvY3NzXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjaGFyc2V0XCI6XCJVVEYtOFwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJjc3NcIl19LFwidGV4dC9jc3ZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1wiY3N2XCJdfSxcInRleHQvY3N2LXNjaGVtYVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvZGlyZWN0b3J5XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC9kbnNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L2VjbWFzY3JpcHRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L2VuY2FwcnRwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC9lbnJpY2hlZFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvZndkcmVkXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC9ncmFtbWFyLXJlZi1saXN0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC9odG1sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcImh0bWxcIixcImh0bVwiLFwic2h0bWxcIl19LFwidGV4dC9qYWRlXCI6e1wiZXh0ZW5zaW9uc1wiOltcImphZGVcIl19LFwidGV4dC9qYXZhc2NyaXB0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlfSxcInRleHQvamNyLWNuZFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvanN4XCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJqc3hcIl19LFwidGV4dC9sZXNzXCI6e1wiZXh0ZW5zaW9uc1wiOltcImxlc3NcIl19LFwidGV4dC9tYXJrZG93blwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJtYXJrZG93blwiLFwibWRcIl19LFwidGV4dC9tYXRobWxcIjp7XCJzb3VyY2VcIjpcIm5naW54XCIsXCJleHRlbnNpb25zXCI6W1wibW1sXCJdfSxcInRleHQvbWl6YXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L24zXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcIm4zXCJdfSxcInRleHQvcGFyYW1ldGVyc1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvcGFyaXR5ZmVjXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC9wbGFpblwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJ0eHRcIixcInRleHRcIixcImNvbmZcIixcImRlZlwiLFwibGlzdFwiLFwibG9nXCIsXCJpblwiLFwiaW5pXCJdfSxcInRleHQvcHJvdmVuYW5jZS1ub3RhdGlvblwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvcHJzLmZhbGxlbnN0ZWluLnJzdFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvcHJzLmxpbmVzLnRhZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImRzY1wiXX0sXCJ0ZXh0L3Bycy5wcm9wLmxvZ2ljXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC9yYXB0b3JmZWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3JlZFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvcmZjODIyLWhlYWRlcnNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3JpY2h0ZXh0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInJ0eFwiXX0sXCJ0ZXh0L3J0ZlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJydGZcIl19LFwidGV4dC9ydHAtZW5jLWFlc2NtMTI4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC9ydHBsb29wYmFja1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvcnR4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC9zZ21sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wic2dtbFwiLFwic2dtXCJdfSxcInRleHQvc2hleFwiOntcImV4dGVuc2lvbnNcIjpbXCJzaGV4XCJdfSxcInRleHQvc2xpbVwiOntcImV4dGVuc2lvbnNcIjpbXCJzbGltXCIsXCJzbG1cIl19LFwidGV4dC9zdHJpbmdzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC9zdHlsdXNcIjp7XCJleHRlbnNpb25zXCI6W1wic3R5bHVzXCIsXCJzdHlsXCJdfSxcInRleHQvdDE0MFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1widHN2XCJdfSxcInRleHQvdHJvZmZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ0XCIsXCJ0clwiLFwicm9mZlwiLFwibWFuXCIsXCJtZVwiLFwibXNcIl19LFwidGV4dC90dXJ0bGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ0dGxcIl19LFwidGV4dC91bHBmZWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3VyaS1saXN0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInVyaVwiLFwidXJpc1wiLFwidXJsc1wiXX0sXCJ0ZXh0L3ZjYXJkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInZjYXJkXCJdfSxcInRleHQvdm5kLmFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC5hYmNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC5hc2NpaS1hcnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC5jdXJsXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiY3VybFwiXX0sXCJ0ZXh0L3ZuZC5jdXJsLmRjdXJsXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJkY3VybFwiXX0sXCJ0ZXh0L3ZuZC5jdXJsLm1jdXJsXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJtY3VybFwiXX0sXCJ0ZXh0L3ZuZC5jdXJsLnNjdXJsXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzY3VybFwiXX0sXCJ0ZXh0L3ZuZC5kZWJpYW4uY29weXJpZ2h0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC92bmQuZG1jbGllbnRzY3JpcHRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC5kdmIuc3VidGl0bGVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJzdWJcIl19LFwidGV4dC92bmQuZXNtZXJ0ZWMudGhlbWUtZGVzY3JpcHRvclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvdm5kLmZseVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImZseVwiXX0sXCJ0ZXh0L3ZuZC5mbWkuZmxleHN0b3JcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJmbHhcIl19LFwidGV4dC92bmQuZ3JhcGh2aXpcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJndlwiXX0sXCJ0ZXh0L3ZuZC5pbjNkLjNkbWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCIzZG1sXCJdfSxcInRleHQvdm5kLmluM2Quc3BvdFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInNwb3RcIl19LFwidGV4dC92bmQuaXB0Yy5uZXdzbWxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC5pcHRjLm5pdGZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC5sYXRleC16XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC92bmQubW90b3JvbGEucmVmbGV4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC92bmQubXMtbWVkaWFwYWNrYWdlXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidGV4dC92bmQubmV0MnBob25lLmNvbW1jZW50ZXIuY29tbWFuZFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQvdm5kLnJhZGlzeXMubXNtbC1iYXNpYy1sYXlvdXRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC5zaS51cmljYXRhbG9ndWVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC5zdW4uajJtZS5hcHAtZGVzY3JpcHRvclwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImphZFwiXX0sXCJ0ZXh0L3ZuZC50cm9sbHRlY2gubGluZ3Vpc3RcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC53YXAuc2lcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC53YXAuc2xcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ0ZXh0L3ZuZC53YXAud21sXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wid21sXCJdfSxcInRleHQvdm5kLndhcC53bWxzY3JpcHRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ3bWxzXCJdfSxcInRleHQvdnR0XCI6e1wiY2hhcnNldFwiOlwiVVRGLThcIixcImNvbXByZXNzaWJsZVwiOnRydWUsXCJleHRlbnNpb25zXCI6W1widnR0XCJdfSxcInRleHQveC1hc21cIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInNcIixcImFzbVwiXX0sXCJ0ZXh0L3gtY1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiY1wiLFwiY2NcIixcImN4eFwiLFwiY3BwXCIsXCJoXCIsXCJoaFwiLFwiZGljXCJdfSxcInRleHQveC1jb21wb25lbnRcIjp7XCJzb3VyY2VcIjpcIm5naW54XCIsXCJleHRlbnNpb25zXCI6W1wiaHRjXCJdfSxcInRleHQveC1mb3J0cmFuXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJmXCIsXCJmb3JcIixcImY3N1wiLFwiZjkwXCJdfSxcInRleHQveC1nd3QtcnBjXCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZVwiOntcImV4dGVuc2lvbnNcIjpbXCJoYnNcIl19LFwidGV4dC94LWphdmEtc291cmNlXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJqYXZhXCJdfSxcInRleHQveC1qcXVlcnktdG1wbFwiOntcImNvbXByZXNzaWJsZVwiOnRydWV9LFwidGV4dC94LWx1YVwiOntcImV4dGVuc2lvbnNcIjpbXCJsdWFcIl19LFwidGV4dC94LW1hcmtkb3duXCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJta2RcIl19LFwidGV4dC94LW5mb1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wibmZvXCJdfSxcInRleHQveC1vcG1sXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJvcG1sXCJdfSxcInRleHQveC1vcmdcIjp7XCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcIm9yZ1wiXX0sXCJ0ZXh0L3gtcGFzY2FsXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJwXCIsXCJwYXNcIl19LFwidGV4dC94LXByb2Nlc3NpbmdcIjp7XCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInBkZVwiXX0sXCJ0ZXh0L3gtc2Fzc1wiOntcImV4dGVuc2lvbnNcIjpbXCJzYXNzXCJdfSxcInRleHQveC1zY3NzXCI6e1wiZXh0ZW5zaW9uc1wiOltcInNjc3NcIl19LFwidGV4dC94LXNldGV4dFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiZXR4XCJdfSxcInRleHQveC1zZnZcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInNmdlwiXX0sXCJ0ZXh0L3gtc3VzZS15bXBcIjp7XCJjb21wcmVzc2libGVcIjp0cnVlLFwiZXh0ZW5zaW9uc1wiOltcInltcFwiXX0sXCJ0ZXh0L3gtdXVlbmNvZGVcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInV1XCJdfSxcInRleHQveC12Y2FsZW5kYXJcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInZjc1wiXX0sXCJ0ZXh0L3gtdmNhcmRcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcInZjZlwiXX0sXCJ0ZXh0L3htbFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6dHJ1ZSxcImV4dGVuc2lvbnNcIjpbXCJ4bWxcIl19LFwidGV4dC94bWwtZXh0ZXJuYWwtcGFyc2VkLWVudGl0eVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInRleHQveWFtbFwiOntcImV4dGVuc2lvbnNcIjpbXCJ5YW1sXCIsXCJ5bWxcIl19LFwidmlkZW8vMWQtaW50ZXJsZWF2ZWQtcGFyaXR5ZmVjXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vM2dwcFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIjNncFwiLFwiM2dwcFwiXX0sXCJ2aWRlby8zZ3BwLXR0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vM2dwcDJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCIzZzJcIl19LFwidmlkZW8vYm1wZWdcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby9idDY1NlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL2NlbGJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby9kdlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL2VuY2FwcnRwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vaDI2MVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImgyNjFcIl19LFwidmlkZW8vaDI2M1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImgyNjNcIl19LFwidmlkZW8vaDI2My0xOTk4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vaDI2My0yMDAwXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vaDI2NFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImgyNjRcIl19LFwidmlkZW8vaDI2NC1yY2RvXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vaDI2NC1zdmNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby9oMjY1XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vaXNvLnNlZ21lbnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby9qcGVnXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wianBndlwiXX0sXCJ2aWRlby9qcGVnMjAwMFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL2pwbVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wianBtXCIsXCJqcGdtXCJdfSxcInZpZGVvL21qMlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1qMlwiLFwibWpwMlwiXX0sXCJ2aWRlby9tcDFzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vbXAycFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL21wMnRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJ0c1wiXX0sXCJ2aWRlby9tcDRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIm1wNFwiLFwibXA0dlwiLFwibXBnNFwiXX0sXCJ2aWRlby9tcDR2LWVzXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vbXBlZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wibXBlZ1wiLFwibXBnXCIsXCJtcGVcIixcIm0xdlwiLFwibTJ2XCJdfSxcInZpZGVvL21wZWc0LWdlbmVyaWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby9tcHZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby9udlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL29nZ1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wib2d2XCJdfSxcInZpZGVvL3Bhcml0eWZlY1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL3BvaW50ZXJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby9xdWlja3RpbWVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcInF0XCIsXCJtb3ZcIl19LFwidmlkZW8vcmFwdG9yZmVjXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vcmF3XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vcnRwLWVuYy1hZXNjbTEyOFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL3J0cGxvb3BiYWNrXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vcnR4XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vc21wdGUyOTFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby9zbXB0ZTI5Mm1cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby91bHBmZWNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92YzFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuY2N0dlwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL3ZuZC5kZWNlLmhkXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widXZoXCIsXCJ1dnZoXCJdfSxcInZpZGVvL3ZuZC5kZWNlLm1vYmlsZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInV2bVwiLFwidXZ2bVwiXX0sXCJ2aWRlby92bmQuZGVjZS5tcDRcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuZGVjZS5wZFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInV2cFwiLFwidXZ2cFwiXX0sXCJ2aWRlby92bmQuZGVjZS5zZFwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInV2c1wiLFwidXZ2c1wiXX0sXCJ2aWRlby92bmQuZGVjZS52aWRlb1wiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInV2dlwiLFwidXZ2dlwiXX0sXCJ2aWRlby92bmQuZGlyZWN0di5tcGVnXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vdm5kLmRpcmVjdHYubXBlZy10dHNcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuZGxuYS5tcGVnLXR0c1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL3ZuZC5kdmIuZmlsZVwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcImR2YlwiXX0sXCJ2aWRlby92bmQuZnZ0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1wiZnZ0XCJdfSxcInZpZGVvL3ZuZC5obnMudmlkZW9cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuaXB0dmZvcnVtLjFkcGFyaXR5ZmVjLTEwMTBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuaXB0dmZvcnVtLjFkcGFyaXR5ZmVjLTIwMDVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuaXB0dmZvcnVtLjJkcGFyaXR5ZmVjLTEwMTBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuaXB0dmZvcnVtLjJkcGFyaXR5ZmVjLTIwMDVcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuaXB0dmZvcnVtLnR0c2F2Y1wiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL3ZuZC5pcHR2Zm9ydW0udHRzbXBlZzJcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQubW90b3JvbGEudmlkZW9cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQubW90b3JvbGEudmlkZW9wXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vdm5kLm1wZWd1cmxcIjp7XCJzb3VyY2VcIjpcImlhbmFcIixcImV4dGVuc2lvbnNcIjpbXCJteHVcIixcIm00dVwiXX0sXCJ2aWRlby92bmQubXMtcGxheXJlYWR5Lm1lZGlhLnB5dlwiOntcInNvdXJjZVwiOlwiaWFuYVwiLFwiZXh0ZW5zaW9uc1wiOltcInB5dlwiXX0sXCJ2aWRlby92bmQubm9raWEuaW50ZXJsZWF2ZWQtbXVsdGltZWRpYVwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL3ZuZC5ub2tpYS5tcDR2clwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL3ZuZC5ub2tpYS52aWRlb3ZvaXBcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQub2JqZWN0dmlkZW9cIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQucmFkZ2FtZXR0b29scy5iaW5rXCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vdm5kLnJhZGdhbWV0dG9vbHMuc21hY2tlclwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL3ZuZC5zZWFsZWQubXBlZzFcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuc2VhbGVkLm1wZWc0XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vdm5kLnNlYWxlZC5zd2ZcIjp7XCJzb3VyY2VcIjpcImlhbmFcIn0sXCJ2aWRlby92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwubW92XCI6e1wic291cmNlXCI6XCJpYW5hXCJ9LFwidmlkZW8vdm5kLnV2dnUubXA0XCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widXZ1XCIsXCJ1dnZ1XCJdfSxcInZpZGVvL3ZuZC52aXZvXCI6e1wic291cmNlXCI6XCJpYW5hXCIsXCJleHRlbnNpb25zXCI6W1widml2XCJdfSxcInZpZGVvL3ZwOFwiOntcInNvdXJjZVwiOlwiaWFuYVwifSxcInZpZGVvL3dlYm1cIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wid2VibVwiXX0sXCJ2aWRlby94LWY0dlwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wiZjR2XCJdfSxcInZpZGVvL3gtZmxpXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJmbGlcIl19LFwidmlkZW8veC1mbHZcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiY29tcHJlc3NpYmxlXCI6ZmFsc2UsXCJleHRlbnNpb25zXCI6W1wiZmx2XCJdfSxcInZpZGVvL3gtbTR2XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJtNHZcIl19LFwidmlkZW8veC1tYXRyb3NrYVwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJjb21wcmVzc2libGVcIjpmYWxzZSxcImV4dGVuc2lvbnNcIjpbXCJta3ZcIixcIm1rM2RcIixcIm1rc1wiXX0sXCJ2aWRlby94LW1uZ1wiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wibW5nXCJdfSxcInZpZGVvL3gtbXMtYXNmXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJhc2ZcIixcImFzeFwiXX0sXCJ2aWRlby94LW1zLXZvYlwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1widm9iXCJdfSxcInZpZGVvL3gtbXMtd21cIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIndtXCJdfSxcInZpZGVvL3gtbXMtd212XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImNvbXByZXNzaWJsZVwiOmZhbHNlLFwiZXh0ZW5zaW9uc1wiOltcIndtdlwiXX0sXCJ2aWRlby94LW1zLXdteFwiOntcInNvdXJjZVwiOlwiYXBhY2hlXCIsXCJleHRlbnNpb25zXCI6W1wid214XCJdfSxcInZpZGVvL3gtbXMtd3Z4XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJ3dnhcIl19LFwidmlkZW8veC1tc3ZpZGVvXCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJhdmlcIl19LFwidmlkZW8veC1zZ2ktbW92aWVcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcIm1vdmllXCJdfSxcInZpZGVvL3gtc212XCI6e1wic291cmNlXCI6XCJhcGFjaGVcIixcImV4dGVuc2lvbnNcIjpbXCJzbXZcIl19LFwieC1jb25mZXJlbmNlL3gtY29vbHRhbGtcIjp7XCJzb3VyY2VcIjpcImFwYWNoZVwiLFwiZXh0ZW5zaW9uc1wiOltcImljZVwiXX0sXCJ4LXNoYWRlci94LWZyYWdtZW50XCI6e1wiY29tcHJlc3NpYmxlXCI6dHJ1ZX0sXCJ4LXNoYWRlci94LXZlcnRleFwiOntcImNvbXByZXNzaWJsZVwiOnRydWV9fVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9taW1lLWRiL2RiLmpzb25cbi8vIG1vZHVsZSBpZCA9IDE1NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGJvZHktcGFyc2VyXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBieXRlcyA9IHJlcXVpcmUoJ2J5dGVzJylcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ2JvZHktcGFyc2VyOnJhdycpXG52YXIgcmVhZCA9IHJlcXVpcmUoJy4uL3JlYWQnKVxudmFyIHR5cGVpcyA9IHJlcXVpcmUoJ3R5cGUtaXMnKVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmF3XG5cbi8qKlxuICogQ3JlYXRlIGEgbWlkZGxld2FyZSB0byBwYXJzZSByYXcgYm9kaWVzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiByYXcgKG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIGluZmxhdGUgPSBvcHRzLmluZmxhdGUgIT09IGZhbHNlXG4gIHZhciBsaW1pdCA9IHR5cGVvZiBvcHRzLmxpbWl0ICE9PSAnbnVtYmVyJ1xuICAgID8gYnl0ZXMucGFyc2Uob3B0cy5saW1pdCB8fCAnMTAwa2InKVxuICAgIDogb3B0cy5saW1pdFxuICB2YXIgdHlwZSA9IG9wdHMudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICB2YXIgdmVyaWZ5ID0gb3B0cy52ZXJpZnkgfHwgZmFsc2VcblxuICBpZiAodmVyaWZ5ICE9PSBmYWxzZSAmJiB0eXBlb2YgdmVyaWZ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIHZlcmlmeSBtdXN0IGJlIGZ1bmN0aW9uJylcbiAgfVxuXG4gIC8vIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBjaGVja2luZyBmdW5jdGlvblxuICB2YXIgc2hvdWxkUGFyc2UgPSB0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJ1xuICAgID8gdHlwZUNoZWNrZXIodHlwZSlcbiAgICA6IHR5cGVcblxuICBmdW5jdGlvbiBwYXJzZSAoYnVmKSB7XG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHJhd1BhcnNlciAocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLl9ib2R5KSB7XG4gICAgICBkZWJ1ZygnYm9keSBhbHJlYWR5IHBhcnNlZCcpXG4gICAgICBuZXh0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHJlcS5ib2R5ID0gcmVxLmJvZHkgfHwge31cblxuICAgIC8vIHNraXAgcmVxdWVzdHMgd2l0aG91dCBib2RpZXNcbiAgICBpZiAoIXR5cGVpcy5oYXNCb2R5KHJlcSkpIHtcbiAgICAgIGRlYnVnKCdza2lwIGVtcHR5IGJvZHknKVxuICAgICAgbmV4dCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBkZWJ1ZygnY29udGVudC10eXBlICVqJywgcmVxLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKVxuXG4gICAgLy8gZGV0ZXJtaW5lIGlmIHJlcXVlc3Qgc2hvdWxkIGJlIHBhcnNlZFxuICAgIGlmICghc2hvdWxkUGFyc2UocmVxKSkge1xuICAgICAgZGVidWcoJ3NraXAgcGFyc2luZycpXG4gICAgICBuZXh0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHJlYWRcbiAgICByZWFkKHJlcSwgcmVzLCBuZXh0LCBwYXJzZSwgZGVidWcsIHtcbiAgICAgIGVuY29kaW5nOiBudWxsLFxuICAgICAgaW5mbGF0ZTogaW5mbGF0ZSxcbiAgICAgIGxpbWl0OiBsaW1pdCxcbiAgICAgIHZlcmlmeTogdmVyaWZ5XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgc2ltcGxlIHR5cGUgY2hlY2tlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cblxuZnVuY3Rpb24gdHlwZUNoZWNrZXIgKHR5cGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNoZWNrVHlwZSAocmVxKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odHlwZWlzKHJlcSwgdHlwZSkpXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9ib2R5LXBhcnNlci9saWIvdHlwZXMvcmF3LmpzXG4vLyBtb2R1bGUgaWQgPSAxNTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBib2R5LXBhcnNlclxuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgYnl0ZXMgPSByZXF1aXJlKCdieXRlcycpXG52YXIgY29udGVudFR5cGUgPSByZXF1aXJlKCdjb250ZW50LXR5cGUnKVxudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnYm9keS1wYXJzZXI6dGV4dCcpXG52YXIgcmVhZCA9IHJlcXVpcmUoJy4uL3JlYWQnKVxudmFyIHR5cGVpcyA9IHJlcXVpcmUoJ3R5cGUtaXMnKVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gdGV4dFxuXG4vKipcbiAqIENyZWF0ZSBhIG1pZGRsZXdhcmUgdG8gcGFyc2UgdGV4dCBib2RpZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHRleHQgKG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIGRlZmF1bHRDaGFyc2V0ID0gb3B0cy5kZWZhdWx0Q2hhcnNldCB8fCAndXRmLTgnXG4gIHZhciBpbmZsYXRlID0gb3B0cy5pbmZsYXRlICE9PSBmYWxzZVxuICB2YXIgbGltaXQgPSB0eXBlb2Ygb3B0cy5saW1pdCAhPT0gJ251bWJlcidcbiAgICA/IGJ5dGVzLnBhcnNlKG9wdHMubGltaXQgfHwgJzEwMGtiJylcbiAgICA6IG9wdHMubGltaXRcbiAgdmFyIHR5cGUgPSBvcHRzLnR5cGUgfHwgJ3RleHQvcGxhaW4nXG4gIHZhciB2ZXJpZnkgPSBvcHRzLnZlcmlmeSB8fCBmYWxzZVxuXG4gIGlmICh2ZXJpZnkgIT09IGZhbHNlICYmIHR5cGVvZiB2ZXJpZnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gdmVyaWZ5IG11c3QgYmUgZnVuY3Rpb24nKVxuICB9XG5cbiAgLy8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9uXG4gIHZhciBzaG91bGRQYXJzZSA9IHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nXG4gICAgPyB0eXBlQ2hlY2tlcih0eXBlKVxuICAgIDogdHlwZVxuXG4gIGZ1bmN0aW9uIHBhcnNlIChidWYpIHtcbiAgICByZXR1cm4gYnVmXG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gdGV4dFBhcnNlciAocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLl9ib2R5KSB7XG4gICAgICBkZWJ1ZygnYm9keSBhbHJlYWR5IHBhcnNlZCcpXG4gICAgICBuZXh0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHJlcS5ib2R5ID0gcmVxLmJvZHkgfHwge31cblxuICAgIC8vIHNraXAgcmVxdWVzdHMgd2l0aG91dCBib2RpZXNcbiAgICBpZiAoIXR5cGVpcy5oYXNCb2R5KHJlcSkpIHtcbiAgICAgIGRlYnVnKCdza2lwIGVtcHR5IGJvZHknKVxuICAgICAgbmV4dCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBkZWJ1ZygnY29udGVudC10eXBlICVqJywgcmVxLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKVxuXG4gICAgLy8gZGV0ZXJtaW5lIGlmIHJlcXVlc3Qgc2hvdWxkIGJlIHBhcnNlZFxuICAgIGlmICghc2hvdWxkUGFyc2UocmVxKSkge1xuICAgICAgZGVidWcoJ3NraXAgcGFyc2luZycpXG4gICAgICBuZXh0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGdldCBjaGFyc2V0XG4gICAgdmFyIGNoYXJzZXQgPSBnZXRDaGFyc2V0KHJlcSkgfHwgZGVmYXVsdENoYXJzZXRcblxuICAgIC8vIHJlYWRcbiAgICByZWFkKHJlcSwgcmVzLCBuZXh0LCBwYXJzZSwgZGVidWcsIHtcbiAgICAgIGVuY29kaW5nOiBjaGFyc2V0LFxuICAgICAgaW5mbGF0ZTogaW5mbGF0ZSxcbiAgICAgIGxpbWl0OiBsaW1pdCxcbiAgICAgIHZlcmlmeTogdmVyaWZ5XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgY2hhcnNldCBvZiBhIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHJlcVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2hhcnNldCAocmVxKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChjb250ZW50VHlwZS5wYXJzZShyZXEpLnBhcmFtZXRlcnMuY2hhcnNldCB8fCAnJykudG9Mb3dlckNhc2UoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBzaW1wbGUgdHlwZSBjaGVja2VyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuXG5mdW5jdGlvbiB0eXBlQ2hlY2tlciAodHlwZSkge1xuICByZXR1cm4gZnVuY3Rpb24gY2hlY2tUeXBlIChyZXEpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0eXBlaXMocmVxLCB0eXBlKSlcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2JvZHktcGFyc2VyL2xpYi90eXBlcy90ZXh0LmpzXG4vLyBtb2R1bGUgaWQgPSAxNTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBib2R5LXBhcnNlclxuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgYnl0ZXMgPSByZXF1aXJlKCdieXRlcycpXG52YXIgY29udGVudFR5cGUgPSByZXF1aXJlKCdjb250ZW50LXR5cGUnKVxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnaHR0cC1lcnJvcnMnKVxudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnYm9keS1wYXJzZXI6dXJsZW5jb2RlZCcpXG52YXIgZGVwcmVjYXRlID0gcmVxdWlyZSgnZGVwZCcpKCdib2R5LXBhcnNlcicpXG52YXIgcmVhZCA9IHJlcXVpcmUoJy4uL3JlYWQnKVxudmFyIHR5cGVpcyA9IHJlcXVpcmUoJ3R5cGUtaXMnKVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gdXJsZW5jb2RlZFxuXG4vKipcbiAqIENhY2hlIG9mIHBhcnNlciBtb2R1bGVzLlxuICovXG5cbnZhciBwYXJzZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vKipcbiAqIENyZWF0ZSBhIG1pZGRsZXdhcmUgdG8gcGFyc2UgdXJsZW5jb2RlZCBib2RpZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gdXJsZW5jb2RlZCAob3B0aW9ucykge1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge31cblxuICAvLyBub3RpY2UgYmVjYXVzZSBvcHRpb24gZGVmYXVsdCB3aWxsIGZsaXAgaW4gbmV4dCBtYWpvclxuICBpZiAob3B0cy5leHRlbmRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVwcmVjYXRlKCd1bmRlZmluZWQgZXh0ZW5kZWQ6IHByb3ZpZGUgZXh0ZW5kZWQgb3B0aW9uJylcbiAgfVxuXG4gIHZhciBleHRlbmRlZCA9IG9wdHMuZXh0ZW5kZWQgIT09IGZhbHNlXG4gIHZhciBpbmZsYXRlID0gb3B0cy5pbmZsYXRlICE9PSBmYWxzZVxuICB2YXIgbGltaXQgPSB0eXBlb2Ygb3B0cy5saW1pdCAhPT0gJ251bWJlcidcbiAgICA/IGJ5dGVzLnBhcnNlKG9wdHMubGltaXQgfHwgJzEwMGtiJylcbiAgICA6IG9wdHMubGltaXRcbiAgdmFyIHR5cGUgPSBvcHRzLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgdmFyIHZlcmlmeSA9IG9wdHMudmVyaWZ5IHx8IGZhbHNlXG5cbiAgaWYgKHZlcmlmeSAhPT0gZmFsc2UgJiYgdHlwZW9mIHZlcmlmeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiB2ZXJpZnkgbXVzdCBiZSBmdW5jdGlvbicpXG4gIH1cblxuICAvLyBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIHF1ZXJ5IHBhcnNlclxuICB2YXIgcXVlcnlwYXJzZSA9IGV4dGVuZGVkXG4gICAgPyBleHRlbmRlZHBhcnNlcihvcHRzKVxuICAgIDogc2ltcGxlcGFyc2VyKG9wdHMpXG5cbiAgLy8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9uXG4gIHZhciBzaG91bGRQYXJzZSA9IHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nXG4gICAgPyB0eXBlQ2hlY2tlcih0eXBlKVxuICAgIDogdHlwZVxuXG4gIGZ1bmN0aW9uIHBhcnNlIChib2R5KSB7XG4gICAgcmV0dXJuIGJvZHkubGVuZ3RoXG4gICAgICA/IHF1ZXJ5cGFyc2UoYm9keSlcbiAgICAgIDoge31cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cmxlbmNvZGVkUGFyc2VyIChyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuX2JvZHkpIHtcbiAgICAgIGRlYnVnKCdib2R5IGFscmVhZHkgcGFyc2VkJylcbiAgICAgIG5leHQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmVxLmJvZHkgPSByZXEuYm9keSB8fCB7fVxuXG4gICAgLy8gc2tpcCByZXF1ZXN0cyB3aXRob3V0IGJvZGllc1xuICAgIGlmICghdHlwZWlzLmhhc0JvZHkocmVxKSkge1xuICAgICAgZGVidWcoJ3NraXAgZW1wdHkgYm9keScpXG4gICAgICBuZXh0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRlYnVnKCdjb250ZW50LXR5cGUgJWonLCByZXEuaGVhZGVyc1snY29udGVudC10eXBlJ10pXG5cbiAgICAvLyBkZXRlcm1pbmUgaWYgcmVxdWVzdCBzaG91bGQgYmUgcGFyc2VkXG4gICAgaWYgKCFzaG91bGRQYXJzZShyZXEpKSB7XG4gICAgICBkZWJ1Zygnc2tpcCBwYXJzaW5nJylcbiAgICAgIG5leHQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gYXNzZXJ0IGNoYXJzZXRcbiAgICB2YXIgY2hhcnNldCA9IGdldENoYXJzZXQocmVxKSB8fCAndXRmLTgnXG4gICAgaWYgKGNoYXJzZXQgIT09ICd1dGYtOCcpIHtcbiAgICAgIGRlYnVnKCdpbnZhbGlkIGNoYXJzZXQnKVxuICAgICAgbmV4dChjcmVhdGVFcnJvcig0MTUsICd1bnN1cHBvcnRlZCBjaGFyc2V0IFwiJyArIGNoYXJzZXQudG9VcHBlckNhc2UoKSArICdcIicsIHtcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgdHlwZTogJ2NoYXJzZXQudW5zdXBwb3J0ZWQnXG4gICAgICB9KSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHJlYWRcbiAgICByZWFkKHJlcSwgcmVzLCBuZXh0LCBwYXJzZSwgZGVidWcsIHtcbiAgICAgIGRlYnVnOiBkZWJ1ZyxcbiAgICAgIGVuY29kaW5nOiBjaGFyc2V0LFxuICAgICAgaW5mbGF0ZTogaW5mbGF0ZSxcbiAgICAgIGxpbWl0OiBsaW1pdCxcbiAgICAgIHZlcmlmeTogdmVyaWZ5XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgZXh0ZW5kZWQgcXVlcnkgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5kZWRwYXJzZXIgKG9wdGlvbnMpIHtcbiAgdmFyIHBhcmFtZXRlckxpbWl0ID0gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCAhPT0gdW5kZWZpbmVkXG4gICAgPyBvcHRpb25zLnBhcmFtZXRlckxpbWl0XG4gICAgOiAxMDAwXG4gIHZhciBwYXJzZSA9IHBhcnNlcigncXMnKVxuXG4gIGlmIChpc05hTihwYXJhbWV0ZXJMaW1pdCkgfHwgcGFyYW1ldGVyTGltaXQgPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIHBhcmFtZXRlckxpbWl0IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICB9XG5cbiAgaWYgKGlzRmluaXRlKHBhcmFtZXRlckxpbWl0KSkge1xuICAgIHBhcmFtZXRlckxpbWl0ID0gcGFyYW1ldGVyTGltaXQgfCAwXG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcXVlcnlwYXJzZSAoYm9keSkge1xuICAgIHZhciBwYXJhbUNvdW50ID0gcGFyYW1ldGVyQ291bnQoYm9keSwgcGFyYW1ldGVyTGltaXQpXG5cbiAgICBpZiAocGFyYW1Db3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWJ1ZygndG9vIG1hbnkgcGFyYW1ldGVycycpXG4gICAgICB0aHJvdyBjcmVhdGVFcnJvcig0MTMsICd0b28gbWFueSBwYXJhbWV0ZXJzJywge1xuICAgICAgICB0eXBlOiAncGFyYW1ldGVycy50b28ubWFueSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdmFyIGFycmF5TGltaXQgPSBNYXRoLm1heCgxMDAsIHBhcmFtQ291bnQpXG5cbiAgICBkZWJ1ZygncGFyc2UgZXh0ZW5kZWQgdXJsZW5jb2RpbmcnKVxuICAgIHJldHVybiBwYXJzZShib2R5LCB7XG4gICAgICBhbGxvd1Byb3RvdHlwZXM6IHRydWUsXG4gICAgICBhcnJheUxpbWl0OiBhcnJheUxpbWl0LFxuICAgICAgZGVwdGg6IEluZmluaXR5LFxuICAgICAgcGFyYW1ldGVyTGltaXQ6IHBhcmFtZXRlckxpbWl0XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgY2hhcnNldCBvZiBhIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHJlcVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2hhcnNldCAocmVxKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChjb250ZW50VHlwZS5wYXJzZShyZXEpLnBhcmFtZXRlcnMuY2hhcnNldCB8fCAnJykudG9Mb3dlckNhc2UoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG59XG5cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzLCBzdG9wcGluZyBvbmNlIGxpbWl0IHJlYWNoZWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9keVxuICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJhbWV0ZXJDb3VudCAoYm9keSwgbGltaXQpIHtcbiAgdmFyIGNvdW50ID0gMFxuICB2YXIgaW5kZXggPSAwXG5cbiAgd2hpbGUgKChpbmRleCA9IGJvZHkuaW5kZXhPZignJicsIGluZGV4KSkgIT09IC0xKSB7XG4gICAgY291bnQrK1xuICAgIGluZGV4KytcblxuICAgIGlmIChjb3VudCA9PT0gbGltaXQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY291bnRcbn1cblxuLyoqXG4gKiBHZXQgcGFyc2VyIGZvciBtb2R1bGUgbmFtZSBkeW5hbWljYWxseS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZXIgKG5hbWUpIHtcbiAgdmFyIG1vZCA9IHBhcnNlcnNbbmFtZV1cblxuICBpZiAobW9kICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbW9kLnBhcnNlXG4gIH1cblxuICAvLyB0aGlzIHVzZXMgYSBzd2l0Y2ggZm9yIHN0YXRpYyByZXF1aXJlIGFuYWx5c2lzXG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ3FzJzpcbiAgICAgIG1vZCA9IHJlcXVpcmUoJ3FzJylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAncXVlcnlzdHJpbmcnOlxuICAgICAgbW9kID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKVxuICAgICAgYnJlYWtcbiAgfVxuXG4gIC8vIHN0b3JlIHRvIHByZXZlbnQgaW52b2tpbmcgcmVxdWlyZSgpXG4gIHBhcnNlcnNbbmFtZV0gPSBtb2RcblxuICByZXR1cm4gbW9kLnBhcnNlXG59XG5cbi8qKlxuICogR2V0IHRoZSBzaW1wbGUgcXVlcnkgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKi9cblxuZnVuY3Rpb24gc2ltcGxlcGFyc2VyIChvcHRpb25zKSB7XG4gIHZhciBwYXJhbWV0ZXJMaW1pdCA9IG9wdGlvbnMucGFyYW1ldGVyTGltaXQgIT09IHVuZGVmaW5lZFxuICAgID8gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdFxuICAgIDogMTAwMFxuICB2YXIgcGFyc2UgPSBwYXJzZXIoJ3F1ZXJ5c3RyaW5nJylcblxuICBpZiAoaXNOYU4ocGFyYW1ldGVyTGltaXQpIHx8IHBhcmFtZXRlckxpbWl0IDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBwYXJhbWV0ZXJMaW1pdCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgfVxuXG4gIGlmIChpc0Zpbml0ZShwYXJhbWV0ZXJMaW1pdCkpIHtcbiAgICBwYXJhbWV0ZXJMaW1pdCA9IHBhcmFtZXRlckxpbWl0IHwgMFxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHF1ZXJ5cGFyc2UgKGJvZHkpIHtcbiAgICB2YXIgcGFyYW1Db3VudCA9IHBhcmFtZXRlckNvdW50KGJvZHksIHBhcmFtZXRlckxpbWl0KVxuXG4gICAgaWYgKHBhcmFtQ291bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVidWcoJ3RvbyBtYW55IHBhcmFtZXRlcnMnKVxuICAgICAgdGhyb3cgY3JlYXRlRXJyb3IoNDEzLCAndG9vIG1hbnkgcGFyYW1ldGVycycsIHtcbiAgICAgICAgdHlwZTogJ3BhcmFtZXRlcnMudG9vLm1hbnknXG4gICAgICB9KVxuICAgIH1cblxuICAgIGRlYnVnKCdwYXJzZSB1cmxlbmNvZGluZycpXG4gICAgcmV0dXJuIHBhcnNlKGJvZHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7bWF4S2V5czogcGFyYW1ldGVyTGltaXR9KVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBzaW1wbGUgdHlwZSBjaGVja2VyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuXG5mdW5jdGlvbiB0eXBlQ2hlY2tlciAodHlwZSkge1xuICByZXR1cm4gZnVuY3Rpb24gY2hlY2tUeXBlIChyZXEpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0eXBlaXMocmVxLCB0eXBlKSlcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2JvZHktcGFyc2VyL2xpYi90eXBlcy91cmxlbmNvZGVkLmpzXG4vLyBtb2R1bGUgaWQgPSAxNThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG52YXIgYXJyYXlQcmVmaXhHZW5lcmF0b3JzID0ge1xuICAgIGJyYWNrZXRzOiBmdW5jdGlvbiBicmFja2V0cyhwcmVmaXgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbXSc7XG4gICAgfSxcbiAgICBpbmRpY2VzOiBmdW5jdGlvbiBpbmRpY2VzKHByZWZpeCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgICAgIHJldHVybiBwcmVmaXggKyAnWycgKyBrZXkgKyAnXSc7XG4gICAgfSxcbiAgICByZXBlYXQ6IGZ1bmN0aW9uIHJlcGVhdChwcmVmaXgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9XG59O1xuXG52YXIgdG9JU08gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGRlbGltaXRlcjogJyYnLFxuICAgIGVuY29kZTogdHJ1ZSxcbiAgICBlbmNvZGVyOiB1dGlscy5lbmNvZGUsXG4gICAgZW5jb2RlVmFsdWVzT25seTogZmFsc2UsXG4gICAgc2VyaWFsaXplRGF0ZTogZnVuY3Rpb24gc2VyaWFsaXplRGF0ZShkYXRlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgICAgIHJldHVybiB0b0lTTy5jYWxsKGRhdGUpO1xuICAgIH0sXG4gICAgc2tpcE51bGxzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgc3RyaW5naWZ5ID0gZnVuY3Rpb24gc3RyaW5naWZ5KCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgIG9iamVjdCxcbiAgICBwcmVmaXgsXG4gICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgc2tpcE51bGxzLFxuICAgIGVuY29kZXIsXG4gICAgZmlsdGVyLFxuICAgIHNvcnQsXG4gICAgYWxsb3dEb3RzLFxuICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgZm9ybWF0dGVyLFxuICAgIGVuY29kZVZhbHVlc09ubHlcbikge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqID0gZmlsdGVyKHByZWZpeCwgb2JqKTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgb2JqID0gc2VyaWFsaXplRGF0ZShvYmopO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIGlmIChzdHJpY3ROdWxsSGFuZGxpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVyICYmICFlbmNvZGVWYWx1ZXNPbmx5ID8gZW5jb2RlcihwcmVmaXgsIGRlZmF1bHRzLmVuY29kZXIpIDogcHJlZml4O1xuICAgICAgICB9XG5cbiAgICAgICAgb2JqID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvYmogPT09ICdudW1iZXInIHx8IHR5cGVvZiBvYmogPT09ICdib29sZWFuJyB8fCB1dGlscy5pc0J1ZmZlcihvYmopKSB7XG4gICAgICAgIGlmIChlbmNvZGVyKSB7XG4gICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBlbmNvZGVWYWx1ZXNPbmx5ID8gcHJlZml4IDogZW5jb2RlcihwcmVmaXgsIGRlZmF1bHRzLmVuY29kZXIpO1xuICAgICAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIoa2V5VmFsdWUpICsgJz0nICsgZm9ybWF0dGVyKGVuY29kZXIob2JqLCBkZWZhdWx0cy5lbmNvZGVyKSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZm9ybWF0dGVyKHByZWZpeCkgKyAnPScgKyBmb3JtYXR0ZXIoU3RyaW5nKG9iaikpXTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBvYmpLZXlzID0gc29ydCA/IGtleXMuc29ydChzb3J0KSA6IGtleXM7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpLZXlzW2ldO1xuXG4gICAgICAgIGlmIChza2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChzdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeChwcmVmaXgsIGtleSksXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHlcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChzdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICAgICAgcHJlZml4ICsgKGFsbG93RG90cyA/ICcuJyArIGtleSA6ICdbJyArIGtleSArICddJyksXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHlcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgb3B0cykge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRzID8gdXRpbHMuYXNzaWduKHt9LCBvcHRzKSA6IHt9O1xuXG4gICAgaWYgKG9wdGlvbnMuZW5jb2RlciAhPT0gbnVsbCAmJiBvcHRpb25zLmVuY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5lbmNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0VuY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgdmFyIGRlbGltaXRlciA9IHR5cGVvZiBvcHRpb25zLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRpb25zLmRlbGltaXRlcjtcbiAgICB2YXIgc3RyaWN0TnVsbEhhbmRsaW5nID0gdHlwZW9mIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZztcbiAgICB2YXIgc2tpcE51bGxzID0gdHlwZW9mIG9wdGlvbnMuc2tpcE51bGxzID09PSAnYm9vbGVhbicgPyBvcHRpb25zLnNraXBOdWxscyA6IGRlZmF1bHRzLnNraXBOdWxscztcbiAgICB2YXIgZW5jb2RlID0gdHlwZW9mIG9wdGlvbnMuZW5jb2RlID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmVuY29kZSA6IGRlZmF1bHRzLmVuY29kZTtcbiAgICB2YXIgZW5jb2RlciA9IHR5cGVvZiBvcHRpb25zLmVuY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmVuY29kZXIgOiBkZWZhdWx0cy5lbmNvZGVyO1xuICAgIHZhciBzb3J0ID0gdHlwZW9mIG9wdGlvbnMuc29ydCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuc29ydCA6IG51bGw7XG4gICAgdmFyIGFsbG93RG90cyA9IHR5cGVvZiBvcHRpb25zLmFsbG93RG90cyA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IG9wdGlvbnMuYWxsb3dEb3RzO1xuICAgIHZhciBzZXJpYWxpemVEYXRlID0gdHlwZW9mIG9wdGlvbnMuc2VyaWFsaXplRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuc2VyaWFsaXplRGF0ZSA6IGRlZmF1bHRzLnNlcmlhbGl6ZURhdGU7XG4gICAgdmFyIGVuY29kZVZhbHVlc09ubHkgPSB0eXBlb2Ygb3B0aW9ucy5lbmNvZGVWYWx1ZXNPbmx5ID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmVuY29kZVZhbHVlc09ubHkgOiBkZWZhdWx0cy5lbmNvZGVWYWx1ZXNPbmx5O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mb3JtYXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddO1xuICAgIH0gZWxzZSBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtYXRzLmZvcm1hdHRlcnMsIG9wdGlvbnMuZm9ybWF0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGZvcm1hdCBvcHRpb24gcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXRzLmZvcm1hdHRlcnNbb3B0aW9ucy5mb3JtYXRdO1xuICAgIHZhciBvYmpLZXlzO1xuICAgIHZhciBmaWx0ZXI7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmogPSBmaWx0ZXIoJycsIG9iaik7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcbiAgICAgICAgb2JqS2V5cyA9IGZpbHRlcjtcbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5Rm9ybWF0O1xuICAgIGlmIChvcHRpb25zLmFycmF5Rm9ybWF0IGluIGFycmF5UHJlZml4R2VuZXJhdG9ycykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdGlvbnMuYXJyYXlGb3JtYXQ7XG4gICAgfSBlbHNlIGlmICgnaW5kaWNlcycgaW4gb3B0aW9ucykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdGlvbnMuaW5kaWNlcyA/ICdpbmRpY2VzJyA6ICdyZXBlYXQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gJ2luZGljZXMnO1xuICAgIH1cblxuICAgIHZhciBnZW5lcmF0ZUFycmF5UHJlZml4ID0gYXJyYXlQcmVmaXhHZW5lcmF0b3JzW2FycmF5Rm9ybWF0XTtcblxuICAgIGlmICghb2JqS2V5cykge1xuICAgICAgICBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgICBvYmpLZXlzLnNvcnQoc29ydCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpLZXlzW2ldO1xuXG4gICAgICAgIGlmIChza2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KHN0cmluZ2lmeShcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgIHNraXBOdWxscyxcbiAgICAgICAgICAgIGVuY29kZSA/IGVuY29kZXIgOiBudWxsLFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgIGFsbG93RG90cyxcbiAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHZhciBqb2luZWQgPSBrZXlzLmpvaW4oZGVsaW1pdGVyKTtcbiAgICB2YXIgcHJlZml4ID0gb3B0aW9ucy5hZGRRdWVyeVByZWZpeCA9PT0gdHJ1ZSA/ICc/JyA6ICcnO1xuXG4gICAgcmV0dXJuIGpvaW5lZC5sZW5ndGggPiAwID8gcHJlZml4ICsgam9pbmVkIDogJyc7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9zdHJpbmdpZnkuanNcbi8vIG1vZHVsZSBpZCA9IDE1OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhbGxvd0RvdHM6IGZhbHNlLFxuICAgIGFsbG93UHJvdG90eXBlczogZmFsc2UsXG4gICAgYXJyYXlMaW1pdDogMjAsXG4gICAgZGVjb2RlcjogdXRpbHMuZGVjb2RlLFxuICAgIGRlbGltaXRlcjogJyYnLFxuICAgIGRlcHRoOiA1LFxuICAgIHBhcmFtZXRlckxpbWl0OiAxMDAwLFxuICAgIHBsYWluT2JqZWN0czogZmFsc2UsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nOiBmYWxzZVxufTtcblxudmFyIHBhcnNlVmFsdWVzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ1ZhbHVlcyhzdHIsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0ge307XG4gICAgdmFyIGNsZWFuU3RyID0gb3B0aW9ucy5pZ25vcmVRdWVyeVByZWZpeCA/IHN0ci5yZXBsYWNlKC9eXFw/LywgJycpIDogc3RyO1xuICAgIHZhciBsaW1pdCA9IG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09IEluZmluaXR5ID8gdW5kZWZpbmVkIDogb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdDtcbiAgICB2YXIgcGFydHMgPSBjbGVhblN0ci5zcGxpdChvcHRpb25zLmRlbGltaXRlciwgbGltaXQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICAgIHZhciBicmFja2V0RXF1YWxzUG9zID0gcGFydC5pbmRleE9mKCddPScpO1xuICAgICAgICB2YXIgcG9zID0gYnJhY2tldEVxdWFsc1BvcyA9PT0gLTEgPyBwYXJ0LmluZGV4T2YoJz0nKSA6IGJyYWNrZXRFcXVhbHNQb3MgKyAxO1xuXG4gICAgICAgIHZhciBrZXksIHZhbDtcbiAgICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LCBkZWZhdWx0cy5kZWNvZGVyKTtcbiAgICAgICAgICAgIHZhbCA9IG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID8gbnVsbCA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQuc2xpY2UoMCwgcG9zKSwgZGVmYXVsdHMuZGVjb2Rlcik7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLmRlY29kZXIocGFydC5zbGljZShwb3MgKyAxKSwgZGVmYXVsdHMuZGVjb2Rlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBbXS5jb25jYXQob2JqW2tleV0pLmNvbmNhdCh2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIHBhcnNlT2JqZWN0ID0gZnVuY3Rpb24gKGNoYWluLCB2YWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGVhZiA9IHZhbDtcblxuICAgIGZvciAodmFyIGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgb2JqO1xuICAgICAgICB2YXIgcm9vdCA9IGNoYWluW2ldO1xuXG4gICAgICAgIGlmIChyb290ID09PSAnW10nKSB7XG4gICAgICAgICAgICBvYmogPSBbXTtcbiAgICAgICAgICAgIG9iaiA9IG9iai5jb25jYXQobGVhZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICAgICAgICAgIHZhciBjbGVhblJvb3QgPSByb290LmNoYXJBdCgwKSA9PT0gJ1snICYmIHJvb3QuY2hhckF0KHJvb3QubGVuZ3RoIC0gMSkgPT09ICddJyA/IHJvb3Quc2xpY2UoMSwgLTEpIDogcm9vdDtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHBhcnNlSW50KGNsZWFuUm9vdCwgMTApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFpc05hTihpbmRleClcbiAgICAgICAgICAgICAgICAmJiByb290ICE9PSBjbGVhblJvb3RcbiAgICAgICAgICAgICAgICAmJiBTdHJpbmcoaW5kZXgpID09PSBjbGVhblJvb3RcbiAgICAgICAgICAgICAgICAmJiBpbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgJiYgKG9wdGlvbnMucGFyc2VBcnJheXMgJiYgaW5kZXggPD0gb3B0aW9ucy5hcnJheUxpbWl0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gW107XG4gICAgICAgICAgICAgICAgb2JqW2luZGV4XSA9IGxlYWY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ialtjbGVhblJvb3RdID0gbGVhZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxlYWYgPSBvYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlYWY7XG59O1xuXG52YXIgcGFyc2VLZXlzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ0tleXMoZ2l2ZW5LZXksIHZhbCwgb3B0aW9ucykge1xuICAgIGlmICghZ2l2ZW5LZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyYW5zZm9ybSBkb3Qgbm90YXRpb24gdG8gYnJhY2tldCBub3RhdGlvblxuICAgIHZhciBrZXkgPSBvcHRpb25zLmFsbG93RG90cyA/IGdpdmVuS2V5LnJlcGxhY2UoL1xcLihbXi5bXSspL2csICdbJDFdJykgOiBnaXZlbktleTtcblxuICAgIC8vIFRoZSByZWdleCBjaHVua3NcblxuICAgIHZhciBicmFja2V0cyA9IC8oXFxbW15bXFxdXSpdKS87XG4gICAgdmFyIGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2c7XG5cbiAgICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gICAgdmFyIHNlZ21lbnQgPSBicmFja2V0cy5leGVjKGtleSk7XG4gICAgdmFyIHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXk7XG5cbiAgICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBwbGFpbiBvYmplY3RzLCBvcHRpb25hbGx5IHByZWZpeCBrZXlzXG4gICAgICAgIC8vIHRoYXQgd291bGQgb3ZlcndyaXRlIG9iamVjdCBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzLnB1c2gocGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoKHNlZ21lbnQgPSBjaGlsZC5leGVjKGtleSkpICE9PSBudWxsICYmIGkgPCBvcHRpb25zLmRlcHRoKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzZWdtZW50WzFdLnNsaWNlKDEsIC0xKSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKHNlZ21lbnRbMV0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGp1c3QgYWRkIHdoYXRldmVyIGlzIGxlZnRcblxuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIGtleXMucHVzaCgnWycgKyBrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkgKyAnXScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU9iamVjdChrZXlzLCB2YWwsIG9wdGlvbnMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRzID8gdXRpbHMuYXNzaWduKHt9LCBvcHRzKSA6IHt9O1xuXG4gICAgaWYgKG9wdGlvbnMuZGVjb2RlciAhPT0gbnVsbCAmJiBvcHRpb25zLmRlY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5pZ25vcmVRdWVyeVByZWZpeCA9IG9wdGlvbnMuaWdub3JlUXVlcnlQcmVmaXggPT09IHRydWU7XG4gICAgb3B0aW9ucy5kZWxpbWl0ZXIgPSB0eXBlb2Ygb3B0aW9ucy5kZWxpbWl0ZXIgPT09ICdzdHJpbmcnIHx8IHV0aWxzLmlzUmVnRXhwKG9wdGlvbnMuZGVsaW1pdGVyKSA/IG9wdGlvbnMuZGVsaW1pdGVyIDogZGVmYXVsdHMuZGVsaW1pdGVyO1xuICAgIG9wdGlvbnMuZGVwdGggPSB0eXBlb2Ygb3B0aW9ucy5kZXB0aCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmRlcHRoIDogZGVmYXVsdHMuZGVwdGg7XG4gICAgb3B0aW9ucy5hcnJheUxpbWl0ID0gdHlwZW9mIG9wdGlvbnMuYXJyYXlMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmFycmF5TGltaXQgOiBkZWZhdWx0cy5hcnJheUxpbWl0O1xuICAgIG9wdGlvbnMucGFyc2VBcnJheXMgPSBvcHRpb25zLnBhcnNlQXJyYXlzICE9PSBmYWxzZTtcbiAgICBvcHRpb25zLmRlY29kZXIgPSB0eXBlb2Ygb3B0aW9ucy5kZWNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5kZWNvZGVyIDogZGVmYXVsdHMuZGVjb2RlcjtcbiAgICBvcHRpb25zLmFsbG93RG90cyA9IHR5cGVvZiBvcHRpb25zLmFsbG93RG90cyA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5hbGxvd0RvdHMgOiBkZWZhdWx0cy5hbGxvd0RvdHM7XG4gICAgb3B0aW9ucy5wbGFpbk9iamVjdHMgPSB0eXBlb2Ygb3B0aW9ucy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdGlvbnMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzO1xuICAgIG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzID0gdHlwZW9mIG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmFsbG93UHJvdG90eXBlcyA6IGRlZmF1bHRzLmFsbG93UHJvdG90eXBlcztcbiAgICBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID0gdHlwZW9mIG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09ICdudW1iZXInID8gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA6IGRlZmF1bHRzLnBhcmFtZXRlckxpbWl0O1xuICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID0gdHlwZW9mIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZztcblxuICAgIGlmIChzdHIgPT09ICcnIHx8IHN0ciA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgfVxuXG4gICAgdmFyIHRlbXBPYmogPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHBhcnNlVmFsdWVzKHN0ciwgb3B0aW9ucykgOiBzdHI7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBrZXlzIGFuZCBzZXR1cCB0aGUgbmV3IG9iamVjdFxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0ZW1wT2JqKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIHZhciBuZXdPYmogPSBwYXJzZUtleXMoa2V5LCB0ZW1wT2JqW2tleV0sIG9wdGlvbnMpO1xuICAgICAgICBvYmogPSB1dGlscy5tZXJnZShvYmosIG5ld09iaiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHV0aWxzLmNvbXBhY3Qob2JqKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvcXMvbGliL3BhcnNlLmpzXG4vLyBtb2R1bGUgaWQgPSAxNjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBtZXJnZS1kZXNjcmlwdG9yc1xuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcblxuLyoqXG4gKiBNZXJnZSB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgb2YgYHNyY2AgaW50byBgZGVzdGBcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGVzdCBPYmplY3QgdG8gYWRkIGRlc2NyaXB0b3JzIHRvXG4gKiBAcGFyYW0ge29iamVjdH0gc3JjIE9iamVjdCB0byBjbG9uZSBkZXNjcmlwdG9ycyBmcm9tXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWRlZmluZT10cnVlXSBSZWRlZmluZSBgZGVzdGAgcHJvcGVydGllcyB3aXRoIGBzcmNgIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtvYmplY3R9IFJlZmVyZW5jZSB0byBkZXN0XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gbWVyZ2UoZGVzdCwgc3JjLCByZWRlZmluZSkge1xuICBpZiAoIWRlc3QpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBkZXN0IGlzIHJlcXVpcmVkJylcbiAgfVxuXG4gIGlmICghc3JjKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc3JjIGlzIHJlcXVpcmVkJylcbiAgfVxuXG4gIGlmIChyZWRlZmluZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gRGVmYXVsdCB0byB0cnVlXG4gICAgcmVkZWZpbmUgPSB0cnVlXG4gIH1cblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzcmMpLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaE93blByb3BlcnR5TmFtZShuYW1lKSB7XG4gICAgaWYgKCFyZWRlZmluZSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRlc3QsIG5hbWUpKSB7XG4gICAgICAvLyBTa2lwIGRlc3JpcHRvclxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ29weSBkZXNjcmlwdG9yXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNyYywgbmFtZSlcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVzdCwgbmFtZSwgZGVzY3JpcHRvcilcbiAgfSlcblxuICByZXR1cm4gZGVzdFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL21lcmdlLWRlc2NyaXB0b3JzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxNjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBleHByZXNzXG4gKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEzIFRKIEhvbG93YXljaHVrXG4gKiBDb3B5cmlnaHQoYykgMjAxMyBSb21hbiBTaHR5bG1hblxuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBmaW5hbGhhbmRsZXIgPSByZXF1aXJlKCdmaW5hbGhhbmRsZXInKTtcbnZhciBSb3V0ZXIgPSByZXF1aXJlKCcuL3JvdXRlcicpO1xudmFyIG1ldGhvZHMgPSByZXF1aXJlKCdtZXRob2RzJyk7XG52YXIgbWlkZGxld2FyZSA9IHJlcXVpcmUoJy4vbWlkZGxld2FyZS9pbml0Jyk7XG52YXIgcXVlcnkgPSByZXF1aXJlKCcuL21pZGRsZXdhcmUvcXVlcnknKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ2V4cHJlc3M6YXBwbGljYXRpb24nKTtcbnZhciBWaWV3ID0gcmVxdWlyZSgnLi92aWV3Jyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBjb21waWxlRVRhZyA9IHJlcXVpcmUoJy4vdXRpbHMnKS5jb21waWxlRVRhZztcbnZhciBjb21waWxlUXVlcnlQYXJzZXIgPSByZXF1aXJlKCcuL3V0aWxzJykuY29tcGlsZVF1ZXJ5UGFyc2VyO1xudmFyIGNvbXBpbGVUcnVzdCA9IHJlcXVpcmUoJy4vdXRpbHMnKS5jb21waWxlVHJ1c3Q7XG52YXIgZGVwcmVjYXRlID0gcmVxdWlyZSgnZGVwZCcpKCdleHByZXNzJyk7XG52YXIgZmxhdHRlbiA9IHJlcXVpcmUoJ2FycmF5LWZsYXR0ZW4nKTtcbnZhciBtZXJnZSA9IHJlcXVpcmUoJ3V0aWxzLW1lcmdlJyk7XG52YXIgcmVzb2x2ZSA9IHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnc2V0cHJvdG90eXBlb2YnKVxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIEFwcGxpY2F0aW9uIHByb3RvdHlwZS5cbiAqL1xuXG52YXIgYXBwID0gZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8qKlxuICogVmFyaWFibGUgZm9yIHRydXN0IHByb3h5IGluaGVyaXRhbmNlIGJhY2stY29tcGF0XG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciB0cnVzdFByb3h5RGVmYXVsdFN5bWJvbCA9ICdAQHN5bWJvbDp0cnVzdF9wcm94eV9kZWZhdWx0JztcblxuLyoqXG4gKiBJbml0aWFsaXplIHRoZSBzZXJ2ZXIuXG4gKlxuICogICAtIHNldHVwIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICogICAtIHNldHVwIGRlZmF1bHQgbWlkZGxld2FyZVxuICogICAtIHNldHVwIHJvdXRlIHJlZmxlY3Rpb24gbWV0aG9kc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuYXBwLmluaXQgPSBmdW5jdGlvbiBpbml0KCkge1xuICB0aGlzLmNhY2hlID0ge307XG4gIHRoaXMuZW5naW5lcyA9IHt9O1xuICB0aGlzLnNldHRpbmdzID0ge307XG5cbiAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbigpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5cbmFwcC5kZWZhdWx0Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIGRlZmF1bHRDb25maWd1cmF0aW9uKCkge1xuICB2YXIgZW52ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHwgJ2RldmVsb3BtZW50JztcblxuICAvLyBkZWZhdWx0IHNldHRpbmdzXG4gIHRoaXMuZW5hYmxlKCd4LXBvd2VyZWQtYnknKTtcbiAgdGhpcy5zZXQoJ2V0YWcnLCAnd2VhaycpO1xuICB0aGlzLnNldCgnZW52JywgZW52KTtcbiAgdGhpcy5zZXQoJ3F1ZXJ5IHBhcnNlcicsICdleHRlbmRlZCcpO1xuICB0aGlzLnNldCgnc3ViZG9tYWluIG9mZnNldCcsIDIpO1xuICB0aGlzLnNldCgndHJ1c3QgcHJveHknLCBmYWxzZSk7XG5cbiAgLy8gdHJ1c3QgcHJveHkgaW5oZXJpdCBiYWNrLWNvbXBhdFxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5zZXR0aW5ncywgdHJ1c3RQcm94eURlZmF1bHRTeW1ib2wsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHRydWVcbiAgfSk7XG5cbiAgZGVidWcoJ2Jvb3RpbmcgaW4gJXMgbW9kZScsIGVudik7XG5cbiAgdGhpcy5vbignbW91bnQnLCBmdW5jdGlvbiBvbm1vdW50KHBhcmVudCkge1xuICAgIC8vIGluaGVyaXQgdHJ1c3QgcHJveHlcbiAgICBpZiAodGhpcy5zZXR0aW5nc1t0cnVzdFByb3h5RGVmYXVsdFN5bWJvbF0gPT09IHRydWVcbiAgICAgICYmIHR5cGVvZiBwYXJlbnQuc2V0dGluZ3NbJ3RydXN0IHByb3h5IGZuJ10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnNldHRpbmdzWyd0cnVzdCBwcm94eSddO1xuICAgICAgZGVsZXRlIHRoaXMuc2V0dGluZ3NbJ3RydXN0IHByb3h5IGZuJ107XG4gICAgfVxuXG4gICAgLy8gaW5oZXJpdCBwcm90b3NcbiAgICBzZXRQcm90b3R5cGVPZih0aGlzLnJlcXVlc3QsIHBhcmVudC5yZXF1ZXN0KVxuICAgIHNldFByb3RvdHlwZU9mKHRoaXMucmVzcG9uc2UsIHBhcmVudC5yZXNwb25zZSlcbiAgICBzZXRQcm90b3R5cGVPZih0aGlzLmVuZ2luZXMsIHBhcmVudC5lbmdpbmVzKVxuICAgIHNldFByb3RvdHlwZU9mKHRoaXMuc2V0dGluZ3MsIHBhcmVudC5zZXR0aW5ncylcbiAgfSk7XG5cbiAgLy8gc2V0dXAgbG9jYWxzXG4gIHRoaXMubG9jYWxzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvLyB0b3AtbW9zdCBhcHAgaXMgbW91bnRlZCBhdCAvXG4gIHRoaXMubW91bnRwYXRoID0gJy8nO1xuXG4gIC8vIGRlZmF1bHQgbG9jYWxzXG4gIHRoaXMubG9jYWxzLnNldHRpbmdzID0gdGhpcy5zZXR0aW5ncztcblxuICAvLyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgdGhpcy5zZXQoJ3ZpZXcnLCBWaWV3KTtcbiAgdGhpcy5zZXQoJ3ZpZXdzJywgcmVzb2x2ZSgndmlld3MnKSk7XG4gIHRoaXMuc2V0KCdqc29ucCBjYWxsYmFjayBuYW1lJywgJ2NhbGxiYWNrJyk7XG5cbiAgaWYgKGVudiA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdGhpcy5lbmFibGUoJ3ZpZXcgY2FjaGUnKTtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncm91dGVyJywge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1xcJ2FwcC5yb3V0ZXJcXCcgaXMgZGVwcmVjYXRlZCFcXG5QbGVhc2Ugc2VlIHRoZSAzLnggdG8gNC54IG1pZ3JhdGlvbiBndWlkZSBmb3IgZGV0YWlscyBvbiBob3cgdG8gdXBkYXRlIHlvdXIgYXBwLicpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIGxhemlseSBhZGRzIHRoZSBiYXNlIHJvdXRlciBpZiBpdCBoYXMgbm90IHlldCBiZWVuIGFkZGVkLlxuICpcbiAqIFdlIGNhbm5vdCBhZGQgdGhlIGJhc2Ugcm91dGVyIGluIHRoZSBkZWZhdWx0Q29uZmlndXJhdGlvbiBiZWNhdXNlXG4gKiBpdCByZWFkcyBhcHAgc2V0dGluZ3Mgd2hpY2ggbWlnaHQgYmUgc2V0IGFmdGVyIHRoYXQgaGFzIHJ1bi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5hcHAubGF6eXJvdXRlciA9IGZ1bmN0aW9uIGxhenlyb3V0ZXIoKSB7XG4gIGlmICghdGhpcy5fcm91dGVyKSB7XG4gICAgdGhpcy5fcm91dGVyID0gbmV3IFJvdXRlcih7XG4gICAgICBjYXNlU2Vuc2l0aXZlOiB0aGlzLmVuYWJsZWQoJ2Nhc2Ugc2Vuc2l0aXZlIHJvdXRpbmcnKSxcbiAgICAgIHN0cmljdDogdGhpcy5lbmFibGVkKCdzdHJpY3Qgcm91dGluZycpXG4gICAgfSk7XG5cbiAgICB0aGlzLl9yb3V0ZXIudXNlKHF1ZXJ5KHRoaXMuZ2V0KCdxdWVyeSBwYXJzZXIgZm4nKSkpO1xuICAgIHRoaXMuX3JvdXRlci51c2UobWlkZGxld2FyZS5pbml0KHRoaXMpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcSwgcmVzIHBhaXIgaW50byB0aGUgYXBwbGljYXRpb24uIFN0YXJ0cyBwaXBlbGluZSBwcm9jZXNzaW5nLlxuICpcbiAqIElmIG5vIGNhbGxiYWNrIGlzIHByb3ZpZGVkLCB0aGVuIGRlZmF1bHQgZXJyb3IgaGFuZGxlcnMgd2lsbCByZXNwb25kXG4gKiBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IgYnViYmxpbmcgdGhyb3VnaCB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5hcHAuaGFuZGxlID0gZnVuY3Rpb24gaGFuZGxlKHJlcSwgcmVzLCBjYWxsYmFjaykge1xuICB2YXIgcm91dGVyID0gdGhpcy5fcm91dGVyO1xuXG4gIC8vIGZpbmFsIGhhbmRsZXJcbiAgdmFyIGRvbmUgPSBjYWxsYmFjayB8fCBmaW5hbGhhbmRsZXIocmVxLCByZXMsIHtcbiAgICBlbnY6IHRoaXMuZ2V0KCdlbnYnKSxcbiAgICBvbmVycm9yOiBsb2dlcnJvci5iaW5kKHRoaXMpXG4gIH0pO1xuXG4gIC8vIG5vIHJvdXRlc1xuICBpZiAoIXJvdXRlcikge1xuICAgIGRlYnVnKCdubyByb3V0ZXMgZGVmaW5lZCBvbiBhcHAnKTtcbiAgICBkb25lKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcm91dGVyLmhhbmRsZShyZXEsIHJlcywgZG9uZSk7XG59O1xuXG4vKipcbiAqIFByb3h5IGBSb3V0ZXIjdXNlKClgIHRvIGFkZCBtaWRkbGV3YXJlIHRvIHRoZSBhcHAgcm91dGVyLlxuICogU2VlIFJvdXRlciN1c2UoKSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLlxuICpcbiAqIElmIHRoZSBfZm5fIHBhcmFtZXRlciBpcyBhbiBleHByZXNzIGFwcCwgdGhlbiBpdCB3aWxsIGJlXG4gKiBtb3VudGVkIGF0IHRoZSBfcm91dGVfIHNwZWNpZmllZC5cbiAqXG4gKiBAcHVibGljXG4gKi9cblxuYXBwLnVzZSA9IGZ1bmN0aW9uIHVzZShmbikge1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgdmFyIHBhdGggPSAnLyc7XG5cbiAgLy8gZGVmYXVsdCBwYXRoIHRvICcvJ1xuICAvLyBkaXNhbWJpZ3VhdGUgYXBwLnVzZShbZm5dKVxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGFyZyA9IGZuO1xuXG4gICAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJnKSAmJiBhcmcubGVuZ3RoICE9PSAwKSB7XG4gICAgICBhcmcgPSBhcmdbMF07XG4gICAgfVxuXG4gICAgLy8gZmlyc3QgYXJnIGlzIHRoZSBwYXRoXG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9mZnNldCA9IDE7XG4gICAgICBwYXRoID0gZm47XG4gICAgfVxuICB9XG5cbiAgdmFyIGZucyA9IGZsYXR0ZW4oc2xpY2UuY2FsbChhcmd1bWVudHMsIG9mZnNldCkpO1xuXG4gIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXBwLnVzZSgpIHJlcXVpcmVzIGEgbWlkZGxld2FyZSBmdW5jdGlvbicpXG4gIH1cblxuICAvLyBzZXR1cCByb3V0ZXJcbiAgdGhpcy5sYXp5cm91dGVyKCk7XG4gIHZhciByb3V0ZXIgPSB0aGlzLl9yb3V0ZXI7XG5cbiAgZm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgLy8gbm9uLWV4cHJlc3MgYXBwXG4gICAgaWYgKCFmbiB8fCAhZm4uaGFuZGxlIHx8ICFmbi5zZXQpIHtcbiAgICAgIHJldHVybiByb3V0ZXIudXNlKHBhdGgsIGZuKTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnLnVzZSBhcHAgdW5kZXIgJXMnLCBwYXRoKTtcbiAgICBmbi5tb3VudHBhdGggPSBwYXRoO1xuICAgIGZuLnBhcmVudCA9IHRoaXM7XG5cbiAgICAvLyByZXN0b3JlIC5hcHAgcHJvcGVydHkgb24gcmVxIGFuZCByZXNcbiAgICByb3V0ZXIudXNlKHBhdGgsIGZ1bmN0aW9uIG1vdW50ZWRfYXBwKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICB2YXIgb3JpZyA9IHJlcS5hcHA7XG4gICAgICBmbi5oYW5kbGUocmVxLCByZXMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgc2V0UHJvdG90eXBlT2YocmVxLCBvcmlnLnJlcXVlc3QpXG4gICAgICAgIHNldFByb3RvdHlwZU9mKHJlcywgb3JpZy5yZXNwb25zZSlcbiAgICAgICAgbmV4dChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBtb3VudGVkIGFuIGFwcFxuICAgIGZuLmVtaXQoJ21vdW50JywgdGhpcyk7XG4gIH0sIHRoaXMpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcm94eSB0byB0aGUgYXBwIGBSb3V0ZXIjcm91dGUoKWBcbiAqIFJldHVybnMgYSBuZXcgYFJvdXRlYCBpbnN0YW5jZSBmb3IgdGhlIF9wYXRoXy5cbiAqXG4gKiBSb3V0ZXMgYXJlIGlzb2xhdGVkIG1pZGRsZXdhcmUgc3RhY2tzIGZvciBzcGVjaWZpYyBwYXRocy5cbiAqIFNlZSB0aGUgUm91dGUgYXBpIGRvY3MgZm9yIGRldGFpbHMuXG4gKlxuICogQHB1YmxpY1xuICovXG5cbmFwcC5yb3V0ZSA9IGZ1bmN0aW9uIHJvdXRlKHBhdGgpIHtcbiAgdGhpcy5sYXp5cm91dGVyKCk7XG4gIHJldHVybiB0aGlzLl9yb3V0ZXIucm91dGUocGF0aCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBnaXZlbiB0ZW1wbGF0ZSBlbmdpbmUgY2FsbGJhY2sgYGZuYFxuICogYXMgYGV4dGAuXG4gKlxuICogQnkgZGVmYXVsdCB3aWxsIGByZXF1aXJlKClgIHRoZSBlbmdpbmUgYmFzZWQgb24gdGhlXG4gKiBmaWxlIGV4dGVuc2lvbi4gRm9yIGV4YW1wbGUgaWYgeW91IHRyeSB0byByZW5kZXJcbiAqIGEgXCJmb28uZWpzXCIgZmlsZSBFeHByZXNzIHdpbGwgaW52b2tlIHRoZSBmb2xsb3dpbmcgaW50ZXJuYWxseTpcbiAqXG4gKiAgICAgYXBwLmVuZ2luZSgnZWpzJywgcmVxdWlyZSgnZWpzJykuX19leHByZXNzKTtcbiAqXG4gKiBGb3IgZW5naW5lcyB0aGF0IGRvIG5vdCBwcm92aWRlIGAuX19leHByZXNzYCBvdXQgb2YgdGhlIGJveCxcbiAqIG9yIGlmIHlvdSB3aXNoIHRvIFwibWFwXCIgYSBkaWZmZXJlbnQgZXh0ZW5zaW9uIHRvIHRoZSB0ZW1wbGF0ZSBlbmdpbmVcbiAqIHlvdSBtYXkgdXNlIHRoaXMgbWV0aG9kLiBGb3IgZXhhbXBsZSBtYXBwaW5nIHRoZSBFSlMgdGVtcGxhdGUgZW5naW5lIHRvXG4gKiBcIi5odG1sXCIgZmlsZXM6XG4gKlxuICogICAgIGFwcC5lbmdpbmUoJ2h0bWwnLCByZXF1aXJlKCdlanMnKS5yZW5kZXJGaWxlKTtcbiAqXG4gKiBJbiB0aGlzIGNhc2UgRUpTIHByb3ZpZGVzIGEgYC5yZW5kZXJGaWxlKClgIG1ldGhvZCB3aXRoXG4gKiB0aGUgc2FtZSBzaWduYXR1cmUgdGhhdCBFeHByZXNzIGV4cGVjdHM6IGAocGF0aCwgb3B0aW9ucywgY2FsbGJhY2spYCxcbiAqIHRob3VnaCBub3RlIHRoYXQgaXQgYWxpYXNlcyB0aGlzIG1ldGhvZCBhcyBgZWpzLl9fZXhwcmVzc2AgaW50ZXJuYWxseVxuICogc28gaWYgeW91J3JlIHVzaW5nIFwiLmVqc1wiIGV4dGVuc2lvbnMgeW91IGRvbnQgbmVlZCB0byBkbyBhbnl0aGluZy5cbiAqXG4gKiBTb21lIHRlbXBsYXRlIGVuZ2luZXMgZG8gbm90IGZvbGxvdyB0aGlzIGNvbnZlbnRpb24sIHRoZVxuICogW0NvbnNvbGlkYXRlLmpzXShodHRwczovL2dpdGh1Yi5jb20vdGovY29uc29saWRhdGUuanMpXG4gKiBsaWJyYXJ5IHdhcyBjcmVhdGVkIHRvIG1hcCBhbGwgb2Ygbm9kZSdzIHBvcHVsYXIgdGVtcGxhdGVcbiAqIGVuZ2luZXMgdG8gZm9sbG93IHRoaXMgY29udmVudGlvbiwgdGh1cyBhbGxvd2luZyB0aGVtIHRvXG4gKiB3b3JrIHNlYW1sZXNzbHkgd2l0aGluIEV4cHJlc3MuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4dFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge2FwcH0gZm9yIGNoYWluaW5nXG4gKiBAcHVibGljXG4gKi9cblxuYXBwLmVuZ2luZSA9IGZ1bmN0aW9uIGVuZ2luZShleHQsIGZuKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxiYWNrIGZ1bmN0aW9uIHJlcXVpcmVkJyk7XG4gIH1cblxuICAvLyBnZXQgZmlsZSBleHRlbnNpb25cbiAgdmFyIGV4dGVuc2lvbiA9IGV4dFswXSAhPT0gJy4nXG4gICAgPyAnLicgKyBleHRcbiAgICA6IGV4dDtcblxuICAvLyBzdG9yZSBlbmdpbmVcbiAgdGhpcy5lbmdpbmVzW2V4dGVuc2lvbl0gPSBmbjtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJveHkgdG8gYFJvdXRlciNwYXJhbSgpYCB3aXRoIG9uZSBhZGRlZCBhcGkgZmVhdHVyZS4gVGhlIF9uYW1lXyBwYXJhbWV0ZXJcbiAqIGNhbiBiZSBhbiBhcnJheSBvZiBuYW1lcy5cbiAqXG4gKiBTZWUgdGhlIFJvdXRlciNwYXJhbSgpIGRvY3MgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge2FwcH0gZm9yIGNoYWluaW5nXG4gKiBAcHVibGljXG4gKi9cblxuYXBwLnBhcmFtID0gZnVuY3Rpb24gcGFyYW0obmFtZSwgZm4pIHtcbiAgdGhpcy5sYXp5cm91dGVyKCk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFyYW0obmFtZVtpXSwgZm4pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fcm91dGVyLnBhcmFtKG5hbWUsIGZuKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXNzaWduIGBzZXR0aW5nYCB0byBgdmFsYCwgb3IgcmV0dXJuIGBzZXR0aW5nYCdzIHZhbHVlLlxuICpcbiAqICAgIGFwcC5zZXQoJ2ZvbycsICdiYXInKTtcbiAqICAgIGFwcC5zZXQoJ2ZvbycpO1xuICogICAgLy8gPT4gXCJiYXJcIlxuICpcbiAqIE1vdW50ZWQgc2VydmVycyBpbmhlcml0IHRoZWlyIHBhcmVudCBzZXJ2ZXIncyBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2V0dGluZ1xuICogQHBhcmFtIHsqfSBbdmFsXVxuICogQHJldHVybiB7U2VydmVyfSBmb3IgY2hhaW5pbmdcbiAqIEBwdWJsaWNcbiAqL1xuXG5hcHAuc2V0ID0gZnVuY3Rpb24gc2V0KHNldHRpbmcsIHZhbCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIGFwcC5nZXQoc2V0dGluZylcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5nc1tzZXR0aW5nXTtcbiAgfVxuXG4gIGRlYnVnKCdzZXQgXCIlc1wiIHRvICVvJywgc2V0dGluZywgdmFsKTtcblxuICAvLyBzZXQgdmFsdWVcbiAgdGhpcy5zZXR0aW5nc1tzZXR0aW5nXSA9IHZhbDtcblxuICAvLyB0cmlnZ2VyIG1hdGNoZWQgc2V0dGluZ3NcbiAgc3dpdGNoIChzZXR0aW5nKSB7XG4gICAgY2FzZSAnZXRhZyc6XG4gICAgICB0aGlzLnNldCgnZXRhZyBmbicsIGNvbXBpbGVFVGFnKHZhbCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncXVlcnkgcGFyc2VyJzpcbiAgICAgIHRoaXMuc2V0KCdxdWVyeSBwYXJzZXIgZm4nLCBjb21waWxlUXVlcnlQYXJzZXIodmFsKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0cnVzdCBwcm94eSc6XG4gICAgICB0aGlzLnNldCgndHJ1c3QgcHJveHkgZm4nLCBjb21waWxlVHJ1c3QodmFsKSk7XG5cbiAgICAgIC8vIHRydXN0IHByb3h5IGluaGVyaXQgYmFjay1jb21wYXRcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnNldHRpbmdzLCB0cnVzdFByb3h5RGVmYXVsdFN5bWJvbCwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgYXBwJ3MgYWJzb2x1dGUgcGF0aG5hbWVcbiAqIGJhc2VkIG9uIHRoZSBwYXJlbnQocykgdGhhdCBoYXZlXG4gKiBtb3VudGVkIGl0LlxuICpcbiAqIEZvciBleGFtcGxlIGlmIHRoZSBhcHBsaWNhdGlvbiB3YXNcbiAqIG1vdW50ZWQgYXMgXCIvYWRtaW5cIiwgd2hpY2ggaXRzZWxmXG4gKiB3YXMgbW91bnRlZCBhcyBcIi9ibG9nXCIgdGhlbiB0aGVcbiAqIHJldHVybiB2YWx1ZSB3b3VsZCBiZSBcIi9ibG9nL2FkbWluXCIuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5hcHAucGF0aCA9IGZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudFxuICAgID8gdGhpcy5wYXJlbnQucGF0aCgpICsgdGhpcy5tb3VudHBhdGhcbiAgICA6ICcnO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBgc2V0dGluZ2AgaXMgZW5hYmxlZCAodHJ1dGh5KS5cbiAqXG4gKiAgICBhcHAuZW5hYmxlZCgnZm9vJylcbiAqICAgIC8vID0+IGZhbHNlXG4gKlxuICogICAgYXBwLmVuYWJsZSgnZm9vJylcbiAqICAgIGFwcC5lbmFibGVkKCdmb28nKVxuICogICAgLy8gPT4gdHJ1ZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZXR0aW5nXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHB1YmxpY1xuICovXG5cbmFwcC5lbmFibGVkID0gZnVuY3Rpb24gZW5hYmxlZChzZXR0aW5nKSB7XG4gIHJldHVybiBCb29sZWFuKHRoaXMuc2V0KHNldHRpbmcpKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYHNldHRpbmdgIGlzIGRpc2FibGVkLlxuICpcbiAqICAgIGFwcC5kaXNhYmxlZCgnZm9vJylcbiAqICAgIC8vID0+IHRydWVcbiAqXG4gKiAgICBhcHAuZW5hYmxlKCdmb28nKVxuICogICAgYXBwLmRpc2FibGVkKCdmb28nKVxuICogICAgLy8gPT4gZmFsc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2V0dGluZ1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBwdWJsaWNcbiAqL1xuXG5hcHAuZGlzYWJsZWQgPSBmdW5jdGlvbiBkaXNhYmxlZChzZXR0aW5nKSB7XG4gIHJldHVybiAhdGhpcy5zZXQoc2V0dGluZyk7XG59O1xuXG4vKipcbiAqIEVuYWJsZSBgc2V0dGluZ2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNldHRpbmdcbiAqIEByZXR1cm4ge2FwcH0gZm9yIGNoYWluaW5nXG4gKiBAcHVibGljXG4gKi9cblxuYXBwLmVuYWJsZSA9IGZ1bmN0aW9uIGVuYWJsZShzZXR0aW5nKSB7XG4gIHJldHVybiB0aGlzLnNldChzZXR0aW5nLCB0cnVlKTtcbn07XG5cbi8qKlxuICogRGlzYWJsZSBgc2V0dGluZ2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNldHRpbmdcbiAqIEByZXR1cm4ge2FwcH0gZm9yIGNoYWluaW5nXG4gKiBAcHVibGljXG4gKi9cblxuYXBwLmRpc2FibGUgPSBmdW5jdGlvbiBkaXNhYmxlKHNldHRpbmcpIHtcbiAgcmV0dXJuIHRoaXMuc2V0KHNldHRpbmcsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogRGVsZWdhdGUgYC5WRVJCKC4uLilgIGNhbGxzIHRvIGByb3V0ZXIuVkVSQiguLi4pYC5cbiAqL1xuXG5tZXRob2RzLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKXtcbiAgYXBwW21ldGhvZF0gPSBmdW5jdGlvbihwYXRoKXtcbiAgICBpZiAobWV0aG9kID09PSAnZ2V0JyAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBhcHAuZ2V0KHNldHRpbmcpXG4gICAgICByZXR1cm4gdGhpcy5zZXQocGF0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5sYXp5cm91dGVyKCk7XG5cbiAgICB2YXIgcm91dGUgPSB0aGlzLl9yb3V0ZXIucm91dGUocGF0aCk7XG4gICAgcm91dGVbbWV0aG9kXS5hcHBseShyb3V0ZSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn0pO1xuXG4vKipcbiAqIFNwZWNpYWwtY2FzZWQgXCJhbGxcIiBtZXRob2QsIGFwcGx5aW5nIHRoZSBnaXZlbiByb3V0ZSBgcGF0aGAsXG4gKiBtaWRkbGV3YXJlLCBhbmQgY2FsbGJhY2sgdG8gX2V2ZXJ5XyBIVFRQIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gLi4uXG4gKiBAcmV0dXJuIHthcHB9IGZvciBjaGFpbmluZ1xuICogQHB1YmxpY1xuICovXG5cbmFwcC5hbGwgPSBmdW5jdGlvbiBhbGwocGF0aCkge1xuICB0aGlzLmxhenlyb3V0ZXIoKTtcblxuICB2YXIgcm91dGUgPSB0aGlzLl9yb3V0ZXIucm91dGUocGF0aCk7XG4gIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykge1xuICAgIHJvdXRlW21ldGhvZHNbaV1dLmFwcGx5KHJvdXRlLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZGVsIC0+IGRlbGV0ZSBhbGlhc1xuXG5hcHAuZGVsID0gZGVwcmVjYXRlLmZ1bmN0aW9uKGFwcC5kZWxldGUsICdhcHAuZGVsOiBVc2UgYXBwLmRlbGV0ZSBpbnN0ZWFkJyk7XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiB2aWV3IGBuYW1lYCBuYW1lIHdpdGggYG9wdGlvbnNgXG4gKiBhbmQgYSBjYWxsYmFjayBhY2NlcHRpbmcgYW4gZXJyb3IgYW5kIHRoZVxuICogcmVuZGVyZWQgdGVtcGxhdGUgc3RyaW5nLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgYXBwLnJlbmRlcignZW1haWwnLCB7IG5hbWU6ICdUb2JpJyB9LCBmdW5jdGlvbihlcnIsIGh0bWwpe1xuICogICAgICAvLyAuLi5cbiAqICAgIH0pXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSBvcHRpb25zIG9yIGZuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHB1YmxpY1xuICovXG5cbmFwcC5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIobmFtZSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTtcbiAgdmFyIGRvbmUgPSBjYWxsYmFjaztcbiAgdmFyIGVuZ2luZXMgPSB0aGlzLmVuZ2luZXM7XG4gIHZhciBvcHRzID0gb3B0aW9ucztcbiAgdmFyIHJlbmRlck9wdGlvbnMgPSB7fTtcbiAgdmFyIHZpZXc7XG5cbiAgLy8gc3VwcG9ydCBjYWxsYmFjayBmdW5jdGlvbiBhcyBzZWNvbmQgYXJnXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRvbmUgPSBvcHRpb25zO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuXG4gIC8vIG1lcmdlIGFwcC5sb2NhbHNcbiAgbWVyZ2UocmVuZGVyT3B0aW9ucywgdGhpcy5sb2NhbHMpO1xuXG4gIC8vIG1lcmdlIG9wdGlvbnMuX2xvY2Fsc1xuICBpZiAob3B0cy5fbG9jYWxzKSB7XG4gICAgbWVyZ2UocmVuZGVyT3B0aW9ucywgb3B0cy5fbG9jYWxzKTtcbiAgfVxuXG4gIC8vIG1lcmdlIG9wdGlvbnNcbiAgbWVyZ2UocmVuZGVyT3B0aW9ucywgb3B0cyk7XG5cbiAgLy8gc2V0IC5jYWNoZSB1bmxlc3MgZXhwbGljaXRseSBwcm92aWRlZFxuICBpZiAocmVuZGVyT3B0aW9ucy5jYWNoZSA9PSBudWxsKSB7XG4gICAgcmVuZGVyT3B0aW9ucy5jYWNoZSA9IHRoaXMuZW5hYmxlZCgndmlldyBjYWNoZScpO1xuICB9XG5cbiAgLy8gcHJpbWVkIGNhY2hlXG4gIGlmIChyZW5kZXJPcHRpb25zLmNhY2hlKSB7XG4gICAgdmlldyA9IGNhY2hlW25hbWVdO1xuICB9XG5cbiAgLy8gdmlld1xuICBpZiAoIXZpZXcpIHtcbiAgICB2YXIgVmlldyA9IHRoaXMuZ2V0KCd2aWV3Jyk7XG5cbiAgICB2aWV3ID0gbmV3IFZpZXcobmFtZSwge1xuICAgICAgZGVmYXVsdEVuZ2luZTogdGhpcy5nZXQoJ3ZpZXcgZW5naW5lJyksXG4gICAgICByb290OiB0aGlzLmdldCgndmlld3MnKSxcbiAgICAgIGVuZ2luZXM6IGVuZ2luZXNcbiAgICB9KTtcblxuICAgIGlmICghdmlldy5wYXRoKSB7XG4gICAgICB2YXIgZGlycyA9IEFycmF5LmlzQXJyYXkodmlldy5yb290KSAmJiB2aWV3LnJvb3QubGVuZ3RoID4gMVxuICAgICAgICA/ICdkaXJlY3RvcmllcyBcIicgKyB2aWV3LnJvb3Quc2xpY2UoMCwgLTEpLmpvaW4oJ1wiLCBcIicpICsgJ1wiIG9yIFwiJyArIHZpZXcucm9vdFt2aWV3LnJvb3QubGVuZ3RoIC0gMV0gKyAnXCInXG4gICAgICAgIDogJ2RpcmVjdG9yeSBcIicgKyB2aWV3LnJvb3QgKyAnXCInXG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9va3VwIHZpZXcgXCInICsgbmFtZSArICdcIiBpbiB2aWV3cyAnICsgZGlycyk7XG4gICAgICBlcnIudmlldyA9IHZpZXc7XG4gICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgIH1cblxuICAgIC8vIHByaW1lIHRoZSBjYWNoZVxuICAgIGlmIChyZW5kZXJPcHRpb25zLmNhY2hlKSB7XG4gICAgICBjYWNoZVtuYW1lXSA9IHZpZXc7XG4gICAgfVxuICB9XG5cbiAgLy8gcmVuZGVyXG4gIHRyeVJlbmRlcih2aWV3LCByZW5kZXJPcHRpb25zLCBkb25lKTtcbn07XG5cbi8qKlxuICogTGlzdGVuIGZvciBjb25uZWN0aW9ucy5cbiAqXG4gKiBBIG5vZGUgYGh0dHAuU2VydmVyYCBpcyByZXR1cm5lZCwgd2l0aCB0aGlzXG4gKiBhcHBsaWNhdGlvbiAod2hpY2ggaXMgYSBgRnVuY3Rpb25gKSBhcyBpdHNcbiAqIGNhbGxiYWNrLiBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgYm90aCBhbiBIVFRQXG4gKiBhbmQgSFRUUFMgc2VydmVyIHlvdSBtYXkgZG8gc28gd2l0aCB0aGUgXCJodHRwXCJcbiAqIGFuZCBcImh0dHBzXCIgbW9kdWxlcyBhcyBzaG93biBoZXJlOlxuICpcbiAqICAgIHZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpXG4gKiAgICAgICwgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpXG4gKiAgICAgICwgZXhwcmVzcyA9IHJlcXVpcmUoJ2V4cHJlc3MnKVxuICogICAgICAsIGFwcCA9IGV4cHJlc3MoKTtcbiAqXG4gKiAgICBodHRwLmNyZWF0ZVNlcnZlcihhcHApLmxpc3Rlbig4MCk7XG4gKiAgICBodHRwcy5jcmVhdGVTZXJ2ZXIoeyAuLi4gfSwgYXBwKS5saXN0ZW4oNDQzKTtcbiAqXG4gKiBAcmV0dXJuIHtodHRwLlNlcnZlcn1cbiAqIEBwdWJsaWNcbiAqL1xuXG5hcHAubGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuKCkge1xuICB2YXIgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIodGhpcyk7XG4gIHJldHVybiBzZXJ2ZXIubGlzdGVuLmFwcGx5KHNlcnZlciwgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogTG9nIGVycm9yIHVzaW5nIGNvbnNvbGUuZXJyb3IuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvZ2Vycm9yKGVycikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAodGhpcy5nZXQoJ2VudicpICE9PSAndGVzdCcpIGNvbnNvbGUuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci50b1N0cmluZygpKTtcbn1cblxuLyoqXG4gKiBUcnkgcmVuZGVyaW5nIGEgdmlldy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gdHJ5UmVuZGVyKHZpZXcsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHRyeSB7XG4gICAgdmlldy5yZW5kZXIob3B0aW9ucywgY2FsbGJhY2spO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZXhwcmVzcy9saWIvYXBwbGljYXRpb24uanNcbi8vIG1vZHVsZSBpZCA9IDE2MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGZpbmFsaGFuZGxlclxuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNyBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZmluYWxoYW5kbGVyJylcbnZhciBlbmNvZGVVcmwgPSByZXF1aXJlKCdlbmNvZGV1cmwnKVxudmFyIGVzY2FwZUh0bWwgPSByZXF1aXJlKCdlc2NhcGUtaHRtbCcpXG52YXIgb25GaW5pc2hlZCA9IHJlcXVpcmUoJ29uLWZpbmlzaGVkJylcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3BhcnNldXJsJylcbnZhciBzdGF0dXNlcyA9IHJlcXVpcmUoJ3N0YXR1c2VzJylcbnZhciB1bnBpcGUgPSByZXF1aXJlKCd1bnBpcGUnKVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBET1VCTEVfU1BBQ0VfUkVHRVhQID0gL1xceDIwezJ9L2dcbnZhciBORVdMSU5FX1JFR0VYUCA9IC9cXG4vZ1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudmFyIGRlZmVyID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IHNldEltbWVkaWF0ZVxuICA6IGZ1bmN0aW9uIChmbikgeyBwcm9jZXNzLm5leHRUaWNrKGZuLmJpbmQuYXBwbHkoZm4sIGFyZ3VtZW50cykpIH1cbnZhciBpc0ZpbmlzaGVkID0gb25GaW5pc2hlZC5pc0ZpbmlzaGVkXG5cbi8qKlxuICogQ3JlYXRlIGEgbWluaW1hbCBIVE1MIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUh0bWxEb2N1bWVudCAobWVzc2FnZSkge1xuICB2YXIgYm9keSA9IGVzY2FwZUh0bWwobWVzc2FnZSlcbiAgICAucmVwbGFjZShORVdMSU5FX1JFR0VYUCwgJzxicj4nKVxuICAgIC5yZXBsYWNlKERPVUJMRV9TUEFDRV9SRUdFWFAsICcgJm5ic3A7JylcblxuICByZXR1cm4gJzwhRE9DVFlQRSBodG1sPlxcbicgK1xuICAgICc8aHRtbCBsYW5nPVwiZW5cIj5cXG4nICtcbiAgICAnPGhlYWQ+XFxuJyArXG4gICAgJzxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxcbicgK1xuICAgICc8dGl0bGU+RXJyb3I8L3RpdGxlPlxcbicgK1xuICAgICc8L2hlYWQ+XFxuJyArXG4gICAgJzxib2R5PlxcbicgK1xuICAgICc8cHJlPicgKyBib2R5ICsgJzwvcHJlPlxcbicgK1xuICAgICc8L2JvZHk+XFxuJyArXG4gICAgJzwvaHRtbD5cXG4nXG59XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmaW5hbGhhbmRsZXJcblxuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGZpbmFsIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7UmVxdWVzdH0gcmVxXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZpbmFsaGFuZGxlciAocmVxLCByZXMsIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9XG5cbiAgLy8gZ2V0IGVudmlyb25tZW50XG4gIHZhciBlbnYgPSBvcHRzLmVudiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViB8fCAnZGV2ZWxvcG1lbnQnXG5cbiAgLy8gZ2V0IGVycm9yIGNhbGxiYWNrXG4gIHZhciBvbmVycm9yID0gb3B0cy5vbmVycm9yXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICB2YXIgaGVhZGVyc1xuICAgIHZhciBtc2dcbiAgICB2YXIgc3RhdHVzXG5cbiAgICAvLyBpZ25vcmUgNDA0IG9uIGluLWZsaWdodCByZXNwb25zZVxuICAgIGlmICghZXJyICYmIGhlYWRlcnNTZW50KHJlcykpIHtcbiAgICAgIGRlYnVnKCdjYW5ub3QgNDA0IGFmdGVyIGhlYWRlcnMgc2VudCcpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB1bmhhbmRsZWQgZXJyb3JcbiAgICBpZiAoZXJyKSB7XG4gICAgICAvLyByZXNwZWN0IHN0YXR1cyBjb2RlIGZyb20gZXJyb3JcbiAgICAgIHN0YXR1cyA9IGdldEVycm9yU3RhdHVzQ29kZShlcnIpXG5cbiAgICAgIGlmIChzdGF0dXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBzdGF0dXMgY29kZSBvbiByZXNwb25zZVxuICAgICAgICBzdGF0dXMgPSBnZXRSZXNwb25zZVN0YXR1c0NvZGUocmVzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmVzcGVjdCBoZWFkZXJzIGZyb20gZXJyb3JcbiAgICAgICAgaGVhZGVycyA9IGdldEVycm9ySGVhZGVycyhlcnIpXG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBlcnJvciBtZXNzYWdlXG4gICAgICBtc2cgPSBnZXRFcnJvck1lc3NhZ2UoZXJyLCBzdGF0dXMsIGVudilcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm90IGZvdW5kXG4gICAgICBzdGF0dXMgPSA0MDRcbiAgICAgIG1zZyA9ICdDYW5ub3QgJyArIHJlcS5tZXRob2QgKyAnICcgKyBlbmNvZGVVcmwoZ2V0UmVzb3VyY2VOYW1lKHJlcSkpXG4gICAgfVxuXG4gICAgZGVidWcoJ2RlZmF1bHQgJXMnLCBzdGF0dXMpXG5cbiAgICAvLyBzY2hlZHVsZSBvbmVycm9yIGNhbGxiYWNrXG4gICAgaWYgKGVyciAmJiBvbmVycm9yKSB7XG4gICAgICBkZWZlcihvbmVycm9yLCBlcnIsIHJlcSwgcmVzKVxuICAgIH1cblxuICAgIC8vIGNhbm5vdCBhY3R1YWxseSByZXNwb25kXG4gICAgaWYgKGhlYWRlcnNTZW50KHJlcykpIHtcbiAgICAgIGRlYnVnKCdjYW5ub3QgJWQgYWZ0ZXIgaGVhZGVycyBzZW50Jywgc3RhdHVzKVxuICAgICAgcmVxLnNvY2tldC5kZXN0cm95KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHNlbmQgcmVzcG9uc2VcbiAgICBzZW5kKHJlcSwgcmVzLCBzdGF0dXMsIGhlYWRlcnMsIG1zZylcbiAgfVxufVxuXG4vKipcbiAqIEdldCBoZWFkZXJzIGZyb20gRXJyb3Igb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRFcnJvckhlYWRlcnMgKGVycikge1xuICBpZiAoIWVyci5oZWFkZXJzIHx8IHR5cGVvZiBlcnIuaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICB2YXIgaGVhZGVycyA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhlcnIuaGVhZGVycylcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgIGhlYWRlcnNba2V5XSA9IGVyci5oZWFkZXJzW2tleV1cbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbi8qKlxuICogR2V0IG1lc3NhZ2UgZnJvbSBFcnJvciBvYmplY3QsIGZhbGxiYWNrIHRvIHN0YXR1cyBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c1xuICogQHBhcmFtIHtzdHJpbmd9IGVudlxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UgKGVyciwgc3RhdHVzLCBlbnYpIHtcbiAgdmFyIG1zZ1xuXG4gIGlmIChlbnYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIHVzZSBlcnIuc3RhY2ssIHdoaWNoIHR5cGljYWxseSBpbmNsdWRlcyBlcnIubWVzc2FnZVxuICAgIG1zZyA9IGVyci5zdGFja1xuXG4gICAgLy8gZmFsbGJhY2sgdG8gZXJyLnRvU3RyaW5nKCkgd2hlbiBwb3NzaWJsZVxuICAgIGlmICghbXNnICYmIHR5cGVvZiBlcnIudG9TdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IGVyci50b1N0cmluZygpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1zZyB8fCBzdGF0dXNlc1tzdGF0dXNdXG59XG5cbi8qKlxuICogR2V0IHN0YXR1cyBjb2RlIGZyb20gRXJyb3Igb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHJldHVybiB7bnVtYmVyfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRFcnJvclN0YXR1c0NvZGUgKGVycikge1xuICAvLyBjaGVjayBlcnIuc3RhdHVzXG4gIGlmICh0eXBlb2YgZXJyLnN0YXR1cyA9PT0gJ251bWJlcicgJiYgZXJyLnN0YXR1cyA+PSA0MDAgJiYgZXJyLnN0YXR1cyA8IDYwMCkge1xuICAgIHJldHVybiBlcnIuc3RhdHVzXG4gIH1cblxuICAvLyBjaGVjayBlcnIuc3RhdHVzQ29kZVxuICBpZiAodHlwZW9mIGVyci5zdGF0dXNDb2RlID09PSAnbnVtYmVyJyAmJiBlcnIuc3RhdHVzQ29kZSA+PSA0MDAgJiYgZXJyLnN0YXR1c0NvZGUgPCA2MDApIHtcbiAgICByZXR1cm4gZXJyLnN0YXR1c0NvZGVcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBHZXQgcmVzb3VyY2UgbmFtZSBmb3IgdGhlIHJlcXVlc3QuXG4gKlxuICogVGhpcyBpcyB0eXBpY2FsbHkganVzdCB0aGUgb3JpZ2luYWwgcGF0aG5hbWUgb2YgdGhlIHJlcXVlc3RcbiAqIGJ1dCB3aWxsIGZhbGxiYWNrIHRvIFwicmVzb3VyY2VcIiBpcyB0aGF0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICpcbiAqIEBwYXJhbSB7SW5jb21pbmdNZXNzYWdlfSByZXFcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0UmVzb3VyY2VOYW1lIChyZXEpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VVcmwub3JpZ2luYWwocmVxKS5wYXRobmFtZVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuICdyZXNvdXJjZSdcbiAgfVxufVxuXG4vKipcbiAqIEdldCBzdGF0dXMgY29kZSBmcm9tIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7T3V0Z29pbmdNZXNzYWdlfSByZXNcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0UmVzcG9uc2VTdGF0dXNDb2RlIChyZXMpIHtcbiAgdmFyIHN0YXR1cyA9IHJlcy5zdGF0dXNDb2RlXG5cbiAgLy8gZGVmYXVsdCBzdGF0dXMgY29kZSB0byA1MDAgaWYgb3V0c2lkZSB2YWxpZCByYW5nZVxuICBpZiAodHlwZW9mIHN0YXR1cyAhPT0gJ251bWJlcicgfHwgc3RhdHVzIDwgNDAwIHx8IHN0YXR1cyA+IDU5OSkge1xuICAgIHN0YXR1cyA9IDUwMFxuICB9XG5cbiAgcmV0dXJuIHN0YXR1c1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB0aGUgcmVzcG9uc2UgaGVhZGVycyBoYXZlIGJlZW4gc2VudC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaGVhZGVyc1NlbnQgKHJlcykge1xuICByZXR1cm4gdHlwZW9mIHJlcy5oZWFkZXJzU2VudCAhPT0gJ2Jvb2xlYW4nXG4gICAgPyBCb29sZWFuKHJlcy5faGVhZGVyKVxuICAgIDogcmVzLmhlYWRlcnNTZW50XG59XG5cbi8qKlxuICogU2VuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0luY29taW5nTWVzc2FnZX0gcmVxXG4gKiBAcGFyYW0ge091dGdvaW5nTWVzc2FnZX0gcmVzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzXG4gKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2VuZCAocmVxLCByZXMsIHN0YXR1cywgaGVhZGVycywgbWVzc2FnZSkge1xuICBmdW5jdGlvbiB3cml0ZSAoKSB7XG4gICAgLy8gcmVzcG9uc2UgYm9keVxuICAgIHZhciBib2R5ID0gY3JlYXRlSHRtbERvY3VtZW50KG1lc3NhZ2UpXG5cbiAgICAvLyByZXNwb25zZSBzdGF0dXNcbiAgICByZXMuc3RhdHVzQ29kZSA9IHN0YXR1c1xuICAgIHJlcy5zdGF0dXNNZXNzYWdlID0gc3RhdHVzZXNbc3RhdHVzXVxuXG4gICAgLy8gcmVzcG9uc2UgaGVhZGVyc1xuICAgIHNldEhlYWRlcnMocmVzLCBoZWFkZXJzKVxuXG4gICAgLy8gc2VjdXJpdHkgaGVhZGVyc1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JywgXCJkZWZhdWx0LXNyYyAnc2VsZidcIilcbiAgICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKVxuXG4gICAgLy8gc3RhbmRhcmQgaGVhZGVyc1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnKVxuICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgQnVmZmVyLmJ5dGVMZW5ndGgoYm9keSwgJ3V0ZjgnKSlcblxuICAgIGlmIChyZXEubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgIHJlcy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmVzLmVuZChib2R5LCAndXRmOCcpXG4gIH1cblxuICBpZiAoaXNGaW5pc2hlZChyZXEpKSB7XG4gICAgd3JpdGUoKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gdW5waXBlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVxdWVzdFxuICB1bnBpcGUocmVxKVxuXG4gIC8vIGZsdXNoIHRoZSByZXF1ZXN0XG4gIG9uRmluaXNoZWQocmVxLCB3cml0ZSlcbiAgcmVxLnJlc3VtZSgpXG59XG5cbi8qKlxuICogU2V0IHJlc3BvbnNlIGhlYWRlcnMgZnJvbSBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPdXRnb2luZ01lc3NhZ2V9IHJlc1xuICogQHBhcmFtIHtvYmplY3R9IGhlYWRlcnNcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2V0SGVhZGVycyAocmVzLCBoZWFkZXJzKSB7XG4gIGlmICghaGVhZGVycykge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgIHJlcy5zZXRIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9maW5hbGhhbmRsZXIvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIEV4cG9zZSBgcGF0aHRvUmVnZXhwYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGh0b1JlZ2V4cDtcblxuLyoqXG4gKiBNYXRjaCBtYXRjaGluZyBncm91cHMgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKi9cbnZhciBNQVRDSElOR19HUk9VUF9SRUdFWFAgPSAvXFwoKD8hXFw/KS9nO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gcGF0aCBzdHJpbmcsXG4gKiByZXR1cm5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogQW4gZW1wdHkgYXJyYXkgc2hvdWxkIGJlIHBhc3NlZCxcbiAqIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgcGxhY2Vob2xkZXJcbiAqIGtleSBuYW1lcy4gRm9yIGV4YW1wbGUgXCIvdXNlci86aWRcIiB3aWxsXG4gKiB0aGVuIGNvbnRhaW4gW1wiaWRcIl0uXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfFJlZ0V4cHxBcnJheX0gcGF0aFxuICogQHBhcmFtICB7QXJyYXl9IGtleXNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7UmVnRXhwfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGF0aHRvUmVnZXhwKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGtleXMgPSBrZXlzIHx8IFtdO1xuICB2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2U7XG4gIHZhciBmbGFncyA9IG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSc7XG4gIHZhciBleHRyYU9mZnNldCA9IDA7XG4gIHZhciBrZXlzT2Zmc2V0ID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIG5hbWUgPSAwO1xuICB2YXIgbTtcblxuICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHdoaWxlIChtID0gTUFUQ0hJTkdfR1JPVVBfUkVHRVhQLmV4ZWMocGF0aC5zb3VyY2UpKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBuYW1lKyssXG4gICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgb2Zmc2V0OiBtLmluZGV4XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7XG4gICAgLy8gTWFwIGFycmF5IHBhcnRzIGludG8gcmVnZXhwcyBhbmQgcmV0dXJuIHRoZWlyIHNvdXJjZS4gV2UgYWxzbyBwYXNzXG4gICAgLy8gdGhlIHNhbWUga2V5cyBhbmQgb3B0aW9ucyBpbnN0YW5jZSBpbnRvIGV2ZXJ5IGdlbmVyYXRpb24gdG8gZ2V0XG4gICAgLy8gY29uc2lzdGVudCBtYXRjaGluZyBncm91cHMgYmVmb3JlIHdlIGpvaW4gdGhlIHNvdXJjZXMgdG9nZXRoZXIuXG4gICAgcGF0aCA9IHBhdGgubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHBhdGh0b1JlZ2V4cCh2YWx1ZSwga2V5cywgb3B0aW9ucykuc291cmNlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJyg/OicgKyBwYXRoLmpvaW4oJ3wnKSArICcpJywgZmxhZ3MpO1xuICB9XG5cbiAgcGF0aCA9ICgnXicgKyBwYXRoICsgKHN0cmljdCA/ICcnIDogcGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSAnLycgPyAnPycgOiAnLz8nKSlcbiAgICAucmVwbGFjZSgvXFwvXFwoL2csICcvKD86JylcbiAgICAucmVwbGFjZSgvKFtcXC9cXC5dKS9nLCAnXFxcXCQxJylcbiAgICAucmVwbGFjZSgvKFxcXFxcXC8pPyhcXFxcXFwuKT86KFxcdyspKFxcKC4qP1xcKSk/KFxcKik/KFxcPyk/L2csIGZ1bmN0aW9uIChtYXRjaCwgc2xhc2gsIGZvcm1hdCwga2V5LCBjYXB0dXJlLCBzdGFyLCBvcHRpb25hbCwgb2Zmc2V0KSB7XG4gICAgICBzbGFzaCA9IHNsYXNoIHx8ICcnO1xuICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgY2FwdHVyZSA9IGNhcHR1cmUgfHwgJyhbXlxcXFwvJyArIGZvcm1hdCArICddKz8pJztcbiAgICAgIG9wdGlvbmFsID0gb3B0aW9uYWwgfHwgJyc7XG5cbiAgICAgIGtleXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgb3B0aW9uYWw6ICEhb3B0aW9uYWwsXG4gICAgICAgIG9mZnNldDogb2Zmc2V0ICsgZXh0cmFPZmZzZXRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gJydcbiAgICAgICAgKyAob3B0aW9uYWwgPyAnJyA6IHNsYXNoKVxuICAgICAgICArICcoPzonXG4gICAgICAgICsgZm9ybWF0ICsgKG9wdGlvbmFsID8gc2xhc2ggOiAnJykgKyBjYXB0dXJlXG4gICAgICAgICsgKHN0YXIgPyAnKCg/OltcXFxcLycgKyBmb3JtYXQgKyAnXS4rPyk/KScgOiAnJylcbiAgICAgICAgKyAnKSdcbiAgICAgICAgKyBvcHRpb25hbDtcblxuICAgICAgZXh0cmFPZmZzZXQgKz0gcmVzdWx0Lmxlbmd0aCAtIG1hdGNoLmxlbmd0aDtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KVxuICAgIC5yZXBsYWNlKC9cXCovZywgZnVuY3Rpb24gKHN0YXIsIGluZGV4KSB7XG4gICAgICB2YXIgbGVuID0ga2V5cy5sZW5ndGhcblxuICAgICAgd2hpbGUgKGxlbi0tID4ga2V5c09mZnNldCAmJiBrZXlzW2xlbl0ub2Zmc2V0ID4gaW5kZXgpIHtcbiAgICAgICAga2V5c1tsZW5dLm9mZnNldCArPSAzOyAvLyBSZXBsYWNlbWVudCBsZW5ndGggbWludXMgYXN0ZXJpc2sgbGVuZ3RoLlxuICAgICAgfVxuXG4gICAgICByZXR1cm4gJyguKiknO1xuICAgIH0pO1xuXG4gIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBoYW5kbGluZyB1bm5hbWVkIG1hdGNoaW5nIGdyb3Vwcy5cbiAgd2hpbGUgKG0gPSBNQVRDSElOR19HUk9VUF9SRUdFWFAuZXhlYyhwYXRoKSkge1xuICAgIHZhciBlc2NhcGVDb3VudCA9IDA7XG4gICAgdmFyIGluZGV4ID0gbS5pbmRleDtcblxuICAgIHdoaWxlIChwYXRoLmNoYXJBdCgtLWluZGV4KSA9PT0gJ1xcXFwnKSB7XG4gICAgICBlc2NhcGVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIEl0J3MgcG9zc2libGUgdG8gZXNjYXBlIHRoZSBicmFja2V0LlxuICAgIGlmIChlc2NhcGVDb3VudCAlIDIgPT09IDEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChrZXlzT2Zmc2V0ICsgaSA9PT0ga2V5cy5sZW5ndGggfHwga2V5c1trZXlzT2Zmc2V0ICsgaV0ub2Zmc2V0ID4gbS5pbmRleCkge1xuICAgICAga2V5cy5zcGxpY2Uoa2V5c09mZnNldCArIGksIDAsIHtcbiAgICAgICAgbmFtZTogbmFtZSsrLCAvLyBVbm5hbWVkIG1hdGNoaW5nIGdyb3VwcyBtdXN0IGJlIGNvbnNpc3RlbnRseSBsaW5lYXIuXG4gICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgb2Zmc2V0OiBtLmluZGV4XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCBpcyBub24tZW5kaW5nLCBtYXRjaCB1bnRpbCB0aGUgZW5kIG9yIGEgc2xhc2guXG4gIHBhdGggKz0gKGVuZCA/ICckJyA6IChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICcvJyA/ICcnIDogJyg/PVxcXFwvfCQpJykpO1xuXG4gIHJldHVybiBuZXcgUmVnRXhwKHBhdGgsIGZsYWdzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE2NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGV4cHJlc3NcbiAqIENvcHlyaWdodChjKSAyMDA5LTIwMTMgVEogSG9sb3dheWNodWtcbiAqIENvcHlyaWdodChjKSAyMDEzIFJvbWFuIFNodHlsbWFuXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnc2V0cHJvdG90eXBlb2YnKVxuXG4vKipcbiAqIEluaXRpYWxpemF0aW9uIG1pZGRsZXdhcmUsIGV4cG9zaW5nIHRoZVxuICogcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gZWFjaCBvdGhlciwgYXMgd2VsbFxuICogYXMgZGVmYXVsdGluZyB0aGUgWC1Qb3dlcmVkLUJ5IGhlYWRlciBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhcHBcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gZnVuY3Rpb24oYXBwKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGV4cHJlc3NJbml0KHJlcSwgcmVzLCBuZXh0KXtcbiAgICBpZiAoYXBwLmVuYWJsZWQoJ3gtcG93ZXJlZC1ieScpKSByZXMuc2V0SGVhZGVyKCdYLVBvd2VyZWQtQnknLCAnRXhwcmVzcycpO1xuICAgIHJlcS5yZXMgPSByZXM7XG4gICAgcmVzLnJlcSA9IHJlcTtcbiAgICByZXEubmV4dCA9IG5leHQ7XG5cbiAgICBzZXRQcm90b3R5cGVPZihyZXEsIGFwcC5yZXF1ZXN0KVxuICAgIHNldFByb3RvdHlwZU9mKHJlcywgYXBwLnJlc3BvbnNlKVxuXG4gICAgcmVzLmxvY2FscyA9IHJlcy5sb2NhbHMgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIG5leHQoKTtcbiAgfTtcbn07XG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9leHByZXNzL2xpYi9taWRkbGV3YXJlL2luaXQuanNcbi8vIG1vZHVsZSBpZCA9IDE2NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGV4cHJlc3NcbiAqIENvcHlyaWdodChjKSAyMDA5LTIwMTMgVEogSG9sb3dheWNodWtcbiAqIENvcHlyaWdodChjKSAyMDEzIFJvbWFuIFNodHlsbWFuXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZXhwcmVzczp2aWV3Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRpcm5hbWUgPSBwYXRoLmRpcm5hbWU7XG52YXIgYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lO1xudmFyIGV4dG5hbWUgPSBwYXRoLmV4dG5hbWU7XG52YXIgam9pbiA9IHBhdGguam9pbjtcbnZhciByZXNvbHZlID0gcGF0aC5yZXNvbHZlO1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gVmlldztcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBWaWV3YCB3aXRoIHRoZSBnaXZlbiBgbmFtZWAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgIC0gYGRlZmF1bHRFbmdpbmVgIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGVuZ2luZSBuYW1lXG4gKiAgIC0gYGVuZ2luZXNgIHRlbXBsYXRlIGVuZ2luZSByZXF1aXJlKCkgY2FjaGVcbiAqICAgLSBgcm9vdGAgcm9vdCBwYXRoIGZvciB2aWV3IGxvb2t1cFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFZpZXcobmFtZSwgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgdGhpcy5kZWZhdWx0RW5naW5lID0gb3B0cy5kZWZhdWx0RW5naW5lO1xuICB0aGlzLmV4dCA9IGV4dG5hbWUobmFtZSk7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG4gIHRoaXMucm9vdCA9IG9wdHMucm9vdDtcblxuICBpZiAoIXRoaXMuZXh0ICYmICF0aGlzLmRlZmF1bHRFbmdpbmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGRlZmF1bHQgZW5naW5lIHdhcyBzcGVjaWZpZWQgYW5kIG5vIGV4dGVuc2lvbiB3YXMgcHJvdmlkZWQuJyk7XG4gIH1cblxuICB2YXIgZmlsZU5hbWUgPSBuYW1lO1xuXG4gIGlmICghdGhpcy5leHQpIHtcbiAgICAvLyBnZXQgZXh0ZW5zaW9uIGZyb20gZGVmYXVsdCBlbmdpbmUgbmFtZVxuICAgIHRoaXMuZXh0ID0gdGhpcy5kZWZhdWx0RW5naW5lWzBdICE9PSAnLidcbiAgICAgID8gJy4nICsgdGhpcy5kZWZhdWx0RW5naW5lXG4gICAgICA6IHRoaXMuZGVmYXVsdEVuZ2luZTtcblxuICAgIGZpbGVOYW1lICs9IHRoaXMuZXh0O1xuICB9XG5cbiAgaWYgKCFvcHRzLmVuZ2luZXNbdGhpcy5leHRdKSB7XG4gICAgLy8gbG9hZCBlbmdpbmVcbiAgICB2YXIgbW9kID0gdGhpcy5leHQuc3Vic3RyKDEpXG4gICAgZGVidWcoJ3JlcXVpcmUgXCIlc1wiJywgbW9kKVxuXG4gICAgLy8gZGVmYXVsdCBlbmdpbmUgZXhwb3J0XG4gICAgdmFyIGZuID0gcmVxdWlyZShtb2QpLl9fZXhwcmVzc1xuXG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2R1bGUgXCInICsgbW9kICsgJ1wiIGRvZXMgbm90IHByb3ZpZGUgYSB2aWV3IGVuZ2luZS4nKVxuICAgIH1cblxuICAgIG9wdHMuZW5naW5lc1t0aGlzLmV4dF0gPSBmblxuICB9XG5cbiAgLy8gc3RvcmUgbG9hZGVkIGVuZ2luZVxuICB0aGlzLmVuZ2luZSA9IG9wdHMuZW5naW5lc1t0aGlzLmV4dF07XG5cbiAgLy8gbG9va3VwIHBhdGhcbiAgdGhpcy5wYXRoID0gdGhpcy5sb29rdXAoZmlsZU5hbWUpO1xufVxuXG4vKipcbiAqIExvb2t1cCB2aWV3IGJ5IHRoZSBnaXZlbiBgbmFtZWBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHByaXZhdGVcbiAqL1xuXG5WaWV3LnByb3RvdHlwZS5sb29rdXAgPSBmdW5jdGlvbiBsb29rdXAobmFtZSkge1xuICB2YXIgcGF0aDtcbiAgdmFyIHJvb3RzID0gW10uY29uY2F0KHRoaXMucm9vdCk7XG5cbiAgZGVidWcoJ2xvb2t1cCBcIiVzXCInLCBuYW1lKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3RzLmxlbmd0aCAmJiAhcGF0aDsgaSsrKSB7XG4gICAgdmFyIHJvb3QgPSByb290c1tpXTtcblxuICAgIC8vIHJlc29sdmUgdGhlIHBhdGhcbiAgICB2YXIgbG9jID0gcmVzb2x2ZShyb290LCBuYW1lKTtcbiAgICB2YXIgZGlyID0gZGlybmFtZShsb2MpO1xuICAgIHZhciBmaWxlID0gYmFzZW5hbWUobG9jKTtcblxuICAgIC8vIHJlc29sdmUgdGhlIGZpbGVcbiAgICBwYXRoID0gdGhpcy5yZXNvbHZlKGRpciwgZmlsZSk7XG4gIH1cblxuICByZXR1cm4gcGF0aDtcbn07XG5cbi8qKlxuICogUmVuZGVyIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcHJpdmF0ZVxuICovXG5cblZpZXcucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihvcHRpb25zLCBjYWxsYmFjaykge1xuICBkZWJ1ZygncmVuZGVyIFwiJXNcIicsIHRoaXMucGF0aCk7XG4gIHRoaXMuZW5naW5lKHRoaXMucGF0aCwgb3B0aW9ucywgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBmaWxlIHdpdGhpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlXG4gKiBAcHJpdmF0ZVxuICovXG5cblZpZXcucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKGRpciwgZmlsZSkge1xuICB2YXIgZXh0ID0gdGhpcy5leHQ7XG5cbiAgLy8gPHBhdGg+LjxleHQ+XG4gIHZhciBwYXRoID0gam9pbihkaXIsIGZpbGUpO1xuICB2YXIgc3RhdCA9IHRyeVN0YXQocGF0aCk7XG5cbiAgaWYgKHN0YXQgJiYgc3RhdC5pc0ZpbGUoKSkge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgLy8gPHBhdGg+L2luZGV4LjxleHQ+XG4gIHBhdGggPSBqb2luKGRpciwgYmFzZW5hbWUoZmlsZSwgZXh0KSwgJ2luZGV4JyArIGV4dCk7XG4gIHN0YXQgPSB0cnlTdGF0KHBhdGgpO1xuXG4gIGlmIChzdGF0ICYmIHN0YXQuaXNGaWxlKCkpIHtcbiAgICByZXR1cm4gcGF0aDtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBzdGF0LCBtYXliZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7ZnMuU3RhdHN9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHRyeVN0YXQocGF0aCkge1xuICBkZWJ1Zygnc3RhdCBcIiVzXCInLCBwYXRoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBmcy5zdGF0U3luYyhwYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9leHByZXNzL2xpYi92aWV3LmpzXG4vLyBtb2R1bGUgaWQgPSAxNjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZnVuY3Rpb24gd2VicGFja0VtcHR5Q29udGV4dChyZXEpIHtcblx0dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJy5cIik7XG59XG53ZWJwYWNrRW1wdHlDb250ZXh0LmtleXMgPSBmdW5jdGlvbigpIHsgcmV0dXJuIFtdOyB9O1xud2VicGFja0VtcHR5Q29udGV4dC5yZXNvbHZlID0gd2VicGFja0VtcHR5Q29udGV4dDtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0VtcHR5Q29udGV4dDtcbndlYnBhY2tFbXB0eUNvbnRleHQuaWQgPSAxNjc7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2V4cHJlc3MvbGliXG4vLyBtb2R1bGUgaWQgPSAxNjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBkZXN0cm95XG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBSZWFkU3RyZWFtID0gcmVxdWlyZSgnZnMnKS5SZWFkU3RyZWFtXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlc3Ryb3lcblxuLyoqXG4gKiBEZXN0cm95IGEgc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdHJlYW1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZXN0cm95KHN0cmVhbSkge1xuICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgUmVhZFN0cmVhbSkge1xuICAgIHJldHVybiBkZXN0cm95UmVhZFN0cmVhbShzdHJlYW0pXG4gIH1cblxuICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBTdHJlYW0pKSB7XG4gICAgcmV0dXJuIHN0cmVhbVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbS5kZXN0cm95KClcbiAgfVxuXG4gIHJldHVybiBzdHJlYW1cbn1cblxuLyoqXG4gKiBEZXN0cm95IGEgUmVhZFN0cmVhbS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3RyZWFtXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGRlc3Ryb3lSZWFkU3RyZWFtKHN0cmVhbSkge1xuICBzdHJlYW0uZGVzdHJveSgpXG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0uY2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBub2RlLmpzIGNvcmUgYnVnIHdvcmstYXJvdW5kXG4gICAgc3RyZWFtLm9uKCdvcGVuJywgb25PcGVuQ2xvc2UpXG4gIH1cblxuICByZXR1cm4gc3RyZWFtXG59XG5cbi8qKlxuICogT24gb3BlbiBoYW5kbGVyIHRvIGNsb3NlIHN0cmVhbS5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gb25PcGVuQ2xvc2UoKSB7XG4gIGlmICh0eXBlb2YgdGhpcy5mZCA9PT0gJ251bWJlcicpIHtcbiAgICAvLyBhY3R1YWxseSBjbG9zZSBkb3duIHRoZSBmZFxuICAgIHRoaXMuY2xvc2UoKVxuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZGVzdHJveS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMTY4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcblxuZnVuY3Rpb24gTWltZSgpIHtcbiAgLy8gTWFwIG9mIGV4dGVuc2lvbiAtPiBtaW1lIHR5cGVcbiAgdGhpcy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy8gTWFwIG9mIG1pbWUgdHlwZSAtPiBleHRlbnNpb25cbiAgdGhpcy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBEZWZpbmUgbWltZXR5cGUgLT4gZXh0ZW5zaW9uIG1hcHBpbmdzLiAgRWFjaCBrZXkgaXMgYSBtaW1lLXR5cGUgdGhhdCBtYXBzXG4gKiB0byBhbiBhcnJheSBvZiBleHRlbnNpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHlwZS4gIFRoZSBmaXJzdCBleHRlbnNpb24gaXNcbiAqIHVzZWQgYXMgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciB0aGUgdHlwZS5cbiAqXG4gKiBlLmcuIG1pbWUuZGVmaW5lKHsnYXVkaW8vb2dnJywgWydvZ2EnLCAnb2dnJywgJ3NweCddfSk7XG4gKlxuICogQHBhcmFtIG1hcCAoT2JqZWN0KSB0eXBlIGRlZmluaXRpb25zXG4gKi9cbk1pbWUucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uIChtYXApIHtcbiAgZm9yICh2YXIgdHlwZSBpbiBtYXApIHtcbiAgICB2YXIgZXh0cyA9IG1hcFt0eXBlXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5ERUJVR19NSU1FICYmIHRoaXMudHlwZXNbZXh0c1tpXV0pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCh0aGlzLl9sb2FkaW5nIHx8IFwiZGVmaW5lKClcIikucmVwbGFjZSgvLipcXC8vLCAnJyksICdjaGFuZ2VzIFwiJyArIGV4dHNbaV0gKyAnXCIgZXh0ZW5zaW9uIHR5cGUgZnJvbSAnICtcbiAgICAgICAgICB0aGlzLnR5cGVzW2V4dHNbaV1dICsgJyB0byAnICsgdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHlwZXNbZXh0c1tpXV0gPSB0eXBlO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgZXh0ZW5zaW9uIGlzIHRoZSBmaXJzdCBvbmUgd2UgZW5jb3VudGVyXG4gICAgaWYgKCF0aGlzLmV4dGVuc2lvbnNbdHlwZV0pIHtcbiAgICAgIHRoaXMuZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNbMF07XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIExvYWQgYW4gQXBhY2hlMi1zdHlsZSBcIi50eXBlc1wiIGZpbGVcbiAqXG4gKiBUaGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKGl0J3MgZXhwZWN0ZWQpLiAgV2hlcmUgZmlsZXMgZGVjbGFyZVxuICogb3ZlcmxhcHBpbmcgdHlwZXMvZXh0ZW5zaW9ucywgdGhlIGxhc3QgZmlsZSB3aW5zLlxuICpcbiAqIEBwYXJhbSBmaWxlIChTdHJpbmcpIHBhdGggb2YgZmlsZSB0byBsb2FkLlxuICovXG5NaW1lLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24oZmlsZSkge1xuICB0aGlzLl9sb2FkaW5nID0gZmlsZTtcbiAgLy8gUmVhZCBmaWxlIGFuZCBzcGxpdCBpbnRvIGxpbmVzXG4gIHZhciBtYXAgPSB7fSxcbiAgICAgIGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgJ2FzY2lpJyksXG4gICAgICBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1tcXHJcXG5dKy8pO1xuXG4gIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgIC8vIENsZWFuIHVwIHdoaXRlc3BhY2UvY29tbWVudHMsIGFuZCBzcGxpdCBpbnRvIGZpZWxkc1xuICAgIHZhciBmaWVsZHMgPSBsaW5lLnJlcGxhY2UoL1xccyojLip8Xlxccyp8XFxzKiQvZywgJycpLnNwbGl0KC9cXHMrLyk7XG4gICAgbWFwW2ZpZWxkcy5zaGlmdCgpXSA9IGZpZWxkcztcbiAgfSk7XG5cbiAgdGhpcy5kZWZpbmUobWFwKTtcblxuICB0aGlzLl9sb2FkaW5nID0gbnVsbDtcbn07XG5cbi8qKlxuICogTG9va3VwIGEgbWltZSB0eXBlIGJhc2VkIG9uIGV4dGVuc2lvblxuICovXG5NaW1lLnByb3RvdHlwZS5sb29rdXAgPSBmdW5jdGlvbihwYXRoLCBmYWxsYmFjaykge1xuICB2YXIgZXh0ID0gcGF0aC5yZXBsYWNlKC9eLipbXFwuXFwvXFxcXF0vLCAnJykudG9Mb3dlckNhc2UoKTtcblxuICByZXR1cm4gdGhpcy50eXBlc1tleHRdIHx8IGZhbGxiYWNrIHx8IHRoaXMuZGVmYXVsdF90eXBlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gZmlsZSBleHRlbnNpb24gYXNzb2NpYXRlZCB3aXRoIGEgbWltZSB0eXBlXG4gKi9cbk1pbWUucHJvdG90eXBlLmV4dGVuc2lvbiA9IGZ1bmN0aW9uKG1pbWVUeXBlKSB7XG4gIHZhciB0eXBlID0gbWltZVR5cGUubWF0Y2goL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpLylbMV0udG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uc1t0eXBlXTtcbn07XG5cbi8vIERlZmF1bHQgaW5zdGFuY2VcbnZhciBtaW1lID0gbmV3IE1pbWUoKTtcblxuLy8gRGVmaW5lIGJ1aWx0LWluIHR5cGVzXG5taW1lLmRlZmluZShyZXF1aXJlKCcuL3R5cGVzLmpzb24nKSk7XG5cbi8vIERlZmF1bHQgdHlwZVxubWltZS5kZWZhdWx0X3R5cGUgPSBtaW1lLmxvb2t1cCgnYmluJyk7XG5cbi8vXG4vLyBBZGRpdGlvbmFsIEFQSSBzcGVjaWZpYyB0byB0aGUgZGVmYXVsdCBpbnN0YW5jZVxuLy9cblxubWltZS5NaW1lID0gTWltZTtcblxuLyoqXG4gKiBMb29rdXAgYSBjaGFyc2V0IGJhc2VkIG9uIG1pbWUgdHlwZS5cbiAqL1xubWltZS5jaGFyc2V0cyA9IHtcbiAgbG9va3VwOiBmdW5jdGlvbihtaW1lVHlwZSwgZmFsbGJhY2spIHtcbiAgICAvLyBBc3N1bWUgdGV4dCB0eXBlcyBhcmUgdXRmOFxuICAgIHJldHVybiAoL150ZXh0XFwvfF5hcHBsaWNhdGlvblxcLyhqYXZhc2NyaXB0fGpzb24pLykudGVzdChtaW1lVHlwZSkgPyAnVVRGLTgnIDogZmFsbGJhY2s7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWltZTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9taW1lL21pbWUuanNcbi8vIG1vZHVsZSBpZCA9IDE2OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHtcImFwcGxpY2F0aW9uL2FuZHJldy1pbnNldFwiOltcImV6XCJdLFwiYXBwbGljYXRpb24vYXBwbGl4d2FyZVwiOltcImF3XCJdLFwiYXBwbGljYXRpb24vYXRvbSt4bWxcIjpbXCJhdG9tXCJdLFwiYXBwbGljYXRpb24vYXRvbWNhdCt4bWxcIjpbXCJhdG9tY2F0XCJdLFwiYXBwbGljYXRpb24vYXRvbXN2Yyt4bWxcIjpbXCJhdG9tc3ZjXCJdLFwiYXBwbGljYXRpb24vYmRvY1wiOltcImJkb2NcIl0sXCJhcHBsaWNhdGlvbi9jY3htbCt4bWxcIjpbXCJjY3htbFwiXSxcImFwcGxpY2F0aW9uL2NkbWktY2FwYWJpbGl0eVwiOltcImNkbWlhXCJdLFwiYXBwbGljYXRpb24vY2RtaS1jb250YWluZXJcIjpbXCJjZG1pY1wiXSxcImFwcGxpY2F0aW9uL2NkbWktZG9tYWluXCI6W1wiY2RtaWRcIl0sXCJhcHBsaWNhdGlvbi9jZG1pLW9iamVjdFwiOltcImNkbWlvXCJdLFwiYXBwbGljYXRpb24vY2RtaS1xdWV1ZVwiOltcImNkbWlxXCJdLFwiYXBwbGljYXRpb24vY3Utc2VlbWVcIjpbXCJjdVwiXSxcImFwcGxpY2F0aW9uL2Rhc2greG1sXCI6W1wibXBkXCJdLFwiYXBwbGljYXRpb24vZGF2bW91bnQreG1sXCI6W1wiZGF2bW91bnRcIl0sXCJhcHBsaWNhdGlvbi9kb2Nib29rK3htbFwiOltcImRia1wiXSxcImFwcGxpY2F0aW9uL2Rzc2MrZGVyXCI6W1wiZHNzY1wiXSxcImFwcGxpY2F0aW9uL2Rzc2MreG1sXCI6W1wieGRzc2NcIl0sXCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0XCI6W1wiZWNtYVwiXSxcImFwcGxpY2F0aW9uL2VtbWEreG1sXCI6W1wiZW1tYVwiXSxcImFwcGxpY2F0aW9uL2VwdWIremlwXCI6W1wiZXB1YlwiXSxcImFwcGxpY2F0aW9uL2V4aVwiOltcImV4aVwiXSxcImFwcGxpY2F0aW9uL2ZvbnQtdGRwZnJcIjpbXCJwZnJcIl0sXCJhcHBsaWNhdGlvbi9mb250LXdvZmZcIjpbXCJ3b2ZmXCJdLFwiYXBwbGljYXRpb24vZm9udC13b2ZmMlwiOltcIndvZmYyXCJdLFwiYXBwbGljYXRpb24vZ2VvK2pzb25cIjpbXCJnZW9qc29uXCJdLFwiYXBwbGljYXRpb24vZ21sK3htbFwiOltcImdtbFwiXSxcImFwcGxpY2F0aW9uL2dweCt4bWxcIjpbXCJncHhcIl0sXCJhcHBsaWNhdGlvbi9neGZcIjpbXCJneGZcIl0sXCJhcHBsaWNhdGlvbi9nemlwXCI6W1wiZ3pcIl0sXCJhcHBsaWNhdGlvbi9oeXBlcnN0dWRpb1wiOltcInN0a1wiXSxcImFwcGxpY2F0aW9uL2lua21sK3htbFwiOltcImlua1wiLFwiaW5rbWxcIl0sXCJhcHBsaWNhdGlvbi9pcGZpeFwiOltcImlwZml4XCJdLFwiYXBwbGljYXRpb24vamF2YS1hcmNoaXZlXCI6W1wiamFyXCIsXCJ3YXJcIixcImVhclwiXSxcImFwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3RcIjpbXCJzZXJcIl0sXCJhcHBsaWNhdGlvbi9qYXZhLXZtXCI6W1wiY2xhc3NcIl0sXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCI6W1wianNcIixcIm1qc1wiXSxcImFwcGxpY2F0aW9uL2pzb25cIjpbXCJqc29uXCIsXCJtYXBcIl0sXCJhcHBsaWNhdGlvbi9qc29uNVwiOltcImpzb241XCJdLFwiYXBwbGljYXRpb24vanNvbm1sK2pzb25cIjpbXCJqc29ubWxcIl0sXCJhcHBsaWNhdGlvbi9sZCtqc29uXCI6W1wianNvbmxkXCJdLFwiYXBwbGljYXRpb24vbG9zdCt4bWxcIjpbXCJsb3N0eG1sXCJdLFwiYXBwbGljYXRpb24vbWFjLWJpbmhleDQwXCI6W1wiaHF4XCJdLFwiYXBwbGljYXRpb24vbWFjLWNvbXBhY3Rwcm9cIjpbXCJjcHRcIl0sXCJhcHBsaWNhdGlvbi9tYWRzK3htbFwiOltcIm1hZHNcIl0sXCJhcHBsaWNhdGlvbi9tYW5pZmVzdCtqc29uXCI6W1wid2VibWFuaWZlc3RcIl0sXCJhcHBsaWNhdGlvbi9tYXJjXCI6W1wibXJjXCJdLFwiYXBwbGljYXRpb24vbWFyY3htbCt4bWxcIjpbXCJtcmN4XCJdLFwiYXBwbGljYXRpb24vbWF0aGVtYXRpY2FcIjpbXCJtYVwiLFwibmJcIixcIm1iXCJdLFwiYXBwbGljYXRpb24vbWF0aG1sK3htbFwiOltcIm1hdGhtbFwiXSxcImFwcGxpY2F0aW9uL21ib3hcIjpbXCJtYm94XCJdLFwiYXBwbGljYXRpb24vbWVkaWFzZXJ2ZXJjb250cm9sK3htbFwiOltcIm1zY21sXCJdLFwiYXBwbGljYXRpb24vbWV0YWxpbmsreG1sXCI6W1wibWV0YWxpbmtcIl0sXCJhcHBsaWNhdGlvbi9tZXRhbGluazQreG1sXCI6W1wibWV0YTRcIl0sXCJhcHBsaWNhdGlvbi9tZXRzK3htbFwiOltcIm1ldHNcIl0sXCJhcHBsaWNhdGlvbi9tb2RzK3htbFwiOltcIm1vZHNcIl0sXCJhcHBsaWNhdGlvbi9tcDIxXCI6W1wibTIxXCIsXCJtcDIxXCJdLFwiYXBwbGljYXRpb24vbXA0XCI6W1wibXA0c1wiLFwibTRwXCJdLFwiYXBwbGljYXRpb24vbXN3b3JkXCI6W1wiZG9jXCIsXCJkb3RcIl0sXCJhcHBsaWNhdGlvbi9teGZcIjpbXCJteGZcIl0sXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjpbXCJiaW5cIixcImRtc1wiLFwibHJmXCIsXCJtYXJcIixcInNvXCIsXCJkaXN0XCIsXCJkaXN0elwiLFwicGtnXCIsXCJicGtcIixcImR1bXBcIixcImVsY1wiLFwiZGVwbG95XCIsXCJleGVcIixcImRsbFwiLFwiZGViXCIsXCJkbWdcIixcImlzb1wiLFwiaW1nXCIsXCJtc2lcIixcIm1zcFwiLFwibXNtXCIsXCJidWZmZXJcIl0sXCJhcHBsaWNhdGlvbi9vZGFcIjpbXCJvZGFcIl0sXCJhcHBsaWNhdGlvbi9vZWJwcy1wYWNrYWdlK3htbFwiOltcIm9wZlwiXSxcImFwcGxpY2F0aW9uL29nZ1wiOltcIm9neFwiXSxcImFwcGxpY2F0aW9uL29tZG9jK3htbFwiOltcIm9tZG9jXCJdLFwiYXBwbGljYXRpb24vb25lbm90ZVwiOltcIm9uZXRvY1wiLFwib25ldG9jMlwiLFwib25ldG1wXCIsXCJvbmVwa2dcIl0sXCJhcHBsaWNhdGlvbi9veHBzXCI6W1wib3hwc1wiXSxcImFwcGxpY2F0aW9uL3BhdGNoLW9wcy1lcnJvcit4bWxcIjpbXCJ4ZXJcIl0sXCJhcHBsaWNhdGlvbi9wZGZcIjpbXCJwZGZcIl0sXCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkXCI6W1wicGdwXCJdLFwiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZVwiOltcImFzY1wiLFwic2lnXCJdLFwiYXBwbGljYXRpb24vcGljcy1ydWxlc1wiOltcInByZlwiXSxcImFwcGxpY2F0aW9uL3BrY3MxMFwiOltcInAxMFwiXSxcImFwcGxpY2F0aW9uL3BrY3M3LW1pbWVcIjpbXCJwN21cIixcInA3Y1wiXSxcImFwcGxpY2F0aW9uL3BrY3M3LXNpZ25hdHVyZVwiOltcInA3c1wiXSxcImFwcGxpY2F0aW9uL3BrY3M4XCI6W1wicDhcIl0sXCJhcHBsaWNhdGlvbi9wa2l4LWF0dHItY2VydFwiOltcImFjXCJdLFwiYXBwbGljYXRpb24vcGtpeC1jZXJ0XCI6W1wiY2VyXCJdLFwiYXBwbGljYXRpb24vcGtpeC1jcmxcIjpbXCJjcmxcIl0sXCJhcHBsaWNhdGlvbi9wa2l4LXBraXBhdGhcIjpbXCJwa2lwYXRoXCJdLFwiYXBwbGljYXRpb24vcGtpeGNtcFwiOltcInBraVwiXSxcImFwcGxpY2F0aW9uL3Bscyt4bWxcIjpbXCJwbHNcIl0sXCJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0XCI6W1wiYWlcIixcImVwc1wiLFwicHNcIl0sXCJhcHBsaWNhdGlvbi9wcnMuY3d3XCI6W1wiY3d3XCJdLFwiYXBwbGljYXRpb24vcHNrYyt4bWxcIjpbXCJwc2tjeG1sXCJdLFwiYXBwbGljYXRpb24vcmRmK3htbFwiOltcInJkZlwiXSxcImFwcGxpY2F0aW9uL3JlZ2luZm8reG1sXCI6W1wicmlmXCJdLFwiYXBwbGljYXRpb24vcmVsYXgtbmctY29tcGFjdC1zeW50YXhcIjpbXCJybmNcIl0sXCJhcHBsaWNhdGlvbi9yZXNvdXJjZS1saXN0cyt4bWxcIjpbXCJybFwiXSxcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzLWRpZmYreG1sXCI6W1wicmxkXCJdLFwiYXBwbGljYXRpb24vcmxzLXNlcnZpY2VzK3htbFwiOltcInJzXCJdLFwiYXBwbGljYXRpb24vcnBraS1naG9zdGJ1c3RlcnNcIjpbXCJnYnJcIl0sXCJhcHBsaWNhdGlvbi9ycGtpLW1hbmlmZXN0XCI6W1wibWZ0XCJdLFwiYXBwbGljYXRpb24vcnBraS1yb2FcIjpbXCJyb2FcIl0sXCJhcHBsaWNhdGlvbi9yc2QreG1sXCI6W1wicnNkXCJdLFwiYXBwbGljYXRpb24vcnNzK3htbFwiOltcInJzc1wiXSxcImFwcGxpY2F0aW9uL3J0ZlwiOltcInJ0ZlwiXSxcImFwcGxpY2F0aW9uL3NibWwreG1sXCI6W1wic2JtbFwiXSxcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVxdWVzdFwiOltcInNjcVwiXSxcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVzcG9uc2VcIjpbXCJzY3NcIl0sXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlcXVlc3RcIjpbXCJzcHFcIl0sXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlc3BvbnNlXCI6W1wic3BwXCJdLFwiYXBwbGljYXRpb24vc2RwXCI6W1wic2RwXCJdLFwiYXBwbGljYXRpb24vc2V0LXBheW1lbnQtaW5pdGlhdGlvblwiOltcInNldHBheVwiXSxcImFwcGxpY2F0aW9uL3NldC1yZWdpc3RyYXRpb24taW5pdGlhdGlvblwiOltcInNldHJlZ1wiXSxcImFwcGxpY2F0aW9uL3NoZit4bWxcIjpbXCJzaGZcIl0sXCJhcHBsaWNhdGlvbi9zbWlsK3htbFwiOltcInNtaVwiLFwic21pbFwiXSxcImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeVwiOltcInJxXCJdLFwiYXBwbGljYXRpb24vc3BhcnFsLXJlc3VsdHMreG1sXCI6W1wic3J4XCJdLFwiYXBwbGljYXRpb24vc3Jnc1wiOltcImdyYW1cIl0sXCJhcHBsaWNhdGlvbi9zcmdzK3htbFwiOltcImdyeG1sXCJdLFwiYXBwbGljYXRpb24vc3J1K3htbFwiOltcInNydVwiXSxcImFwcGxpY2F0aW9uL3NzZGwreG1sXCI6W1wic3NkbFwiXSxcImFwcGxpY2F0aW9uL3NzbWwreG1sXCI6W1wic3NtbFwiXSxcImFwcGxpY2F0aW9uL3RlaSt4bWxcIjpbXCJ0ZWlcIixcInRlaWNvcnB1c1wiXSxcImFwcGxpY2F0aW9uL3RocmF1ZCt4bWxcIjpbXCJ0ZmlcIl0sXCJhcHBsaWNhdGlvbi90aW1lc3RhbXBlZC1kYXRhXCI6W1widHNkXCJdLFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LWxhcmdlXCI6W1wicGxiXCJdLFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXNtYWxsXCI6W1wicHNiXCJdLFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXZhclwiOltcInB2YlwiXSxcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwMi50Y2FwXCI6W1widGNhcFwiXSxcImFwcGxpY2F0aW9uL3ZuZC4zbS5wb3N0LWl0LW5vdGVzXCI6W1wicHduXCJdLFwiYXBwbGljYXRpb24vdm5kLmFjY3BhYy5zaW1wbHkuYXNvXCI6W1wiYXNvXCJdLFwiYXBwbGljYXRpb24vdm5kLmFjY3BhYy5zaW1wbHkuaW1wXCI6W1wiaW1wXCJdLFwiYXBwbGljYXRpb24vdm5kLmFjdWNvYm9sXCI6W1wiYWN1XCJdLFwiYXBwbGljYXRpb24vdm5kLmFjdWNvcnBcIjpbXCJhdGNcIixcImFjdXRjXCJdLFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLmFpci1hcHBsaWNhdGlvbi1pbnN0YWxsZXItcGFja2FnZSt6aXBcIjpbXCJhaXJcIl0sXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUuZm9ybXNjZW50cmFsLmZjZHRcIjpbXCJmY2R0XCJdLFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLmZ4cFwiOltcImZ4cFwiLFwiZnhwbFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS54ZHAreG1sXCI6W1wieGRwXCJdLFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLnhmZGZcIjpbXCJ4ZmRmXCJdLFwiYXBwbGljYXRpb24vdm5kLmFoZWFkLnNwYWNlXCI6W1wiYWhlYWRcIl0sXCJhcHBsaWNhdGlvbi92bmQuYWlyemlwLmZpbGVzZWN1cmUuYXpmXCI6W1wiYXpmXCJdLFwiYXBwbGljYXRpb24vdm5kLmFpcnppcC5maWxlc2VjdXJlLmF6c1wiOltcImF6c1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2tcIjpbXCJhendcIl0sXCJhcHBsaWNhdGlvbi92bmQuYW1lcmljYW5keW5hbWljcy5hY2NcIjpbXCJhY2NcIl0sXCJhcHBsaWNhdGlvbi92bmQuYW1pZ2EuYW1pXCI6W1wiYW1pXCJdLFwiYXBwbGljYXRpb24vdm5kLmFuZHJvaWQucGFja2FnZS1hcmNoaXZlXCI6W1wiYXBrXCJdLFwiYXBwbGljYXRpb24vdm5kLmFuc2VyLXdlYi1jZXJ0aWZpY2F0ZS1pc3N1ZS1pbml0aWF0aW9uXCI6W1wiY2lpXCJdLFwiYXBwbGljYXRpb24vdm5kLmFuc2VyLXdlYi1mdW5kcy10cmFuc2Zlci1pbml0aWF0aW9uXCI6W1wiZnRpXCJdLFwiYXBwbGljYXRpb24vdm5kLmFudGl4LmdhbWUtY29tcG9uZW50XCI6W1wiYXR4XCJdLFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLmluc3RhbGxlcit4bWxcIjpbXCJtcGtnXCJdLFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmxcIjpbXCJtM3U4XCJdLFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLnBrcGFzc1wiOltcInBrcGFzc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5hcmlzdGFuZXR3b3Jrcy5zd2lcIjpbXCJzd2lcIl0sXCJhcHBsaWNhdGlvbi92bmQuYXN0cmFlYS1zb2Z0d2FyZS5pb3RhXCI6W1wiaW90YVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5hdWRpb2dyYXBoXCI6W1wiYWVwXCJdLFwiYXBwbGljYXRpb24vdm5kLmJsdWVpY2UubXVsdGlwYXNzXCI6W1wibXBtXCJdLFwiYXBwbGljYXRpb24vdm5kLmJtaVwiOltcImJtaVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5idXNpbmVzc29iamVjdHNcIjpbXCJyZXBcIl0sXCJhcHBsaWNhdGlvbi92bmQuY2hlbWRyYXcreG1sXCI6W1wiY2R4bWxcIl0sXCJhcHBsaWNhdGlvbi92bmQuY2hpcG51dHMua2FyYW9rZS1tbWRcIjpbXCJtbWRcIl0sXCJhcHBsaWNhdGlvbi92bmQuY2luZGVyZWxsYVwiOltcImNkeVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5jbGF5bW9yZVwiOltcImNsYVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5jbG9hbnRvLnJwOVwiOltcInJwOVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5jbG9uay5jNGdyb3VwXCI6W1wiYzRnXCIsXCJjNGRcIixcImM0ZlwiLFwiYzRwXCIsXCJjNHVcIl0sXCJhcHBsaWNhdGlvbi92bmQuY2x1ZXRydXN0LmNhcnRvbW9iaWxlLWNvbmZpZ1wiOltcImMxMWFtY1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnLXBrZ1wiOltcImMxMWFtelwiXSxcImFwcGxpY2F0aW9uL3ZuZC5jb21tb25zcGFjZVwiOltcImNzcFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5jb250YWN0LmNtc2dcIjpbXCJjZGJjbXNnXCJdLFwiYXBwbGljYXRpb24vdm5kLmNvc21vY2FsbGVyXCI6W1wiY21jXCJdLFwiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXJcIjpbXCJjbGt4XCJdLFwiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXIua2V5Ym9hcmRcIjpbXCJjbGtrXCJdLFwiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXIucGFsZXR0ZVwiOltcImNsa3BcIl0sXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci50ZW1wbGF0ZVwiOltcImNsa3RcIl0sXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci53b3JkYmFua1wiOltcImNsa3dcIl0sXCJhcHBsaWNhdGlvbi92bmQuY3JpdGljYWx0b29scy53YnMreG1sXCI6W1wid2JzXCJdLFwiYXBwbGljYXRpb24vdm5kLmN0Yy1wb3NtbFwiOltcInBtbFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXBwZFwiOltcInBwZFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5jdXJsLmNhclwiOltcImNhclwiXSxcImFwcGxpY2F0aW9uL3ZuZC5jdXJsLnBjdXJsXCI6W1wicGN1cmxcIl0sXCJhcHBsaWNhdGlvbi92bmQuZGFydFwiOltcImRhcnRcIl0sXCJhcHBsaWNhdGlvbi92bmQuZGF0YS12aXNpb24ucmR6XCI6W1wicmR6XCJdLFwiYXBwbGljYXRpb24vdm5kLmRlY2UuZGF0YVwiOltcInV2ZlwiLFwidXZ2ZlwiLFwidXZkXCIsXCJ1dnZkXCJdLFwiYXBwbGljYXRpb24vdm5kLmRlY2UudHRtbCt4bWxcIjpbXCJ1dnRcIixcInV2dnRcIl0sXCJhcHBsaWNhdGlvbi92bmQuZGVjZS51bnNwZWNpZmllZFwiOltcInV2eFwiLFwidXZ2eFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5kZWNlLnppcFwiOltcInV2elwiLFwidXZ2elwiXSxcImFwcGxpY2F0aW9uL3ZuZC5kZW5vdm8uZmNzZWxheW91dC1saW5rXCI6W1wiZmVfbGF1bmNoXCJdLFwiYXBwbGljYXRpb24vdm5kLmRuYVwiOltcImRuYVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5kb2xieS5tbHBcIjpbXCJtbHBcIl0sXCJhcHBsaWNhdGlvbi92bmQuZHBncmFwaFwiOltcImRwZ1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5kcmVhbWZhY3RvcnlcIjpbXCJkZmFjXCJdLFwiYXBwbGljYXRpb24vdm5kLmRzLWtleXBvaW50XCI6W1wia3B4eFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5kdmIuYWl0XCI6W1wiYWl0XCJdLFwiYXBwbGljYXRpb24vdm5kLmR2Yi5zZXJ2aWNlXCI6W1wic3ZjXCJdLFwiYXBwbGljYXRpb24vdm5kLmR5bmFnZW9cIjpbXCJnZW9cIl0sXCJhcHBsaWNhdGlvbi92bmQuZWNvd2luLmNoYXJ0XCI6W1wibWFnXCJdLFwiYXBwbGljYXRpb24vdm5kLmVubGl2ZW5cIjpbXCJubWxcIl0sXCJhcHBsaWNhdGlvbi92bmQuZXBzb24uZXNmXCI6W1wiZXNmXCJdLFwiYXBwbGljYXRpb24vdm5kLmVwc29uLm1zZlwiOltcIm1zZlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5xdWlja2FuaW1lXCI6W1wicWFtXCJdLFwiYXBwbGljYXRpb24vdm5kLmVwc29uLnNhbHRcIjpbXCJzbHRcIl0sXCJhcHBsaWNhdGlvbi92bmQuZXBzb24uc3NmXCI6W1wic3NmXCJdLFwiYXBwbGljYXRpb24vdm5kLmVzemlnbm8zK3htbFwiOltcImVzM1wiLFwiZXQzXCJdLFwiYXBwbGljYXRpb24vdm5kLmV6cGl4LWFsYnVtXCI6W1wiZXoyXCJdLFwiYXBwbGljYXRpb24vdm5kLmV6cGl4LXBhY2thZ2VcIjpbXCJlejNcIl0sXCJhcHBsaWNhdGlvbi92bmQuZmRmXCI6W1wiZmRmXCJdLFwiYXBwbGljYXRpb24vdm5kLmZkc24ubXNlZWRcIjpbXCJtc2VlZFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5mZHNuLnNlZWRcIjpbXCJzZWVkXCIsXCJkYXRhbGVzc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5mbG9ncmFwaGl0XCI6W1wiZ3BoXCJdLFwiYXBwbGljYXRpb24vdm5kLmZsdXh0aW1lLmNsaXBcIjpbXCJmdGNcIl0sXCJhcHBsaWNhdGlvbi92bmQuZnJhbWVtYWtlclwiOltcImZtXCIsXCJmcmFtZVwiLFwibWFrZXJcIixcImJvb2tcIl0sXCJhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5mbmNcIjpbXCJmbmNcIl0sXCJhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5sdGZcIjpbXCJsdGZcIl0sXCJhcHBsaWNhdGlvbi92bmQuZnNjLndlYmxhdW5jaFwiOltcImZzY1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzXCI6W1wib2FzXCJdLFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXMyXCI6W1wib2EyXCJdLFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXMzXCI6W1wib2EzXCJdLFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXNncFwiOltcImZnNVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzcHJzXCI6W1wiYmgyXCJdLFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kZGRcIjpbXCJkZGRcIl0sXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRvY3V3b3Jrc1wiOltcInhkd1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZG9jdXdvcmtzLmJpbmRlclwiOltcInhiZFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5mdXp6eXNoZWV0XCI6W1wiZnpzXCJdLFwiYXBwbGljYXRpb24vdm5kLmdlbm9tYXRpeC50dXhlZG9cIjpbXCJ0eGRcIl0sXCJhcHBsaWNhdGlvbi92bmQuZ2VvZ2VicmEuZmlsZVwiOltcImdnYlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS50b29sXCI6W1wiZ2d0XCJdLFwiYXBwbGljYXRpb24vdm5kLmdlb21ldHJ5LWV4cGxvcmVyXCI6W1wiZ2V4XCIsXCJncmVcIl0sXCJhcHBsaWNhdGlvbi92bmQuZ2VvbmV4dFwiOltcImd4dFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5nZW9wbGFuXCI6W1wiZzJ3XCJdLFwiYXBwbGljYXRpb24vdm5kLmdlb3NwYWNlXCI6W1wiZzN3XCJdLFwiYXBwbGljYXRpb24vdm5kLmdteFwiOltcImdteFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5kb2N1bWVudFwiOltcImdkb2NcIl0sXCJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMucHJlc2VudGF0aW9uXCI6W1wiZ3NsaWRlc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5zcHJlYWRzaGVldFwiOltcImdzaGVldFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtZWFydGgua21sK3htbFwiOltcImttbFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtZWFydGgua216XCI6W1wia216XCJdLFwiYXBwbGljYXRpb24vdm5kLmdyYWZlcVwiOltcImdxZlwiLFwiZ3FzXCJdLFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS1hY2NvdW50XCI6W1wiZ2FjXCJdLFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS1oZWxwXCI6W1wiZ2hmXCJdLFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS1pZGVudGl0eS1tZXNzYWdlXCI6W1wiZ2ltXCJdLFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS1pbmplY3RvclwiOltcImdydlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtdG9vbC1tZXNzYWdlXCI6W1wiZ3RtXCJdLFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLXRlbXBsYXRlXCI6W1widHBsXCJdLFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS12Y2FyZFwiOltcInZjZ1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5oYWwreG1sXCI6W1wiaGFsXCJdLFwiYXBwbGljYXRpb24vdm5kLmhhbmRoZWxkLWVudGVydGFpbm1lbnQreG1sXCI6W1wiem1tXCJdLFwiYXBwbGljYXRpb24vdm5kLmhiY2lcIjpbXCJoYmNpXCJdLFwiYXBwbGljYXRpb24vdm5kLmhoZS5sZXNzb24tcGxheWVyXCI6W1wibGVzXCJdLFwiYXBwbGljYXRpb24vdm5kLmhwLWhwZ2xcIjpbXCJocGdsXCJdLFwiYXBwbGljYXRpb24vdm5kLmhwLWhwaWRcIjpbXCJocGlkXCJdLFwiYXBwbGljYXRpb24vdm5kLmhwLWhwc1wiOltcImhwc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5ocC1qbHl0XCI6W1wiamx0XCJdLFwiYXBwbGljYXRpb24vdm5kLmhwLXBjbFwiOltcInBjbFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5ocC1wY2x4bFwiOltcInBjbHhsXCJdLFwiYXBwbGljYXRpb24vdm5kLmh5ZHJvc3RhdGl4LnNvZi1kYXRhXCI6W1wic2ZkLWhkc3R4XCJdLFwiYXBwbGljYXRpb24vdm5kLmlibS5taW5pcGF5XCI6W1wibXB5XCJdLFwiYXBwbGljYXRpb24vdm5kLmlibS5tb2RjYXBcIjpbXCJhZnBcIixcImxpc3RhZnBcIixcImxpc3QzODIwXCJdLFwiYXBwbGljYXRpb24vdm5kLmlibS5yaWdodHMtbWFuYWdlbWVudFwiOltcImlybVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5pYm0uc2VjdXJlLWNvbnRhaW5lclwiOltcInNjXCJdLFwiYXBwbGljYXRpb24vdm5kLmljY3Byb2ZpbGVcIjpbXCJpY2NcIixcImljbVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5pZ2xvYWRlclwiOltcImlnbFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5pbW1lcnZpc2lvbi1pdnBcIjpbXCJpdnBcIl0sXCJhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZ1XCI6W1wiaXZ1XCJdLFwiYXBwbGljYXRpb24vdm5kLmluc29ycy5pZ21cIjpbXCJpZ21cIl0sXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJjb24uZm9ybW5ldFwiOltcInhwd1wiLFwieHB4XCJdLFwiYXBwbGljYXRpb24vdm5kLmludGVyZ2VvXCI6W1wiaTJnXCJdLFwiYXBwbGljYXRpb24vdm5kLmludHUucWJvXCI6W1wicWJvXCJdLFwiYXBwbGljYXRpb24vdm5kLmludHUucWZ4XCI6W1wicWZ4XCJdLFwiYXBwbGljYXRpb24vdm5kLmlwdW5wbHVnZ2VkLnJjcHJvZmlsZVwiOltcInJjcHJvZmlsZVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5pcmVwb3NpdG9yeS5wYWNrYWdlK3htbFwiOltcImlycFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5pcy14cHJcIjpbXCJ4cHJcIl0sXCJhcHBsaWNhdGlvbi92bmQuaXNhYy5mY3NcIjpbXCJmY3NcIl0sXCJhcHBsaWNhdGlvbi92bmQuamFtXCI6W1wiamFtXCJdLFwiYXBwbGljYXRpb24vdm5kLmpjcC5qYXZhbWUubWlkbGV0LXJtc1wiOltcInJtc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5qaXNwXCI6W1wiamlzcFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5qb29zdC5qb2RhLWFyY2hpdmVcIjpbXCJqb2RhXCJdLFwiYXBwbGljYXRpb24vdm5kLmthaG9vdHpcIjpbXCJrdHpcIixcImt0clwiXSxcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2FyYm9uXCI6W1wia2FyYm9uXCJdLFwiYXBwbGljYXRpb24vdm5kLmtkZS5rY2hhcnRcIjpbXCJjaHJ0XCJdLFwiYXBwbGljYXRpb24vdm5kLmtkZS5rZm9ybXVsYVwiOltcImtmb1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2l2aW9cIjpbXCJmbHdcIl0sXCJhcHBsaWNhdGlvbi92bmQua2RlLmtvbnRvdXJcIjpbXCJrb25cIl0sXCJhcHBsaWNhdGlvbi92bmQua2RlLmtwcmVzZW50ZXJcIjpbXCJrcHJcIixcImtwdFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5rZGUua3NwcmVhZFwiOltcImtzcFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5rZGUua3dvcmRcIjpbXCJrd2RcIixcImt3dFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5rZW5hbWVhYXBwXCI6W1wiaHRrZVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5raWRzcGlyYXRpb25cIjpbXCJraWFcIl0sXCJhcHBsaWNhdGlvbi92bmQua2luYXJcIjpbXCJrbmVcIixcImtucFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5rb2FuXCI6W1wic2twXCIsXCJza2RcIixcInNrdFwiLFwic2ttXCJdLFwiYXBwbGljYXRpb24vdm5kLmtvZGFrLWRlc2NyaXB0b3JcIjpbXCJzc2VcIl0sXCJhcHBsaWNhdGlvbi92bmQubGFzLmxhcyt4bWxcIjpbXCJsYXN4bWxcIl0sXCJhcHBsaWNhdGlvbi92bmQubGxhbWFncmFwaGljcy5saWZlLWJhbGFuY2UuZGVza3RvcFwiOltcImxiZFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5sbGFtYWdyYXBoaWNzLmxpZmUtYmFsYW5jZS5leGNoYW5nZSt4bWxcIjpbXCJsYmVcIl0sXCJhcHBsaWNhdGlvbi92bmQubG90dXMtMS0yLTNcIjpbXCIxMjNcIl0sXCJhcHBsaWNhdGlvbi92bmQubG90dXMtYXBwcm9hY2hcIjpbXCJhcHJcIl0sXCJhcHBsaWNhdGlvbi92bmQubG90dXMtZnJlZWxhbmNlXCI6W1wicHJlXCJdLFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLW5vdGVzXCI6W1wibnNmXCJdLFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLW9yZ2FuaXplclwiOltcIm9yZ1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy1zY3JlZW5jYW1cIjpbXCJzY21cIl0sXCJhcHBsaWNhdGlvbi92bmQubG90dXMtd29yZHByb1wiOltcImx3cFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tYWNwb3J0cy5wb3J0cGtnXCI6W1wicG9ydHBrZ1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5tY2RcIjpbXCJtY2RcIl0sXCJhcHBsaWNhdGlvbi92bmQubWVkY2FsY2RhdGFcIjpbXCJtYzFcIl0sXCJhcHBsaWNhdGlvbi92bmQubWVkaWFzdGF0aW9uLmNka2V5XCI6W1wiY2RrZXlcIl0sXCJhcHBsaWNhdGlvbi92bmQubWZlclwiOltcIm13ZlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tZm1wXCI6W1wibWZtXCJdLFwiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguZmxvXCI6W1wiZmxvXCJdLFwiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguaWd4XCI6W1wiaWd4XCJdLFwiYXBwbGljYXRpb24vdm5kLm1pZlwiOltcIm1pZlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMuZGFmXCI6W1wiZGFmXCJdLFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kaXNcIjpbXCJkaXNcIl0sXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLm1ia1wiOltcIm1ia1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMubXF5XCI6W1wibXF5XCJdLFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tc2xcIjpbXCJtc2xcIl0sXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLnBsY1wiOltcInBsY1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMudHhmXCI6W1widHhmXCJdLFwiYXBwbGljYXRpb24vdm5kLm1vcGh1bi5hcHBsaWNhdGlvblwiOltcIm1wblwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tb3BodW4uY2VydGlmaWNhdGVcIjpbXCJtcGNcIl0sXCJhcHBsaWNhdGlvbi92bmQubW96aWxsYS54dWwreG1sXCI6W1wieHVsXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLWFydGdhbHJ5XCI6W1wiY2lsXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLWNhYi1jb21wcmVzc2VkXCI6W1wiY2FiXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCI6W1wieGxzXCIsXCJ4bG1cIixcInhsYVwiLFwieGxjXCIsXCJ4bHRcIixcInhsd1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb2VuYWJsZWQuMTJcIjpbXCJ4bGFtXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb2VuYWJsZWQuMTJcIjpbXCJ4bHNiXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvZW5hYmxlZC4xMlwiOltcInhsc21cIl0sXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyXCI6W1wieGx0bVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0XCI6W1wiZW90XCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLWh0bWxoZWxwXCI6W1wiY2htXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLWltc1wiOltcImltc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1scm1cIjpbXCJscm1cIl0sXCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNldGhlbWVcIjpbXCJ0aG14XCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLW91dGxvb2tcIjpbXCJtc2dcIl0sXCJhcHBsaWNhdGlvbi92bmQubXMtcGtpLnNlY2NhdFwiOltcImNhdFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc3RsXCI6W1wic3RsXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnRcIjpbXCJwcHRcIixcInBwc1wiLFwicG90XCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQuYWRkaW4ubWFjcm9lbmFibGVkLjEyXCI6W1wicHBhbVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnByZXNlbnRhdGlvbi5tYWNyb2VuYWJsZWQuMTJcIjpbXCJwcHRtXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQuc2xpZGUubWFjcm9lbmFibGVkLjEyXCI6W1wic2xkbVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnNsaWRlc2hvdy5tYWNyb2VuYWJsZWQuMTJcIjpbXCJwcHNtXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyXCI6W1wicG90bVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tcy1wcm9qZWN0XCI6W1wibXBwXCIsXCJtcHRcIl0sXCJhcHBsaWNhdGlvbi92bmQubXMtd29yZC5kb2N1bWVudC5tYWNyb2VuYWJsZWQuMTJcIjpbXCJkb2NtXCJdLFwiYXBwbGljYXRpb24vdm5kLm1zLXdvcmQudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyXCI6W1wiZG90bVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tcy13b3Jrc1wiOltcIndwc1wiLFwid2tzXCIsXCJ3Y21cIixcIndkYlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5tcy13cGxcIjpbXCJ3cGxcIl0sXCJhcHBsaWNhdGlvbi92bmQubXMteHBzZG9jdW1lbnRcIjpbXCJ4cHNcIl0sXCJhcHBsaWNhdGlvbi92bmQubXNlcVwiOltcIm1zZXFcIl0sXCJhcHBsaWNhdGlvbi92bmQubXVzaWNpYW5cIjpbXCJtdXNcIl0sXCJhcHBsaWNhdGlvbi92bmQubXV2ZWUuc3R5bGVcIjpbXCJtc3R5XCJdLFwiYXBwbGljYXRpb24vdm5kLm15bmZjXCI6W1widGFnbGV0XCJdLFwiYXBwbGljYXRpb24vdm5kLm5ldXJvbGFuZ3VhZ2Uubmx1XCI6W1wibmx1XCJdLFwiYXBwbGljYXRpb24vdm5kLm5pdGZcIjpbXCJudGZcIixcIm5pdGZcIl0sXCJhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtZGlyZWN0b3J5XCI6W1wibm5kXCJdLFwiYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LXNlYWxlclwiOltcIm5uc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC13ZWJcIjpbXCJubndcIl0sXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLmRhdGFcIjpbXCJuZ2RhdFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2Uuc3ltYmlhbi5pbnN0YWxsXCI6W1wibi1nYWdlXCJdLFwiYXBwbGljYXRpb24vdm5kLm5va2lhLnJhZGlvLXByZXNldFwiOltcInJwc3RcIl0sXCJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0c1wiOltcInJwc3NcIl0sXCJhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZWRtXCI6W1wiZWRtXCJdLFwiYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkeFwiOltcImVkeFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5ub3ZhZGlnbS5leHRcIjpbXCJleHRcIl0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmNoYXJ0XCI6W1wib2RjXCJdLFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5jaGFydC10ZW1wbGF0ZVwiOltcIm90Y1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZGF0YWJhc2VcIjpbXCJvZGJcIl0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGFcIjpbXCJvZGZcIl0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGEtdGVtcGxhdGVcIjpbXCJvZGZ0XCJdLFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljc1wiOltcIm9kZ1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3MtdGVtcGxhdGVcIjpbXCJvdGdcIl0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmltYWdlXCI6W1wib2RpXCJdLFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZS10ZW1wbGF0ZVwiOltcIm90aVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uXCI6W1wib2RwXCJdLFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24tdGVtcGxhdGVcIjpbXCJvdHBcIl0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0XCI6W1wib2RzXCJdLFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldC10ZW1wbGF0ZVwiOltcIm90c1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dFwiOltcIm9kdFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC1tYXN0ZXJcIjpbXCJvZG1cIl0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtdGVtcGxhdGVcIjpbXCJvdHRcIl0sXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtd2ViXCI6W1wib3RoXCJdLFwiYXBwbGljYXRpb24vdm5kLm9scGMtc3VnYXJcIjpbXCJ4b1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZGQyK3htbFwiOltcImRkMlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVub2ZmaWNlb3JnLmV4dGVuc2lvblwiOltcIm94dFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb25cIjpbXCJwcHR4XCJdLFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlXCI6W1wic2xkeFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXNob3dcIjpbXCJwcHN4XCJdLFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnRlbXBsYXRlXCI6W1wicG90eFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCI6W1wieGxzeFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlXCI6W1wieGx0eFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50XCI6W1wiZG9jeFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlXCI6W1wiZG90eFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vc2dlby5tYXBndWlkZS5wYWNrYWdlXCI6W1wibWdwXCJdLFwiYXBwbGljYXRpb24vdm5kLm9zZ2kuZHBcIjpbXCJkcFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5vc2dpLnN1YnN5c3RlbVwiOltcImVzYVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5wYWxtXCI6W1wicGRiXCIsXCJwcWFcIixcIm9wcmNcIl0sXCJhcHBsaWNhdGlvbi92bmQucGF3YWFmaWxlXCI6W1wicGF3XCJdLFwiYXBwbGljYXRpb24vdm5kLnBnLmZvcm1hdFwiOltcInN0clwiXSxcImFwcGxpY2F0aW9uL3ZuZC5wZy5vc2FzbGlcIjpbXCJlaTZcIl0sXCJhcHBsaWNhdGlvbi92bmQucGljc2VsXCI6W1wiZWZpZlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5wbWkud2lkZ2V0XCI6W1wid2dcIl0sXCJhcHBsaWNhdGlvbi92bmQucG9ja2V0bGVhcm5cIjpbXCJwbGZcIl0sXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNlwiOltcInBiZFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5wcmV2aWV3c3lzdGVtcy5ib3hcIjpbXCJib3hcIl0sXCJhcHBsaWNhdGlvbi92bmQucHJvdGV1cy5tYWdhemluZVwiOltcIm1nelwiXSxcImFwcGxpY2F0aW9uL3ZuZC5wdWJsaXNoYXJlLWRlbHRhLXRyZWVcIjpbXCJxcHNcIl0sXCJhcHBsaWNhdGlvbi92bmQucHZpLnB0aWQxXCI6W1wicHRpZFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzc1wiOltcInF4ZFwiLFwicXh0XCIsXCJxd2RcIixcInF3dFwiLFwicXhsXCIsXCJxeGJcIl0sXCJhcHBsaWNhdGlvbi92bmQucmVhbHZuYy5iZWRcIjpbXCJiZWRcIl0sXCJhcHBsaWNhdGlvbi92bmQucmVjb3JkYXJlLm11c2ljeG1sXCI6W1wibXhsXCJdLFwiYXBwbGljYXRpb24vdm5kLnJlY29yZGFyZS5tdXNpY3htbCt4bWxcIjpbXCJtdXNpY3htbFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5yaWcuY3J5cHRvbm90ZVwiOltcImNyeXB0b25vdGVcIl0sXCJhcHBsaWNhdGlvbi92bmQucmltLmNvZFwiOltcImNvZFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWFcIjpbXCJybVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEtdmJyXCI6W1wicm12YlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5yb3V0ZTY2Lmxpbms2Nit4bWxcIjpbXCJsaW5rNjZcIl0sXCJhcHBsaWNhdGlvbi92bmQuc2FpbGluZ3RyYWNrZXIudHJhY2tcIjpbXCJzdFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zZWVtYWlsXCI6W1wic2VlXCJdLFwiYXBwbGljYXRpb24vdm5kLnNlbWFcIjpbXCJzZW1hXCJdLFwiYXBwbGljYXRpb24vdm5kLnNlbWRcIjpbXCJzZW1kXCJdLFwiYXBwbGljYXRpb24vdm5kLnNlbWZcIjpbXCJzZW1mXCJdLFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm1kYXRhXCI6W1wiaWZtXCJdLFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm10ZW1wbGF0ZVwiOltcIml0cFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5pbnRlcmNoYW5nZVwiOltcImlpZlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5wYWNrYWdlXCI6W1wiaXBrXCJdLFwiYXBwbGljYXRpb24vdm5kLnNpbXRlY2gtbWluZG1hcHBlclwiOltcInR3ZFwiLFwidHdkc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5zbWFmXCI6W1wibW1mXCJdLFwiYXBwbGljYXRpb24vdm5kLnNtYXJ0LnRlYWNoZXJcIjpbXCJ0ZWFjaGVyXCJdLFwiYXBwbGljYXRpb24vdm5kLnNvbGVudC5zZGttK3htbFwiOltcInNka21cIixcInNka2RcIl0sXCJhcHBsaWNhdGlvbi92bmQuc3BvdGZpcmUuZHhwXCI6W1wiZHhwXCJdLFwiYXBwbGljYXRpb24vdm5kLnNwb3RmaXJlLnNmc1wiOltcInNmc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uY2FsY1wiOltcInNkY1wiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uZHJhd1wiOltcInNkYVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uaW1wcmVzc1wiOltcInNkZFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ubWF0aFwiOltcInNtZlwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyXCI6W1wic2R3XCIsXCJ2b3JcIl0sXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLndyaXRlci1nbG9iYWxcIjpbXCJzZ2xcIl0sXCJhcHBsaWNhdGlvbi92bmQuc3RlcG1hbmlhLnBhY2thZ2VcIjpbXCJzbXppcFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEuc3RlcGNoYXJ0XCI6W1wic21cIl0sXCJhcHBsaWNhdGlvbi92bmQuc3VuLndhZGwreG1sXCI6W1wid2FkbFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmNhbGNcIjpbXCJzeGNcIl0sXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjLnRlbXBsYXRlXCI6W1wic3RjXCJdLFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuZHJhd1wiOltcInN4ZFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmRyYXcudGVtcGxhdGVcIjpbXCJzdGRcIl0sXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzXCI6W1wic3hpXCJdLFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuaW1wcmVzcy50ZW1wbGF0ZVwiOltcInN0aVwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLm1hdGhcIjpbXCJzeG1cIl0sXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXJcIjpbXCJzeHdcIl0sXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXIuZ2xvYmFsXCI6W1wic3hnXCJdLFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwud3JpdGVyLnRlbXBsYXRlXCI6W1wic3R3XCJdLFwiYXBwbGljYXRpb24vdm5kLnN1cy1jYWxlbmRhclwiOltcInN1c1wiLFwic3VzcFwiXSxcImFwcGxpY2F0aW9uL3ZuZC5zdmRcIjpbXCJzdmRcIl0sXCJhcHBsaWNhdGlvbi92bmQuc3ltYmlhbi5pbnN0YWxsXCI6W1wic2lzXCIsXCJzaXN4XCJdLFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbCt4bWxcIjpbXCJ4c21cIl0sXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtK3dieG1sXCI6W1wiYmRtXCJdLFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbSt4bWxcIjpbXCJ4ZG1cIl0sXCJhcHBsaWNhdGlvbi92bmQudGFvLmludGVudC1tb2R1bGUtYXJjaGl2ZVwiOltcInRhb1wiXSxcImFwcGxpY2F0aW9uL3ZuZC50Y3BkdW1wLnBjYXBcIjpbXCJwY2FwXCIsXCJjYXBcIixcImRtcFwiXSxcImFwcGxpY2F0aW9uL3ZuZC50bW9iaWxlLWxpdmV0dlwiOltcInRtb1wiXSxcImFwcGxpY2F0aW9uL3ZuZC50cmlkLnRwdFwiOltcInRwdFwiXSxcImFwcGxpY2F0aW9uL3ZuZC50cmlzY2FwZS5teHNcIjpbXCJteHNcIl0sXCJhcHBsaWNhdGlvbi92bmQudHJ1ZWFwcFwiOltcInRyYVwiXSxcImFwcGxpY2F0aW9uL3ZuZC51ZmRsXCI6W1widWZkXCIsXCJ1ZmRsXCJdLFwiYXBwbGljYXRpb24vdm5kLnVpcS50aGVtZVwiOltcInV0elwiXSxcImFwcGxpY2F0aW9uL3ZuZC51bWFqaW5cIjpbXCJ1bWpcIl0sXCJhcHBsaWNhdGlvbi92bmQudW5pdHlcIjpbXCJ1bml0eXdlYlwiXSxcImFwcGxpY2F0aW9uL3ZuZC51b21sK3htbFwiOltcInVvbWxcIl0sXCJhcHBsaWNhdGlvbi92bmQudmN4XCI6W1widmN4XCJdLFwiYXBwbGljYXRpb24vdm5kLnZpc2lvXCI6W1widnNkXCIsXCJ2c3RcIixcInZzc1wiLFwidnN3XCJdLFwiYXBwbGljYXRpb24vdm5kLnZpc2lvbmFyeVwiOltcInZpc1wiXSxcImFwcGxpY2F0aW9uL3ZuZC52c2ZcIjpbXCJ2c2ZcIl0sXCJhcHBsaWNhdGlvbi92bmQud2FwLndieG1sXCI6W1wid2J4bWxcIl0sXCJhcHBsaWNhdGlvbi92bmQud2FwLndtbGNcIjpbXCJ3bWxjXCJdLFwiYXBwbGljYXRpb24vdm5kLndhcC53bWxzY3JpcHRjXCI6W1wid21sc2NcIl0sXCJhcHBsaWNhdGlvbi92bmQud2VidHVyYm9cIjpbXCJ3dGJcIl0sXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5wbGF5ZXJcIjpbXCJuYnBcIl0sXCJhcHBsaWNhdGlvbi92bmQud29yZHBlcmZlY3RcIjpbXCJ3cGRcIl0sXCJhcHBsaWNhdGlvbi92bmQud3FkXCI6W1wid3FkXCJdLFwiYXBwbGljYXRpb24vdm5kLnd0LnN0ZlwiOltcInN0ZlwiXSxcImFwcGxpY2F0aW9uL3ZuZC54YXJhXCI6W1wieGFyXCJdLFwiYXBwbGljYXRpb24vdm5kLnhmZGxcIjpbXCJ4ZmRsXCJdLFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi1kaWNcIjpbXCJodmRcIl0sXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LXNjcmlwdFwiOltcImh2c1wiXSxcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuaHYtdm9pY2VcIjpbXCJodnBcIl0sXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLm9wZW5zY29yZWZvcm1hdFwiOltcIm9zZlwiXSxcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0Lm9zZnB2Zyt4bWxcIjpbXCJvc2ZwdmdcIl0sXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLnNtYWYtYXVkaW9cIjpbXCJzYWZcIl0sXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLnNtYWYtcGhyYXNlXCI6W1wic3BmXCJdLFwiYXBwbGljYXRpb24vdm5kLnllbGxvd3JpdmVyLWN1c3RvbS1tZW51XCI6W1wiY21wXCJdLFwiYXBwbGljYXRpb24vdm5kLnp1bFwiOltcInppclwiLFwiemlyelwiXSxcImFwcGxpY2F0aW9uL3ZuZC56emF6ei5kZWNrK3htbFwiOltcInphelwiXSxcImFwcGxpY2F0aW9uL3ZvaWNleG1sK3htbFwiOltcInZ4bWxcIl0sXCJhcHBsaWNhdGlvbi93aWRnZXRcIjpbXCJ3Z3RcIl0sXCJhcHBsaWNhdGlvbi93aW5obHBcIjpbXCJobHBcIl0sXCJhcHBsaWNhdGlvbi93c2RsK3htbFwiOltcIndzZGxcIl0sXCJhcHBsaWNhdGlvbi93c3BvbGljeSt4bWxcIjpbXCJ3c3BvbGljeVwiXSxcImFwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZFwiOltcIjd6XCJdLFwiYXBwbGljYXRpb24veC1hYml3b3JkXCI6W1wiYWJ3XCJdLFwiYXBwbGljYXRpb24veC1hY2UtY29tcHJlc3NlZFwiOltcImFjZVwiXSxcImFwcGxpY2F0aW9uL3gtYXBwbGUtZGlza2ltYWdlXCI6W1wiZG1nXCJdLFwiYXBwbGljYXRpb24veC1hcmpcIjpbXCJhcmpcIl0sXCJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluXCI6W1wiYWFiXCIsXCJ4MzJcIixcInUzMlwiLFwidm94XCJdLFwiYXBwbGljYXRpb24veC1hdXRob3J3YXJlLW1hcFwiOltcImFhbVwiXSxcImFwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1zZWdcIjpbXCJhYXNcIl0sXCJhcHBsaWNhdGlvbi94LWJjcGlvXCI6W1wiYmNwaW9cIl0sXCJhcHBsaWNhdGlvbi94LWJkb2NcIjpbXCJiZG9jXCJdLFwiYXBwbGljYXRpb24veC1iaXR0b3JyZW50XCI6W1widG9ycmVudFwiXSxcImFwcGxpY2F0aW9uL3gtYmxvcmJcIjpbXCJibGJcIixcImJsb3JiXCJdLFwiYXBwbGljYXRpb24veC1iemlwXCI6W1wiYnpcIl0sXCJhcHBsaWNhdGlvbi94LWJ6aXAyXCI6W1wiYnoyXCIsXCJib3pcIl0sXCJhcHBsaWNhdGlvbi94LWNiclwiOltcImNiclwiLFwiY2JhXCIsXCJjYnRcIixcImNielwiLFwiY2I3XCJdLFwiYXBwbGljYXRpb24veC1jZGxpbmtcIjpbXCJ2Y2RcIl0sXCJhcHBsaWNhdGlvbi94LWNmcy1jb21wcmVzc2VkXCI6W1wiY2ZzXCJdLFwiYXBwbGljYXRpb24veC1jaGF0XCI6W1wiY2hhdFwiXSxcImFwcGxpY2F0aW9uL3gtY2hlc3MtcGduXCI6W1wicGduXCJdLFwiYXBwbGljYXRpb24veC1jaHJvbWUtZXh0ZW5zaW9uXCI6W1wiY3J4XCJdLFwiYXBwbGljYXRpb24veC1jb2NvYVwiOltcImNjb1wiXSxcImFwcGxpY2F0aW9uL3gtY29uZmVyZW5jZVwiOltcIm5zY1wiXSxcImFwcGxpY2F0aW9uL3gtY3Bpb1wiOltcImNwaW9cIl0sXCJhcHBsaWNhdGlvbi94LWNzaFwiOltcImNzaFwiXSxcImFwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2VcIjpbXCJkZWJcIixcInVkZWJcIl0sXCJhcHBsaWNhdGlvbi94LWRnYy1jb21wcmVzc2VkXCI6W1wiZGdjXCJdLFwiYXBwbGljYXRpb24veC1kaXJlY3RvclwiOltcImRpclwiLFwiZGNyXCIsXCJkeHJcIixcImNzdFwiLFwiY2N0XCIsXCJjeHRcIixcInczZFwiLFwiZmdkXCIsXCJzd2FcIl0sXCJhcHBsaWNhdGlvbi94LWRvb21cIjpbXCJ3YWRcIl0sXCJhcHBsaWNhdGlvbi94LWR0Ym5jeCt4bWxcIjpbXCJuY3hcIl0sXCJhcHBsaWNhdGlvbi94LWR0Ym9vayt4bWxcIjpbXCJkdGJcIl0sXCJhcHBsaWNhdGlvbi94LWR0YnJlc291cmNlK3htbFwiOltcInJlc1wiXSxcImFwcGxpY2F0aW9uL3gtZHZpXCI6W1wiZHZpXCJdLFwiYXBwbGljYXRpb24veC1lbnZveVwiOltcImV2eVwiXSxcImFwcGxpY2F0aW9uL3gtZXZhXCI6W1wiZXZhXCJdLFwiYXBwbGljYXRpb24veC1mb250LWJkZlwiOltcImJkZlwiXSxcImFwcGxpY2F0aW9uL3gtZm9udC1naG9zdHNjcmlwdFwiOltcImdzZlwiXSxcImFwcGxpY2F0aW9uL3gtZm9udC1saW51eC1wc2ZcIjpbXCJwc2ZcIl0sXCJhcHBsaWNhdGlvbi94LWZvbnQtb3RmXCI6W1wib3RmXCJdLFwiYXBwbGljYXRpb24veC1mb250LXBjZlwiOltcInBjZlwiXSxcImFwcGxpY2F0aW9uL3gtZm9udC1zbmZcIjpbXCJzbmZcIl0sXCJhcHBsaWNhdGlvbi94LWZvbnQtdHRmXCI6W1widHRmXCIsXCJ0dGNcIl0sXCJhcHBsaWNhdGlvbi94LWZvbnQtdHlwZTFcIjpbXCJwZmFcIixcInBmYlwiLFwicGZtXCIsXCJhZm1cIl0sXCJhcHBsaWNhdGlvbi94LWZyZWVhcmNcIjpbXCJhcmNcIl0sXCJhcHBsaWNhdGlvbi94LWZ1dHVyZXNwbGFzaFwiOltcInNwbFwiXSxcImFwcGxpY2F0aW9uL3gtZ2NhLWNvbXByZXNzZWRcIjpbXCJnY2FcIl0sXCJhcHBsaWNhdGlvbi94LWdsdWx4XCI6W1widWx4XCJdLFwiYXBwbGljYXRpb24veC1nbnVtZXJpY1wiOltcImdudW1lcmljXCJdLFwiYXBwbGljYXRpb24veC1ncmFtcHMteG1sXCI6W1wiZ3JhbXBzXCJdLFwiYXBwbGljYXRpb24veC1ndGFyXCI6W1wiZ3RhclwiXSxcImFwcGxpY2F0aW9uL3gtaGRmXCI6W1wiaGRmXCJdLFwiYXBwbGljYXRpb24veC1odHRwZC1waHBcIjpbXCJwaHBcIl0sXCJhcHBsaWNhdGlvbi94LWluc3RhbGwtaW5zdHJ1Y3Rpb25zXCI6W1wiaW5zdGFsbFwiXSxcImFwcGxpY2F0aW9uL3gtaXNvOTY2MC1pbWFnZVwiOltcImlzb1wiXSxcImFwcGxpY2F0aW9uL3gtamF2YS1hcmNoaXZlLWRpZmZcIjpbXCJqYXJkaWZmXCJdLFwiYXBwbGljYXRpb24veC1qYXZhLWpubHAtZmlsZVwiOltcImpubHBcIl0sXCJhcHBsaWNhdGlvbi94LWxhdGV4XCI6W1wibGF0ZXhcIl0sXCJhcHBsaWNhdGlvbi94LWx1YS1ieXRlY29kZVwiOltcImx1YWNcIl0sXCJhcHBsaWNhdGlvbi94LWx6aC1jb21wcmVzc2VkXCI6W1wibHpoXCIsXCJsaGFcIl0sXCJhcHBsaWNhdGlvbi94LW1ha2VzZWxmXCI6W1wicnVuXCJdLFwiYXBwbGljYXRpb24veC1taWVcIjpbXCJtaWVcIl0sXCJhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2tcIjpbXCJwcmNcIixcIm1vYmlcIl0sXCJhcHBsaWNhdGlvbi94LW1zLWFwcGxpY2F0aW9uXCI6W1wiYXBwbGljYXRpb25cIl0sXCJhcHBsaWNhdGlvbi94LW1zLXNob3J0Y3V0XCI6W1wibG5rXCJdLFwiYXBwbGljYXRpb24veC1tcy13bWRcIjpbXCJ3bWRcIl0sXCJhcHBsaWNhdGlvbi94LW1zLXdtelwiOltcIndtelwiXSxcImFwcGxpY2F0aW9uL3gtbXMteGJhcFwiOltcInhiYXBcIl0sXCJhcHBsaWNhdGlvbi94LW1zYWNjZXNzXCI6W1wibWRiXCJdLFwiYXBwbGljYXRpb24veC1tc2JpbmRlclwiOltcIm9iZFwiXSxcImFwcGxpY2F0aW9uL3gtbXNjYXJkZmlsZVwiOltcImNyZFwiXSxcImFwcGxpY2F0aW9uL3gtbXNjbGlwXCI6W1wiY2xwXCJdLFwiYXBwbGljYXRpb24veC1tc2Rvcy1wcm9ncmFtXCI6W1wiZXhlXCJdLFwiYXBwbGljYXRpb24veC1tc2Rvd25sb2FkXCI6W1wiZXhlXCIsXCJkbGxcIixcImNvbVwiLFwiYmF0XCIsXCJtc2lcIl0sXCJhcHBsaWNhdGlvbi94LW1zbWVkaWF2aWV3XCI6W1wibXZiXCIsXCJtMTNcIixcIm0xNFwiXSxcImFwcGxpY2F0aW9uL3gtbXNtZXRhZmlsZVwiOltcIndtZlwiLFwid216XCIsXCJlbWZcIixcImVtelwiXSxcImFwcGxpY2F0aW9uL3gtbXNtb25leVwiOltcIm1ueVwiXSxcImFwcGxpY2F0aW9uL3gtbXNwdWJsaXNoZXJcIjpbXCJwdWJcIl0sXCJhcHBsaWNhdGlvbi94LW1zc2NoZWR1bGVcIjpbXCJzY2RcIl0sXCJhcHBsaWNhdGlvbi94LW1zdGVybWluYWxcIjpbXCJ0cm1cIl0sXCJhcHBsaWNhdGlvbi94LW1zd3JpdGVcIjpbXCJ3cmlcIl0sXCJhcHBsaWNhdGlvbi94LW5ldGNkZlwiOltcIm5jXCIsXCJjZGZcIl0sXCJhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWdcIjpbXCJwYWNcIl0sXCJhcHBsaWNhdGlvbi94LW56YlwiOltcIm56YlwiXSxcImFwcGxpY2F0aW9uL3gtcGVybFwiOltcInBsXCIsXCJwbVwiXSxcImFwcGxpY2F0aW9uL3gtcGlsb3RcIjpbXCJwcmNcIixcInBkYlwiXSxcImFwcGxpY2F0aW9uL3gtcGtjczEyXCI6W1wicDEyXCIsXCJwZnhcIl0sXCJhcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRpZmljYXRlc1wiOltcInA3YlwiLFwic3BjXCJdLFwiYXBwbGljYXRpb24veC1wa2NzNy1jZXJ0cmVxcmVzcFwiOltcInA3clwiXSxcImFwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWRcIjpbXCJyYXJcIl0sXCJhcHBsaWNhdGlvbi94LXJlZGhhdC1wYWNrYWdlLW1hbmFnZXJcIjpbXCJycG1cIl0sXCJhcHBsaWNhdGlvbi94LXJlc2VhcmNoLWluZm8tc3lzdGVtc1wiOltcInJpc1wiXSxcImFwcGxpY2F0aW9uL3gtc2VhXCI6W1wic2VhXCJdLFwiYXBwbGljYXRpb24veC1zaFwiOltcInNoXCJdLFwiYXBwbGljYXRpb24veC1zaGFyXCI6W1wic2hhclwiXSxcImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCI6W1wic3dmXCJdLFwiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodC1hcHBcIjpbXCJ4YXBcIl0sXCJhcHBsaWNhdGlvbi94LXNxbFwiOltcInNxbFwiXSxcImFwcGxpY2F0aW9uL3gtc3R1ZmZpdFwiOltcInNpdFwiXSxcImFwcGxpY2F0aW9uL3gtc3R1ZmZpdHhcIjpbXCJzaXR4XCJdLFwiYXBwbGljYXRpb24veC1zdWJyaXBcIjpbXCJzcnRcIl0sXCJhcHBsaWNhdGlvbi94LXN2NGNwaW9cIjpbXCJzdjRjcGlvXCJdLFwiYXBwbGljYXRpb24veC1zdjRjcmNcIjpbXCJzdjRjcmNcIl0sXCJhcHBsaWNhdGlvbi94LXQzdm0taW1hZ2VcIjpbXCJ0M1wiXSxcImFwcGxpY2F0aW9uL3gtdGFkc1wiOltcImdhbVwiXSxcImFwcGxpY2F0aW9uL3gtdGFyXCI6W1widGFyXCJdLFwiYXBwbGljYXRpb24veC10Y2xcIjpbXCJ0Y2xcIixcInRrXCJdLFwiYXBwbGljYXRpb24veC10ZXhcIjpbXCJ0ZXhcIl0sXCJhcHBsaWNhdGlvbi94LXRleC10Zm1cIjpbXCJ0Zm1cIl0sXCJhcHBsaWNhdGlvbi94LXRleGluZm9cIjpbXCJ0ZXhpbmZvXCIsXCJ0ZXhpXCJdLFwiYXBwbGljYXRpb24veC10Z2lmXCI6W1wib2JqXCJdLFwiYXBwbGljYXRpb24veC11c3RhclwiOltcInVzdGFyXCJdLFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LWhkZFwiOltcImhkZFwiXSxcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1vdmFcIjpbXCJvdmFcIl0sXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtb3ZmXCI6W1wib3ZmXCJdLFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LXZib3hcIjpbXCJ2Ym94XCJdLFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LXZib3gtZXh0cGFja1wiOltcInZib3gtZXh0cGFja1wiXSxcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12ZGlcIjpbXCJ2ZGlcIl0sXCJhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdmhkXCI6W1widmhkXCJdLFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LXZtZGtcIjpbXCJ2bWRrXCJdLFwiYXBwbGljYXRpb24veC13YWlzLXNvdXJjZVwiOltcInNyY1wiXSxcImFwcGxpY2F0aW9uL3gtd2ViLWFwcC1tYW5pZmVzdCtqc29uXCI6W1wid2ViYXBwXCJdLFwiYXBwbGljYXRpb24veC14NTA5LWNhLWNlcnRcIjpbXCJkZXJcIixcImNydFwiLFwicGVtXCJdLFwiYXBwbGljYXRpb24veC14ZmlnXCI6W1wiZmlnXCJdLFwiYXBwbGljYXRpb24veC14bGlmZit4bWxcIjpbXCJ4bGZcIl0sXCJhcHBsaWNhdGlvbi94LXhwaW5zdGFsbFwiOltcInhwaVwiXSxcImFwcGxpY2F0aW9uL3gteHpcIjpbXCJ4elwiXSxcImFwcGxpY2F0aW9uL3gtem1hY2hpbmVcIjpbXCJ6MVwiLFwiejJcIixcInozXCIsXCJ6NFwiLFwiejVcIixcIno2XCIsXCJ6N1wiLFwiejhcIl0sXCJhcHBsaWNhdGlvbi94YW1sK3htbFwiOltcInhhbWxcIl0sXCJhcHBsaWNhdGlvbi94Y2FwLWRpZmYreG1sXCI6W1wieGRmXCJdLFwiYXBwbGljYXRpb24veGVuYyt4bWxcIjpbXCJ4ZW5jXCJdLFwiYXBwbGljYXRpb24veGh0bWwreG1sXCI6W1wieGh0bWxcIixcInhodFwiXSxcImFwcGxpY2F0aW9uL3htbFwiOltcInhtbFwiLFwieHNsXCIsXCJ4c2RcIixcInJuZ1wiXSxcImFwcGxpY2F0aW9uL3htbC1kdGRcIjpbXCJkdGRcIl0sXCJhcHBsaWNhdGlvbi94b3AreG1sXCI6W1wieG9wXCJdLFwiYXBwbGljYXRpb24veHByb2MreG1sXCI6W1wieHBsXCJdLFwiYXBwbGljYXRpb24veHNsdCt4bWxcIjpbXCJ4c2x0XCJdLFwiYXBwbGljYXRpb24veHNwZit4bWxcIjpbXCJ4c3BmXCJdLFwiYXBwbGljYXRpb24veHYreG1sXCI6W1wibXhtbFwiLFwieGh2bWxcIixcInh2bWxcIixcInh2bVwiXSxcImFwcGxpY2F0aW9uL3lhbmdcIjpbXCJ5YW5nXCJdLFwiYXBwbGljYXRpb24veWluK3htbFwiOltcInlpblwiXSxcImFwcGxpY2F0aW9uL3ppcFwiOltcInppcFwiXSxcImF1ZGlvLzNncHBcIjpbXCIzZ3BwXCJdLFwiYXVkaW8vYWRwY21cIjpbXCJhZHBcIl0sXCJhdWRpby9iYXNpY1wiOltcImF1XCIsXCJzbmRcIl0sXCJhdWRpby9taWRpXCI6W1wibWlkXCIsXCJtaWRpXCIsXCJrYXJcIixcInJtaVwiXSxcImF1ZGlvL21wM1wiOltcIm1wM1wiXSxcImF1ZGlvL21wNFwiOltcIm00YVwiLFwibXA0YVwiXSxcImF1ZGlvL21wZWdcIjpbXCJtcGdhXCIsXCJtcDJcIixcIm1wMmFcIixcIm1wM1wiLFwibTJhXCIsXCJtM2FcIl0sXCJhdWRpby9vZ2dcIjpbXCJvZ2FcIixcIm9nZ1wiLFwic3B4XCJdLFwiYXVkaW8vczNtXCI6W1wiczNtXCJdLFwiYXVkaW8vc2lsa1wiOltcInNpbFwiXSxcImF1ZGlvL3ZuZC5kZWNlLmF1ZGlvXCI6W1widXZhXCIsXCJ1dnZhXCJdLFwiYXVkaW8vdm5kLmRpZ2l0YWwtd2luZHNcIjpbXCJlb2xcIl0sXCJhdWRpby92bmQuZHJhXCI6W1wiZHJhXCJdLFwiYXVkaW8vdm5kLmR0c1wiOltcImR0c1wiXSxcImF1ZGlvL3ZuZC5kdHMuaGRcIjpbXCJkdHNoZFwiXSxcImF1ZGlvL3ZuZC5sdWNlbnQudm9pY2VcIjpbXCJsdnBcIl0sXCJhdWRpby92bmQubXMtcGxheXJlYWR5Lm1lZGlhLnB5YVwiOltcInB5YVwiXSxcImF1ZGlvL3ZuZC5udWVyYS5lY2VscDQ4MDBcIjpbXCJlY2VscDQ4MDBcIl0sXCJhdWRpby92bmQubnVlcmEuZWNlbHA3NDcwXCI6W1wiZWNlbHA3NDcwXCJdLFwiYXVkaW8vdm5kLm51ZXJhLmVjZWxwOTYwMFwiOltcImVjZWxwOTYwMFwiXSxcImF1ZGlvL3ZuZC5yaXBcIjpbXCJyaXBcIl0sXCJhdWRpby93YXZcIjpbXCJ3YXZcIl0sXCJhdWRpby93YXZlXCI6W1wid2F2XCJdLFwiYXVkaW8vd2VibVwiOltcIndlYmFcIl0sXCJhdWRpby94LWFhY1wiOltcImFhY1wiXSxcImF1ZGlvL3gtYWlmZlwiOltcImFpZlwiLFwiYWlmZlwiLFwiYWlmY1wiXSxcImF1ZGlvL3gtY2FmXCI6W1wiY2FmXCJdLFwiYXVkaW8veC1mbGFjXCI6W1wiZmxhY1wiXSxcImF1ZGlvL3gtbTRhXCI6W1wibTRhXCJdLFwiYXVkaW8veC1tYXRyb3NrYVwiOltcIm1rYVwiXSxcImF1ZGlvL3gtbXBlZ3VybFwiOltcIm0zdVwiXSxcImF1ZGlvL3gtbXMtd2F4XCI6W1wid2F4XCJdLFwiYXVkaW8veC1tcy13bWFcIjpbXCJ3bWFcIl0sXCJhdWRpby94LXBuLXJlYWxhdWRpb1wiOltcInJhbVwiLFwicmFcIl0sXCJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW5cIjpbXCJybXBcIl0sXCJhdWRpby94LXJlYWxhdWRpb1wiOltcInJhXCJdLFwiYXVkaW8veC13YXZcIjpbXCJ3YXZcIl0sXCJhdWRpby94bVwiOltcInhtXCJdLFwiY2hlbWljYWwveC1jZHhcIjpbXCJjZHhcIl0sXCJjaGVtaWNhbC94LWNpZlwiOltcImNpZlwiXSxcImNoZW1pY2FsL3gtY21kZlwiOltcImNtZGZcIl0sXCJjaGVtaWNhbC94LWNtbFwiOltcImNtbFwiXSxcImNoZW1pY2FsL3gtY3NtbFwiOltcImNzbWxcIl0sXCJjaGVtaWNhbC94LXh5elwiOltcInh5elwiXSxcImZvbnQvb3RmXCI6W1wib3RmXCJdLFwiaW1hZ2UvYXBuZ1wiOltcImFwbmdcIl0sXCJpbWFnZS9ibXBcIjpbXCJibXBcIl0sXCJpbWFnZS9jZ21cIjpbXCJjZ21cIl0sXCJpbWFnZS9nM2ZheFwiOltcImczXCJdLFwiaW1hZ2UvZ2lmXCI6W1wiZ2lmXCJdLFwiaW1hZ2UvaWVmXCI6W1wiaWVmXCJdLFwiaW1hZ2UvanBlZ1wiOltcImpwZWdcIixcImpwZ1wiLFwianBlXCJdLFwiaW1hZ2Uva3R4XCI6W1wia3R4XCJdLFwiaW1hZ2UvcG5nXCI6W1wicG5nXCJdLFwiaW1hZ2UvcHJzLmJ0aWZcIjpbXCJidGlmXCJdLFwiaW1hZ2Uvc2dpXCI6W1wic2dpXCJdLFwiaW1hZ2Uvc3ZnK3htbFwiOltcInN2Z1wiLFwic3ZnelwiXSxcImltYWdlL3RpZmZcIjpbXCJ0aWZmXCIsXCJ0aWZcIl0sXCJpbWFnZS92bmQuYWRvYmUucGhvdG9zaG9wXCI6W1wicHNkXCJdLFwiaW1hZ2Uvdm5kLmRlY2UuZ3JhcGhpY1wiOltcInV2aVwiLFwidXZ2aVwiLFwidXZnXCIsXCJ1dnZnXCJdLFwiaW1hZ2Uvdm5kLmRqdnVcIjpbXCJkanZ1XCIsXCJkanZcIl0sXCJpbWFnZS92bmQuZHZiLnN1YnRpdGxlXCI6W1wic3ViXCJdLFwiaW1hZ2Uvdm5kLmR3Z1wiOltcImR3Z1wiXSxcImltYWdlL3ZuZC5keGZcIjpbXCJkeGZcIl0sXCJpbWFnZS92bmQuZmFzdGJpZHNoZWV0XCI6W1wiZmJzXCJdLFwiaW1hZ2Uvdm5kLmZweFwiOltcImZweFwiXSxcImltYWdlL3ZuZC5mc3RcIjpbXCJmc3RcIl0sXCJpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1tbXJcIjpbXCJtbXJcIl0sXCJpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1ybGNcIjpbXCJybGNcIl0sXCJpbWFnZS92bmQubXMtbW9kaVwiOltcIm1kaVwiXSxcImltYWdlL3ZuZC5tcy1waG90b1wiOltcIndkcFwiXSxcImltYWdlL3ZuZC5uZXQtZnB4XCI6W1wibnB4XCJdLFwiaW1hZ2Uvdm5kLndhcC53Ym1wXCI6W1wid2JtcFwiXSxcImltYWdlL3ZuZC54aWZmXCI6W1wieGlmXCJdLFwiaW1hZ2Uvd2VicFwiOltcIndlYnBcIl0sXCJpbWFnZS94LTNkc1wiOltcIjNkc1wiXSxcImltYWdlL3gtY211LXJhc3RlclwiOltcInJhc1wiXSxcImltYWdlL3gtY214XCI6W1wiY214XCJdLFwiaW1hZ2UveC1mcmVlaGFuZFwiOltcImZoXCIsXCJmaGNcIixcImZoNFwiLFwiZmg1XCIsXCJmaDdcIl0sXCJpbWFnZS94LWljb25cIjpbXCJpY29cIl0sXCJpbWFnZS94LWpuZ1wiOltcImpuZ1wiXSxcImltYWdlL3gtbXJzaWQtaW1hZ2VcIjpbXCJzaWRcIl0sXCJpbWFnZS94LW1zLWJtcFwiOltcImJtcFwiXSxcImltYWdlL3gtcGN4XCI6W1wicGN4XCJdLFwiaW1hZ2UveC1waWN0XCI6W1wicGljXCIsXCJwY3RcIl0sXCJpbWFnZS94LXBvcnRhYmxlLWFueW1hcFwiOltcInBubVwiXSxcImltYWdlL3gtcG9ydGFibGUtYml0bWFwXCI6W1wicGJtXCJdLFwiaW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwXCI6W1wicGdtXCJdLFwiaW1hZ2UveC1wb3J0YWJsZS1waXhtYXBcIjpbXCJwcG1cIl0sXCJpbWFnZS94LXJnYlwiOltcInJnYlwiXSxcImltYWdlL3gtdGdhXCI6W1widGdhXCJdLFwiaW1hZ2UveC14Yml0bWFwXCI6W1wieGJtXCJdLFwiaW1hZ2UveC14cGl4bWFwXCI6W1wieHBtXCJdLFwiaW1hZ2UveC14d2luZG93ZHVtcFwiOltcInh3ZFwiXSxcIm1lc3NhZ2UvcmZjODIyXCI6W1wiZW1sXCIsXCJtaW1lXCJdLFwibW9kZWwvZ2x0Zitqc29uXCI6W1wiZ2x0ZlwiXSxcIm1vZGVsL2dsdGYtYmluYXJ5XCI6W1wiZ2xiXCJdLFwibW9kZWwvaWdlc1wiOltcImlnc1wiLFwiaWdlc1wiXSxcIm1vZGVsL21lc2hcIjpbXCJtc2hcIixcIm1lc2hcIixcInNpbG9cIl0sXCJtb2RlbC92bmQuY29sbGFkYSt4bWxcIjpbXCJkYWVcIl0sXCJtb2RlbC92bmQuZHdmXCI6W1wiZHdmXCJdLFwibW9kZWwvdm5kLmdkbFwiOltcImdkbFwiXSxcIm1vZGVsL3ZuZC5ndHdcIjpbXCJndHdcIl0sXCJtb2RlbC92bmQubXRzXCI6W1wibXRzXCJdLFwibW9kZWwvdm5kLnZ0dVwiOltcInZ0dVwiXSxcIm1vZGVsL3ZybWxcIjpbXCJ3cmxcIixcInZybWxcIl0sXCJtb2RlbC94M2QrYmluYXJ5XCI6W1wieDNkYlwiLFwieDNkYnpcIl0sXCJtb2RlbC94M2QrdnJtbFwiOltcIngzZHZcIixcIngzZHZ6XCJdLFwibW9kZWwveDNkK3htbFwiOltcIngzZFwiLFwieDNkelwiXSxcInRleHQvY2FjaGUtbWFuaWZlc3RcIjpbXCJhcHBjYWNoZVwiLFwibWFuaWZlc3RcIl0sXCJ0ZXh0L2NhbGVuZGFyXCI6W1wiaWNzXCIsXCJpZmJcIl0sXCJ0ZXh0L2NvZmZlZXNjcmlwdFwiOltcImNvZmZlZVwiLFwibGl0Y29mZmVlXCJdLFwidGV4dC9jc3NcIjpbXCJjc3NcIl0sXCJ0ZXh0L2NzdlwiOltcImNzdlwiXSxcInRleHQvaGpzb25cIjpbXCJoanNvblwiXSxcInRleHQvaHRtbFwiOltcImh0bWxcIixcImh0bVwiLFwic2h0bWxcIl0sXCJ0ZXh0L2phZGVcIjpbXCJqYWRlXCJdLFwidGV4dC9qc3hcIjpbXCJqc3hcIl0sXCJ0ZXh0L2xlc3NcIjpbXCJsZXNzXCJdLFwidGV4dC9tYXJrZG93blwiOltcIm1hcmtkb3duXCIsXCJtZFwiXSxcInRleHQvbWF0aG1sXCI6W1wibW1sXCJdLFwidGV4dC9uM1wiOltcIm4zXCJdLFwidGV4dC9wbGFpblwiOltcInR4dFwiLFwidGV4dFwiLFwiY29uZlwiLFwiZGVmXCIsXCJsaXN0XCIsXCJsb2dcIixcImluXCIsXCJpbmlcIl0sXCJ0ZXh0L3Bycy5saW5lcy50YWdcIjpbXCJkc2NcIl0sXCJ0ZXh0L3JpY2h0ZXh0XCI6W1wicnR4XCJdLFwidGV4dC9ydGZcIjpbXCJydGZcIl0sXCJ0ZXh0L3NnbWxcIjpbXCJzZ21sXCIsXCJzZ21cIl0sXCJ0ZXh0L3NsaW1cIjpbXCJzbGltXCIsXCJzbG1cIl0sXCJ0ZXh0L3N0eWx1c1wiOltcInN0eWx1c1wiLFwic3R5bFwiXSxcInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXNcIjpbXCJ0c3ZcIl0sXCJ0ZXh0L3Ryb2ZmXCI6W1widFwiLFwidHJcIixcInJvZmZcIixcIm1hblwiLFwibWVcIixcIm1zXCJdLFwidGV4dC90dXJ0bGVcIjpbXCJ0dGxcIl0sXCJ0ZXh0L3VyaS1saXN0XCI6W1widXJpXCIsXCJ1cmlzXCIsXCJ1cmxzXCJdLFwidGV4dC92Y2FyZFwiOltcInZjYXJkXCJdLFwidGV4dC92bmQuY3VybFwiOltcImN1cmxcIl0sXCJ0ZXh0L3ZuZC5jdXJsLmRjdXJsXCI6W1wiZGN1cmxcIl0sXCJ0ZXh0L3ZuZC5jdXJsLm1jdXJsXCI6W1wibWN1cmxcIl0sXCJ0ZXh0L3ZuZC5jdXJsLnNjdXJsXCI6W1wic2N1cmxcIl0sXCJ0ZXh0L3ZuZC5kdmIuc3VidGl0bGVcIjpbXCJzdWJcIl0sXCJ0ZXh0L3ZuZC5mbHlcIjpbXCJmbHlcIl0sXCJ0ZXh0L3ZuZC5mbWkuZmxleHN0b3JcIjpbXCJmbHhcIl0sXCJ0ZXh0L3ZuZC5ncmFwaHZpelwiOltcImd2XCJdLFwidGV4dC92bmQuaW4zZC4zZG1sXCI6W1wiM2RtbFwiXSxcInRleHQvdm5kLmluM2Quc3BvdFwiOltcInNwb3RcIl0sXCJ0ZXh0L3ZuZC5zdW4uajJtZS5hcHAtZGVzY3JpcHRvclwiOltcImphZFwiXSxcInRleHQvdm5kLndhcC53bWxcIjpbXCJ3bWxcIl0sXCJ0ZXh0L3ZuZC53YXAud21sc2NyaXB0XCI6W1wid21sc1wiXSxcInRleHQvdnR0XCI6W1widnR0XCJdLFwidGV4dC94LWFzbVwiOltcInNcIixcImFzbVwiXSxcInRleHQveC1jXCI6W1wiY1wiLFwiY2NcIixcImN4eFwiLFwiY3BwXCIsXCJoXCIsXCJoaFwiLFwiZGljXCJdLFwidGV4dC94LWNvbXBvbmVudFwiOltcImh0Y1wiXSxcInRleHQveC1mb3J0cmFuXCI6W1wiZlwiLFwiZm9yXCIsXCJmNzdcIixcImY5MFwiXSxcInRleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlXCI6W1wiaGJzXCJdLFwidGV4dC94LWphdmEtc291cmNlXCI6W1wiamF2YVwiXSxcInRleHQveC1sdWFcIjpbXCJsdWFcIl0sXCJ0ZXh0L3gtbWFya2Rvd25cIjpbXCJta2RcIl0sXCJ0ZXh0L3gtbmZvXCI6W1wibmZvXCJdLFwidGV4dC94LW9wbWxcIjpbXCJvcG1sXCJdLFwidGV4dC94LW9yZ1wiOltcIm9yZ1wiXSxcInRleHQveC1wYXNjYWxcIjpbXCJwXCIsXCJwYXNcIl0sXCJ0ZXh0L3gtcHJvY2Vzc2luZ1wiOltcInBkZVwiXSxcInRleHQveC1zYXNzXCI6W1wic2Fzc1wiXSxcInRleHQveC1zY3NzXCI6W1wic2Nzc1wiXSxcInRleHQveC1zZXRleHRcIjpbXCJldHhcIl0sXCJ0ZXh0L3gtc2Z2XCI6W1wic2Z2XCJdLFwidGV4dC94LXN1c2UteW1wXCI6W1wieW1wXCJdLFwidGV4dC94LXV1ZW5jb2RlXCI6W1widXVcIl0sXCJ0ZXh0L3gtdmNhbGVuZGFyXCI6W1widmNzXCJdLFwidGV4dC94LXZjYXJkXCI6W1widmNmXCJdLFwidGV4dC94bWxcIjpbXCJ4bWxcIl0sXCJ0ZXh0L3lhbWxcIjpbXCJ5YW1sXCIsXCJ5bWxcIl0sXCJ2aWRlby8zZ3BwXCI6W1wiM2dwXCIsXCIzZ3BwXCJdLFwidmlkZW8vM2dwcDJcIjpbXCIzZzJcIl0sXCJ2aWRlby9oMjYxXCI6W1wiaDI2MVwiXSxcInZpZGVvL2gyNjNcIjpbXCJoMjYzXCJdLFwidmlkZW8vaDI2NFwiOltcImgyNjRcIl0sXCJ2aWRlby9qcGVnXCI6W1wianBndlwiXSxcInZpZGVvL2pwbVwiOltcImpwbVwiLFwianBnbVwiXSxcInZpZGVvL21qMlwiOltcIm1qMlwiLFwibWpwMlwiXSxcInZpZGVvL21wMnRcIjpbXCJ0c1wiXSxcInZpZGVvL21wNFwiOltcIm1wNFwiLFwibXA0dlwiLFwibXBnNFwiXSxcInZpZGVvL21wZWdcIjpbXCJtcGVnXCIsXCJtcGdcIixcIm1wZVwiLFwibTF2XCIsXCJtMnZcIl0sXCJ2aWRlby9vZ2dcIjpbXCJvZ3ZcIl0sXCJ2aWRlby9xdWlja3RpbWVcIjpbXCJxdFwiLFwibW92XCJdLFwidmlkZW8vdm5kLmRlY2UuaGRcIjpbXCJ1dmhcIixcInV2dmhcIl0sXCJ2aWRlby92bmQuZGVjZS5tb2JpbGVcIjpbXCJ1dm1cIixcInV2dm1cIl0sXCJ2aWRlby92bmQuZGVjZS5wZFwiOltcInV2cFwiLFwidXZ2cFwiXSxcInZpZGVvL3ZuZC5kZWNlLnNkXCI6W1widXZzXCIsXCJ1dnZzXCJdLFwidmlkZW8vdm5kLmRlY2UudmlkZW9cIjpbXCJ1dnZcIixcInV2dnZcIl0sXCJ2aWRlby92bmQuZHZiLmZpbGVcIjpbXCJkdmJcIl0sXCJ2aWRlby92bmQuZnZ0XCI6W1wiZnZ0XCJdLFwidmlkZW8vdm5kLm1wZWd1cmxcIjpbXCJteHVcIixcIm00dVwiXSxcInZpZGVvL3ZuZC5tcy1wbGF5cmVhZHkubWVkaWEucHl2XCI6W1wicHl2XCJdLFwidmlkZW8vdm5kLnV2dnUubXA0XCI6W1widXZ1XCIsXCJ1dnZ1XCJdLFwidmlkZW8vdm5kLnZpdm9cIjpbXCJ2aXZcIl0sXCJ2aWRlby93ZWJtXCI6W1wid2VibVwiXSxcInZpZGVvL3gtZjR2XCI6W1wiZjR2XCJdLFwidmlkZW8veC1mbGlcIjpbXCJmbGlcIl0sXCJ2aWRlby94LWZsdlwiOltcImZsdlwiXSxcInZpZGVvL3gtbTR2XCI6W1wibTR2XCJdLFwidmlkZW8veC1tYXRyb3NrYVwiOltcIm1rdlwiLFwibWszZFwiLFwibWtzXCJdLFwidmlkZW8veC1tbmdcIjpbXCJtbmdcIl0sXCJ2aWRlby94LW1zLWFzZlwiOltcImFzZlwiLFwiYXN4XCJdLFwidmlkZW8veC1tcy12b2JcIjpbXCJ2b2JcIl0sXCJ2aWRlby94LW1zLXdtXCI6W1wid21cIl0sXCJ2aWRlby94LW1zLXdtdlwiOltcIndtdlwiXSxcInZpZGVvL3gtbXMtd214XCI6W1wid214XCJdLFwidmlkZW8veC1tcy13dnhcIjpbXCJ3dnhcIl0sXCJ2aWRlby94LW1zdmlkZW9cIjpbXCJhdmlcIl0sXCJ2aWRlby94LXNnaS1tb3ZpZVwiOltcIm1vdmllXCJdLFwidmlkZW8veC1zbXZcIjpbXCJzbXZcIl0sXCJ4LWNvbmZlcmVuY2UveC1jb29sdGFsa1wiOltcImljZVwiXX1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvbWltZS90eXBlcy5qc29uXG4vLyBtb2R1bGUgaWQgPSAxNzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBmb3J3YXJkZWRcbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTcgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZm9yd2FyZGVkXG5cbi8qKlxuICogR2V0IGFsbCBhZGRyZXNzZXMgaW4gdGhlIHJlcXVlc3QsIHVzaW5nIHRoZSBgWC1Gb3J3YXJkZWQtRm9yYCBoZWFkZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHJlcVxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9yd2FyZGVkIChyZXEpIHtcbiAgaWYgKCFyZXEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCByZXEgaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gc2ltcGxlIGhlYWRlciBwYXJzaW5nXG4gIHZhciBwcm94eUFkZHJzID0gcGFyc2UocmVxLmhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddIHx8ICcnKVxuICB2YXIgc29ja2V0QWRkciA9IHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3NcbiAgdmFyIGFkZHJzID0gW3NvY2tldEFkZHJdLmNvbmNhdChwcm94eUFkZHJzKVxuXG4gIC8vIHJldHVybiBhbGwgYWRkcmVzc2VzXG4gIHJldHVybiBhZGRyc1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBYLUZvcndhcmRlZC1Gb3IgaGVhZGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2UgKGhlYWRlcikge1xuICB2YXIgZW5kID0gaGVhZGVyLmxlbmd0aFxuICB2YXIgbGlzdCA9IFtdXG4gIHZhciBzdGFydCA9IGhlYWRlci5sZW5ndGhcblxuICAvLyBnYXRoZXIgYWRkcmVzc2VzLCBiYWNrd2FyZHNcbiAgZm9yICh2YXIgaSA9IGhlYWRlci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHN3aXRjaCAoaGVhZGVyLmNoYXJDb2RlQXQoaSkpIHtcbiAgICAgIGNhc2UgMHgyMDogLyogICAqL1xuICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xuICAgICAgICAgIHN0YXJ0ID0gZW5kID0gaVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDB4MmM6IC8qICwgKi9cbiAgICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgICBsaXN0LnB1c2goaGVhZGVyLnN1YnN0cmluZyhzdGFydCwgZW5kKSlcbiAgICAgICAgfVxuICAgICAgICBzdGFydCA9IGVuZCA9IGlcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHN0YXJ0ID0gaVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmFsIGFkZHJlc3NcbiAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICBsaXN0LnB1c2goaGVhZGVyLnN1YnN0cmluZyhzdGFydCwgZW5kKSlcbiAgfVxuXG4gIHJldHVybiBsaXN0XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvZm9yd2FyZGVkL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxNzFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiKGZ1bmN0aW9uKCkge1xuICB2YXIgZXhwYW5kSVB2NiwgaXBhZGRyLCBpcHY0UGFydCwgaXB2NFJlZ2V4ZXMsIGlwdjZQYXJ0LCBpcHY2UmVnZXhlcywgbWF0Y2hDSURSLCByb290LCB6b25lSW5kZXg7XG5cbiAgaXBhZGRyID0ge307XG5cbiAgcm9vdCA9IHRoaXM7XG5cbiAgaWYgKCh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZSAhPT0gbnVsbCkgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGlwYWRkcjtcbiAgfSBlbHNlIHtcbiAgICByb290WydpcGFkZHInXSA9IGlwYWRkcjtcbiAgfVxuXG4gIG1hdGNoQ0lEUiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQsIHBhcnRTaXplLCBjaWRyQml0cykge1xuICAgIHZhciBwYXJ0LCBzaGlmdDtcbiAgICBpZiAoZmlyc3QubGVuZ3RoICE9PSBzZWNvbmQubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpcGFkZHI6IGNhbm5vdCBtYXRjaCBDSURSIGZvciBvYmplY3RzIHdpdGggZGlmZmVyZW50IGxlbmd0aHNcIik7XG4gICAgfVxuICAgIHBhcnQgPSAwO1xuICAgIHdoaWxlIChjaWRyQml0cyA+IDApIHtcbiAgICAgIHNoaWZ0ID0gcGFydFNpemUgLSBjaWRyQml0cztcbiAgICAgIGlmIChzaGlmdCA8IDApIHtcbiAgICAgICAgc2hpZnQgPSAwO1xuICAgICAgfVxuICAgICAgaWYgKGZpcnN0W3BhcnRdID4+IHNoaWZ0ICE9PSBzZWNvbmRbcGFydF0gPj4gc2hpZnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY2lkckJpdHMgLT0gcGFydFNpemU7XG4gICAgICBwYXJ0ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGlwYWRkci5zdWJuZXRNYXRjaCA9IGZ1bmN0aW9uKGFkZHJlc3MsIHJhbmdlTGlzdCwgZGVmYXVsdE5hbWUpIHtcbiAgICB2YXIgaywgbGVuLCByYW5nZU5hbWUsIHJhbmdlU3VibmV0cywgc3VibmV0O1xuICAgIGlmIChkZWZhdWx0TmFtZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0TmFtZSA9ICd1bmljYXN0JztcbiAgICB9XG4gICAgZm9yIChyYW5nZU5hbWUgaW4gcmFuZ2VMaXN0KSB7XG4gICAgICByYW5nZVN1Ym5ldHMgPSByYW5nZUxpc3RbcmFuZ2VOYW1lXTtcbiAgICAgIGlmIChyYW5nZVN1Ym5ldHNbMF0gJiYgIShyYW5nZVN1Ym5ldHNbMF0gaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgcmFuZ2VTdWJuZXRzID0gW3JhbmdlU3VibmV0c107XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSAwLCBsZW4gPSByYW5nZVN1Ym5ldHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgc3VibmV0ID0gcmFuZ2VTdWJuZXRzW2tdO1xuICAgICAgICBpZiAoYWRkcmVzcy5raW5kKCkgPT09IHN1Ym5ldFswXS5raW5kKCkpIHtcbiAgICAgICAgICBpZiAoYWRkcmVzcy5tYXRjaC5hcHBseShhZGRyZXNzLCBzdWJuZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2VOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdE5hbWU7XG4gIH07XG5cbiAgaXBhZGRyLklQdjQgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gSVB2NChvY3RldHMpIHtcbiAgICAgIHZhciBrLCBsZW4sIG9jdGV0O1xuICAgICAgaWYgKG9jdGV0cy5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaXBhZGRyOiBpcHY0IG9jdGV0IGNvdW50IHNob3VsZCBiZSA0XCIpO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gMCwgbGVuID0gb2N0ZXRzLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgICAgIG9jdGV0ID0gb2N0ZXRzW2tdO1xuICAgICAgICBpZiAoISgoMCA8PSBvY3RldCAmJiBvY3RldCA8PSAyNTUpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImlwYWRkcjogaXB2NCBvY3RldCBzaG91bGQgZml0IGluIDggYml0c1wiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5vY3RldHMgPSBvY3RldHM7XG4gICAgfVxuXG4gICAgSVB2NC5wcm90b3R5cGUua2luZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICdpcHY0JztcbiAgICB9O1xuXG4gICAgSVB2NC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm9jdGV0cy5qb2luKFwiLlwiKTtcbiAgICB9O1xuXG4gICAgSVB2NC5wcm90b3R5cGUudG9Ob3JtYWxpemVkU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xuICAgIH07XG5cbiAgICBJUHY0LnByb3RvdHlwZS50b0J5dGVBcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMub2N0ZXRzLnNsaWNlKDApO1xuICAgIH07XG5cbiAgICBJUHY0LnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uKG90aGVyLCBjaWRyUmFuZ2UpIHtcbiAgICAgIHZhciByZWY7XG4gICAgICBpZiAoY2lkclJhbmdlID09PSB2b2lkIDApIHtcbiAgICAgICAgcmVmID0gb3RoZXIsIG90aGVyID0gcmVmWzBdLCBjaWRyUmFuZ2UgPSByZWZbMV07XG4gICAgICB9XG4gICAgICBpZiAob3RoZXIua2luZCgpICE9PSAnaXB2NCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaXBhZGRyOiBjYW5ub3QgbWF0Y2ggaXB2NCBhZGRyZXNzIHdpdGggbm9uLWlwdjQgb25lXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoQ0lEUih0aGlzLm9jdGV0cywgb3RoZXIub2N0ZXRzLCA4LCBjaWRyUmFuZ2UpO1xuICAgIH07XG5cbiAgICBJUHY0LnByb3RvdHlwZS5TcGVjaWFsUmFuZ2VzID0ge1xuICAgICAgdW5zcGVjaWZpZWQ6IFtbbmV3IElQdjQoWzAsIDAsIDAsIDBdKSwgOF1dLFxuICAgICAgYnJvYWRjYXN0OiBbW25ldyBJUHY0KFsyNTUsIDI1NSwgMjU1LCAyNTVdKSwgMzJdXSxcbiAgICAgIG11bHRpY2FzdDogW1tuZXcgSVB2NChbMjI0LCAwLCAwLCAwXSksIDRdXSxcbiAgICAgIGxpbmtMb2NhbDogW1tuZXcgSVB2NChbMTY5LCAyNTQsIDAsIDBdKSwgMTZdXSxcbiAgICAgIGxvb3BiYWNrOiBbW25ldyBJUHY0KFsxMjcsIDAsIDAsIDBdKSwgOF1dLFxuICAgICAgY2FycmllckdyYWRlTmF0OiBbW25ldyBJUHY0KFsxMDAsIDY0LCAwLCAwXSksIDEwXV0sXG4gICAgICBcInByaXZhdGVcIjogW1tuZXcgSVB2NChbMTAsIDAsIDAsIDBdKSwgOF0sIFtuZXcgSVB2NChbMTcyLCAxNiwgMCwgMF0pLCAxMl0sIFtuZXcgSVB2NChbMTkyLCAxNjgsIDAsIDBdKSwgMTZdXSxcbiAgICAgIHJlc2VydmVkOiBbW25ldyBJUHY0KFsxOTIsIDAsIDAsIDBdKSwgMjRdLCBbbmV3IElQdjQoWzE5MiwgMCwgMiwgMF0pLCAyNF0sIFtuZXcgSVB2NChbMTkyLCA4OCwgOTksIDBdKSwgMjRdLCBbbmV3IElQdjQoWzE5OCwgNTEsIDEwMCwgMF0pLCAyNF0sIFtuZXcgSVB2NChbMjAzLCAwLCAxMTMsIDBdKSwgMjRdLCBbbmV3IElQdjQoWzI0MCwgMCwgMCwgMF0pLCA0XV1cbiAgICB9O1xuXG4gICAgSVB2NC5wcm90b3R5cGUucmFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpcGFkZHIuc3VibmV0TWF0Y2godGhpcywgdGhpcy5TcGVjaWFsUmFuZ2VzKTtcbiAgICB9O1xuXG4gICAgSVB2NC5wcm90b3R5cGUudG9JUHY0TWFwcGVkQWRkcmVzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGlwYWRkci5JUHY2LnBhcnNlKFwiOjpmZmZmOlwiICsgKHRoaXMudG9TdHJpbmcoKSkpO1xuICAgIH07XG5cbiAgICBJUHY0LnByb3RvdHlwZS5wcmVmaXhMZW5ndGhGcm9tU3VibmV0TWFzayA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNpZHIsIGksIGssIG9jdGV0LCBzdG9wLCB6ZXJvcywgemVyb3RhYmxlO1xuICAgICAgemVyb3RhYmxlID0ge1xuICAgICAgICAwOiA4LFxuICAgICAgICAxMjg6IDcsXG4gICAgICAgIDE5MjogNixcbiAgICAgICAgMjI0OiA1LFxuICAgICAgICAyNDA6IDQsXG4gICAgICAgIDI0ODogMyxcbiAgICAgICAgMjUyOiAyLFxuICAgICAgICAyNTQ6IDEsXG4gICAgICAgIDI1NTogMFxuICAgICAgfTtcbiAgICAgIGNpZHIgPSAwO1xuICAgICAgc3RvcCA9IGZhbHNlO1xuICAgICAgZm9yIChpID0gayA9IDM7IGsgPj0gMDsgaSA9IGsgKz0gLTEpIHtcbiAgICAgICAgb2N0ZXQgPSB0aGlzLm9jdGV0c1tpXTtcbiAgICAgICAgaWYgKG9jdGV0IGluIHplcm90YWJsZSkge1xuICAgICAgICAgIHplcm9zID0gemVyb3RhYmxlW29jdGV0XTtcbiAgICAgICAgICBpZiAoc3RvcCAmJiB6ZXJvcyAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh6ZXJvcyAhPT0gOCkge1xuICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNpZHIgKz0gemVyb3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAzMiAtIGNpZHI7XG4gICAgfTtcblxuICAgIHJldHVybiBJUHY0O1xuXG4gIH0pKCk7XG5cbiAgaXB2NFBhcnQgPSBcIigwP1xcXFxkK3wweFthLWYwLTldKylcIjtcblxuICBpcHY0UmVnZXhlcyA9IHtcbiAgICBmb3VyT2N0ZXQ6IG5ldyBSZWdFeHAoXCJeXCIgKyBpcHY0UGFydCArIFwiXFxcXC5cIiArIGlwdjRQYXJ0ICsgXCJcXFxcLlwiICsgaXB2NFBhcnQgKyBcIlxcXFwuXCIgKyBpcHY0UGFydCArIFwiJFwiLCAnaScpLFxuICAgIGxvbmdWYWx1ZTogbmV3IFJlZ0V4cChcIl5cIiArIGlwdjRQYXJ0ICsgXCIkXCIsICdpJylcbiAgfTtcblxuICBpcGFkZHIuSVB2NC5wYXJzZXIgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB2YXIgbWF0Y2gsIHBhcnNlSW50QXV0bywgcGFydCwgc2hpZnQsIHZhbHVlO1xuICAgIHBhcnNlSW50QXV0byA9IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgaWYgKHN0cmluZ1swXSA9PT0gXCIwXCIgJiYgc3RyaW5nWzFdICE9PSBcInhcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLCA4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChzdHJpbmcpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKGlwdjRSZWdleGVzLmZvdXJPY3RldCkpIHtcbiAgICAgIHJldHVybiAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBrLCBsZW4sIHJlZiwgcmVzdWx0cztcbiAgICAgICAgcmVmID0gbWF0Y2guc2xpY2UoMSwgNik7XG4gICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChrID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgICAgICAgcGFydCA9IHJlZltrXTtcbiAgICAgICAgICByZXN1bHRzLnB1c2gocGFyc2VJbnRBdXRvKHBhcnQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgIH0pKCk7XG4gICAgfSBlbHNlIGlmIChtYXRjaCA9IHN0cmluZy5tYXRjaChpcHY0UmVnZXhlcy5sb25nVmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHBhcnNlSW50QXV0byhtYXRjaFsxXSk7XG4gICAgICBpZiAodmFsdWUgPiAweGZmZmZmZmZmIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpcGFkZHI6IGFkZHJlc3Mgb3V0c2lkZSBkZWZpbmVkIHJhbmdlXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBrLCByZXN1bHRzO1xuICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoc2hpZnQgPSBrID0gMDsgayA8PSAyNDsgc2hpZnQgPSBrICs9IDgpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goKHZhbHVlID4+IHNoaWZ0KSAmIDB4ZmYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgfSkoKSkucmV2ZXJzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgaXBhZGRyLklQdjYgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gSVB2NihwYXJ0cywgem9uZUlkKSB7XG4gICAgICB2YXIgaSwgaywgbCwgbGVuLCBwYXJ0LCByZWY7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAxNikge1xuICAgICAgICB0aGlzLnBhcnRzID0gW107XG4gICAgICAgIGZvciAoaSA9IGsgPSAwOyBrIDw9IDE0OyBpID0gayArPSAyKSB7XG4gICAgICAgICAgdGhpcy5wYXJ0cy5wdXNoKChwYXJ0c1tpXSA8PCA4KSB8IHBhcnRzW2kgKyAxXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFydHMubGVuZ3RoID09PSA4KSB7XG4gICAgICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImlwYWRkcjogaXB2NiBwYXJ0IGNvdW50IHNob3VsZCBiZSA4IG9yIDE2XCIpO1xuICAgICAgfVxuICAgICAgcmVmID0gdGhpcy5wYXJ0cztcbiAgICAgIGZvciAobCA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGwgPCBsZW47IGwrKykge1xuICAgICAgICBwYXJ0ID0gcmVmW2xdO1xuICAgICAgICBpZiAoISgoMCA8PSBwYXJ0ICYmIHBhcnQgPD0gMHhmZmZmKSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpcGFkZHI6IGlwdjYgcGFydCBzaG91bGQgZml0IGluIDE2IGJpdHNcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh6b25lSWQpIHtcbiAgICAgICAgdGhpcy56b25lSWQgPSB6b25lSWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgSVB2Ni5wcm90b3R5cGUua2luZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICdpcHY2JztcbiAgICB9O1xuXG4gICAgSVB2Ni5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvTm9ybWFsaXplZFN0cmluZygpLnJlcGxhY2UoLygoXnw6KSgwKDp8JCkpKykvLCAnOjonKTtcbiAgICB9O1xuXG4gICAgSVB2Ni5wcm90b3R5cGUudG9CeXRlQXJyYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBieXRlcywgaywgbGVuLCBwYXJ0LCByZWY7XG4gICAgICBieXRlcyA9IFtdO1xuICAgICAgcmVmID0gdGhpcy5wYXJ0cztcbiAgICAgIGZvciAoayA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICBwYXJ0ID0gcmVmW2tdO1xuICAgICAgICBieXRlcy5wdXNoKHBhcnQgPj4gOCk7XG4gICAgICAgIGJ5dGVzLnB1c2gocGFydCAmIDB4ZmYpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH07XG5cbiAgICBJUHY2LnByb3RvdHlwZS50b05vcm1hbGl6ZWRTdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhZGRyLCBwYXJ0LCBzdWZmaXg7XG4gICAgICBhZGRyID0gKChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGssIGxlbiwgcmVmLCByZXN1bHRzO1xuICAgICAgICByZWYgPSB0aGlzLnBhcnRzO1xuICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoayA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgIHBhcnQgPSByZWZba107XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnQudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgIH0pLmNhbGwodGhpcykpLmpvaW4oXCI6XCIpO1xuICAgICAgc3VmZml4ID0gJyc7XG4gICAgICBpZiAodGhpcy56b25lSWQpIHtcbiAgICAgICAgc3VmZml4ID0gJyUnICsgdGhpcy56b25lSWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWRkciArIHN1ZmZpeDtcbiAgICB9O1xuXG4gICAgSVB2Ni5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbihvdGhlciwgY2lkclJhbmdlKSB7XG4gICAgICB2YXIgcmVmO1xuICAgICAgaWYgKGNpZHJSYW5nZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHJlZiA9IG90aGVyLCBvdGhlciA9IHJlZlswXSwgY2lkclJhbmdlID0gcmVmWzFdO1xuICAgICAgfVxuICAgICAgaWYgKG90aGVyLmtpbmQoKSAhPT0gJ2lwdjYnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImlwYWRkcjogY2Fubm90IG1hdGNoIGlwdjYgYWRkcmVzcyB3aXRoIG5vbi1pcHY2IG9uZVwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaENJRFIodGhpcy5wYXJ0cywgb3RoZXIucGFydHMsIDE2LCBjaWRyUmFuZ2UpO1xuICAgIH07XG5cbiAgICBJUHY2LnByb3RvdHlwZS5TcGVjaWFsUmFuZ2VzID0ge1xuICAgICAgdW5zcGVjaWZpZWQ6IFtuZXcgSVB2NihbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0pLCAxMjhdLFxuICAgICAgbGlua0xvY2FsOiBbbmV3IElQdjYoWzB4ZmU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0pLCAxMF0sXG4gICAgICBtdWx0aWNhc3Q6IFtuZXcgSVB2NihbMHhmZjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSksIDhdLFxuICAgICAgbG9vcGJhY2s6IFtuZXcgSVB2NihbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMV0pLCAxMjhdLFxuICAgICAgdW5pcXVlTG9jYWw6IFtuZXcgSVB2NihbMHhmYzAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSksIDddLFxuICAgICAgaXB2NE1hcHBlZDogW25ldyBJUHY2KFswLCAwLCAwLCAwLCAwLCAweGZmZmYsIDAsIDBdKSwgOTZdLFxuICAgICAgcmZjNjE0NTogW25ldyBJUHY2KFswLCAwLCAwLCAwLCAweGZmZmYsIDAsIDAsIDBdKSwgOTZdLFxuICAgICAgcmZjNjA1MjogW25ldyBJUHY2KFsweDY0LCAweGZmOWIsIDAsIDAsIDAsIDAsIDAsIDBdKSwgOTZdLFxuICAgICAgJzZ0bzQnOiBbbmV3IElQdjYoWzB4MjAwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMF0pLCAxNl0sXG4gICAgICB0ZXJlZG86IFtuZXcgSVB2NihbMHgyMDAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSksIDMyXSxcbiAgICAgIHJlc2VydmVkOiBbW25ldyBJUHY2KFsweDIwMDEsIDB4ZGI4LCAwLCAwLCAwLCAwLCAwLCAwXSksIDMyXV1cbiAgICB9O1xuXG4gICAgSVB2Ni5wcm90b3R5cGUucmFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpcGFkZHIuc3VibmV0TWF0Y2godGhpcywgdGhpcy5TcGVjaWFsUmFuZ2VzKTtcbiAgICB9O1xuXG4gICAgSVB2Ni5wcm90b3R5cGUuaXNJUHY0TWFwcGVkQWRkcmVzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmFuZ2UoKSA9PT0gJ2lwdjRNYXBwZWQnO1xuICAgIH07XG5cbiAgICBJUHY2LnByb3RvdHlwZS50b0lQdjRBZGRyZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaGlnaCwgbG93LCByZWY7XG4gICAgICBpZiAoIXRoaXMuaXNJUHY0TWFwcGVkQWRkcmVzcygpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImlwYWRkcjogdHJ5aW5nIHRvIGNvbnZlcnQgYSBnZW5lcmljIGlwdjYgYWRkcmVzcyB0byBpcHY0XCIpO1xuICAgICAgfVxuICAgICAgcmVmID0gdGhpcy5wYXJ0cy5zbGljZSgtMiksIGhpZ2ggPSByZWZbMF0sIGxvdyA9IHJlZlsxXTtcbiAgICAgIHJldHVybiBuZXcgaXBhZGRyLklQdjQoW2hpZ2ggPj4gOCwgaGlnaCAmIDB4ZmYsIGxvdyA+PiA4LCBsb3cgJiAweGZmXSk7XG4gICAgfTtcblxuICAgIElQdjYucHJvdG90eXBlLnByZWZpeExlbmd0aEZyb21TdWJuZXRNYXNrID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY2lkciwgaSwgaywgcGFydCwgc3RvcCwgemVyb3MsIHplcm90YWJsZTtcbiAgICAgIHplcm90YWJsZSA9IHtcbiAgICAgICAgMDogMTYsXG4gICAgICAgIDMyNzY4OiAxNSxcbiAgICAgICAgNDkxNTI6IDE0LFxuICAgICAgICA1NzM0NDogMTMsXG4gICAgICAgIDYxNDQwOiAxMixcbiAgICAgICAgNjM0ODg6IDExLFxuICAgICAgICA2NDUxMjogMTAsXG4gICAgICAgIDY1MDI0OiA5LFxuICAgICAgICA2NTI4MDogOCxcbiAgICAgICAgNjU0MDg6IDcsXG4gICAgICAgIDY1NDcyOiA2LFxuICAgICAgICA2NTUwNDogNSxcbiAgICAgICAgNjU1MjA6IDQsXG4gICAgICAgIDY1NTI4OiAzLFxuICAgICAgICA2NTUzMjogMixcbiAgICAgICAgNjU1MzQ6IDEsXG4gICAgICAgIDY1NTM1OiAwXG4gICAgICB9O1xuICAgICAgY2lkciA9IDA7XG4gICAgICBzdG9wID0gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBrID0gNzsgayA+PSAwOyBpID0gayArPSAtMSkge1xuICAgICAgICBwYXJ0ID0gdGhpcy5wYXJ0c1tpXTtcbiAgICAgICAgaWYgKHBhcnQgaW4gemVyb3RhYmxlKSB7XG4gICAgICAgICAgemVyb3MgPSB6ZXJvdGFibGVbcGFydF07XG4gICAgICAgICAgaWYgKHN0b3AgJiYgemVyb3MgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoemVyb3MgIT09IDE2KSB7XG4gICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2lkciArPSB6ZXJvcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIDEyOCAtIGNpZHI7XG4gICAgfTtcblxuICAgIHJldHVybiBJUHY2O1xuXG4gIH0pKCk7XG5cbiAgaXB2NlBhcnQgPSBcIig/OlswLTlhLWZdKzo6PykrXCI7XG5cbiAgem9uZUluZGV4ID0gXCIlWzAtOWEtel17MSx9XCI7XG5cbiAgaXB2NlJlZ2V4ZXMgPSB7XG4gICAgem9uZUluZGV4OiBuZXcgUmVnRXhwKHpvbmVJbmRleCwgJ2knKSxcbiAgICBcIm5hdGl2ZVwiOiBuZXcgUmVnRXhwKFwiXig6Oik/KFwiICsgaXB2NlBhcnQgKyBcIik/KFswLTlhLWZdKyk/KDo6KT8oXCIgKyB6b25lSW5kZXggKyBcIik/JFwiLCAnaScpLFxuICAgIHRyYW5zaXRpb25hbDogbmV3IFJlZ0V4cCgoXCJeKCg/OlwiICsgaXB2NlBhcnQgKyBcIil8KD86OjopKD86XCIgKyBpcHY2UGFydCArIFwiKT8pXCIpICsgKGlwdjRQYXJ0ICsgXCJcXFxcLlwiICsgaXB2NFBhcnQgKyBcIlxcXFwuXCIgKyBpcHY0UGFydCArIFwiXFxcXC5cIiArIGlwdjRQYXJ0KSArIChcIihcIiArIHpvbmVJbmRleCArIFwiKT8kXCIpLCAnaScpXG4gIH07XG5cbiAgZXhwYW5kSVB2NiA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcbiAgICB2YXIgY29sb25Db3VudCwgbGFzdENvbG9uLCBwYXJ0LCByZXBsYWNlbWVudCwgcmVwbGFjZW1lbnRDb3VudCwgem9uZUlkO1xuICAgIGlmIChzdHJpbmcuaW5kZXhPZignOjonKSAhPT0gc3RyaW5nLmxhc3RJbmRleE9mKCc6OicpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgem9uZUlkID0gKHN0cmluZy5tYXRjaChpcHY2UmVnZXhlc1snem9uZUluZGV4J10pIHx8IFtdKVswXTtcbiAgICBpZiAoem9uZUlkKSB7XG4gICAgICB6b25lSWQgPSB6b25lSWQuc3Vic3RyaW5nKDEpO1xuICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyUuKyQvLCAnJyk7XG4gICAgfVxuICAgIGNvbG9uQ291bnQgPSAwO1xuICAgIGxhc3RDb2xvbiA9IC0xO1xuICAgIHdoaWxlICgobGFzdENvbG9uID0gc3RyaW5nLmluZGV4T2YoJzonLCBsYXN0Q29sb24gKyAxKSkgPj0gMCkge1xuICAgICAgY29sb25Db3VudCsrO1xuICAgIH1cbiAgICBpZiAoc3RyaW5nLnN1YnN0cigwLCAyKSA9PT0gJzo6Jykge1xuICAgICAgY29sb25Db3VudC0tO1xuICAgIH1cbiAgICBpZiAoc3RyaW5nLnN1YnN0cigtMiwgMikgPT09ICc6OicpIHtcbiAgICAgIGNvbG9uQ291bnQtLTtcbiAgICB9XG4gICAgaWYgKGNvbG9uQ291bnQgPiBwYXJ0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJlcGxhY2VtZW50Q291bnQgPSBwYXJ0cyAtIGNvbG9uQ291bnQ7XG4gICAgcmVwbGFjZW1lbnQgPSAnOic7XG4gICAgd2hpbGUgKHJlcGxhY2VtZW50Q291bnQtLSkge1xuICAgICAgcmVwbGFjZW1lbnQgKz0gJzA6JztcbiAgICB9XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoJzo6JywgcmVwbGFjZW1lbnQpO1xuICAgIGlmIChzdHJpbmdbMF0gPT09ICc6Jykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKDEpO1xuICAgIH1cbiAgICBpZiAoc3RyaW5nW3N0cmluZy5sZW5ndGggLSAxXSA9PT0gJzonKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoMCwgLTEpO1xuICAgIH1cbiAgICBwYXJ0cyA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBrLCBsZW4sIHJlZiwgcmVzdWx0cztcbiAgICAgIHJlZiA9IHN0cmluZy5zcGxpdChcIjpcIik7XG4gICAgICByZXN1bHRzID0gW107XG4gICAgICBmb3IgKGsgPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgcGFydCA9IHJlZltrXTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnNlSW50KHBhcnQsIDE2KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9KSgpO1xuICAgIHJldHVybiB7XG4gICAgICBwYXJ0czogcGFydHMsXG4gICAgICB6b25lSWQ6IHpvbmVJZFxuICAgIH07XG4gIH07XG5cbiAgaXBhZGRyLklQdjYucGFyc2VyID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdmFyIGFkZHIsIGssIGxlbiwgbWF0Y2gsIG9jdGV0LCBvY3RldHMsIHpvbmVJZDtcbiAgICBpZiAoaXB2NlJlZ2V4ZXNbJ25hdGl2ZSddLnRlc3Qoc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIGV4cGFuZElQdjYoc3RyaW5nLCA4KTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKGlwdjZSZWdleGVzWyd0cmFuc2l0aW9uYWwnXSkpIHtcbiAgICAgIHpvbmVJZCA9IG1hdGNoWzZdIHx8ICcnO1xuICAgICAgYWRkciA9IGV4cGFuZElQdjYobWF0Y2hbMV0uc2xpY2UoMCwgLTEpICsgem9uZUlkLCA2KTtcbiAgICAgIGlmIChhZGRyLnBhcnRzKSB7XG4gICAgICAgIG9jdGV0cyA9IFtwYXJzZUludChtYXRjaFsyXSksIHBhcnNlSW50KG1hdGNoWzNdKSwgcGFyc2VJbnQobWF0Y2hbNF0pLCBwYXJzZUludChtYXRjaFs1XSldO1xuICAgICAgICBmb3IgKGsgPSAwLCBsZW4gPSBvY3RldHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICBvY3RldCA9IG9jdGV0c1trXTtcbiAgICAgICAgICBpZiAoISgoMCA8PSBvY3RldCAmJiBvY3RldCA8PSAyNTUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFkZHIucGFydHMucHVzaChvY3RldHNbMF0gPDwgOCB8IG9jdGV0c1sxXSk7XG4gICAgICAgIGFkZHIucGFydHMucHVzaChvY3RldHNbMl0gPDwgOCB8IG9jdGV0c1szXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGFydHM6IGFkZHIucGFydHMsXG4gICAgICAgICAgem9uZUlkOiBhZGRyLnpvbmVJZFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBpcGFkZHIuSVB2NC5pc0lQdjQgPSBpcGFkZHIuSVB2Ni5pc0lQdjYgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIoc3RyaW5nKSAhPT0gbnVsbDtcbiAgfTtcblxuICBpcGFkZHIuSVB2NC5pc1ZhbGlkID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdmFyIGU7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyB0aGlzKHRoaXMucGFyc2VyKHN0cmluZykpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgICBlID0gZXJyb3IxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBpcGFkZHIuSVB2NC5pc1ZhbGlkRm91clBhcnREZWNpbWFsID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgaWYgKGlwYWRkci5JUHY0LmlzVmFsaWQoc3RyaW5nKSAmJiBzdHJpbmcubWF0Y2goL15cXGQrKFxcLlxcZCspezN9JC8pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBpcGFkZHIuSVB2Ni5pc1ZhbGlkID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdmFyIGFkZHIsIGU7XG4gICAgaWYgKHR5cGVvZiBzdHJpbmcgPT09IFwic3RyaW5nXCIgJiYgc3RyaW5nLmluZGV4T2YoXCI6XCIpID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYWRkciA9IHRoaXMucGFyc2VyKHN0cmluZyk7XG4gICAgICBuZXcgdGhpcyhhZGRyLnBhcnRzLCBhZGRyLnpvbmVJZCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgIGUgPSBlcnJvcjE7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGlwYWRkci5JUHY0LnBhcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdmFyIHBhcnRzO1xuICAgIHBhcnRzID0gdGhpcy5wYXJzZXIoc3RyaW5nKTtcbiAgICBpZiAocGFydHMgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlwYWRkcjogc3RyaW5nIGlzIG5vdCBmb3JtYXR0ZWQgbGlrZSBpcCBhZGRyZXNzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMocGFydHMpO1xuICB9O1xuXG4gIGlwYWRkci5JUHY2LnBhcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdmFyIGFkZHI7XG4gICAgYWRkciA9IHRoaXMucGFyc2VyKHN0cmluZyk7XG4gICAgaWYgKGFkZHIucGFydHMgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlwYWRkcjogc3RyaW5nIGlzIG5vdCBmb3JtYXR0ZWQgbGlrZSBpcCBhZGRyZXNzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoYWRkci5wYXJ0cywgYWRkci56b25lSWQpO1xuICB9O1xuXG4gIGlwYWRkci5JUHY0LnBhcnNlQ0lEUiA9IGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHZhciBtYXNrTGVuZ3RoLCBtYXRjaDtcbiAgICBpZiAobWF0Y2ggPSBzdHJpbmcubWF0Y2goL14oLispXFwvKFxcZCspJC8pKSB7XG4gICAgICBtYXNrTGVuZ3RoID0gcGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgaWYgKG1hc2tMZW5ndGggPj0gMCAmJiBtYXNrTGVuZ3RoIDw9IDMyKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5wYXJzZShtYXRjaFsxXSksIG1hc2tMZW5ndGhdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJpcGFkZHI6IHN0cmluZyBpcyBub3QgZm9ybWF0dGVkIGxpa2UgYW4gSVB2NCBDSURSIHJhbmdlXCIpO1xuICB9O1xuXG4gIGlwYWRkci5JUHY0LnN1Ym5ldE1hc2tGcm9tUHJlZml4TGVuZ3RoID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGZpbGxlZE9jdGV0Q291bnQsIGosIG9jdGV0cztcbiAgICBwcmVmaXggPSBwYXJzZUludChwcmVmaXgpO1xuICAgIGlmIChwcmVmaXggPCAwIHx8IHByZWZpeCA+IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwYWRkcjogaW52YWxpZCBJUHY0IHByZWZpeCBsZW5ndGgnKTtcbiAgICB9XG4gICAgb2N0ZXRzID0gWzAsIDAsIDAsIDBdO1xuICAgIGogPSAwO1xuICAgIGZpbGxlZE9jdGV0Q291bnQgPSBNYXRoLmZsb29yKHByZWZpeCAvIDgpO1xuICAgIHdoaWxlIChqIDwgZmlsbGVkT2N0ZXRDb3VudCkge1xuICAgICAgb2N0ZXRzW2pdID0gMjU1O1xuICAgICAgaisrO1xuICAgIH1cbiAgICBpZiAoZmlsbGVkT2N0ZXRDb3VudCA8IDQpIHtcbiAgICAgIG9jdGV0c1tmaWxsZWRPY3RldENvdW50XSA9IE1hdGgucG93KDIsIHByZWZpeCAlIDgpIC0gMSA8PCA4IC0gKHByZWZpeCAlIDgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMob2N0ZXRzKTtcbiAgfTtcblxuICBpcGFkZHIuSVB2NC5icm9hZGNhc3RBZGRyZXNzRnJvbUNJRFIgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB2YXIgY2lkciwgZXJyb3IsIGksIGlwSW50ZXJmYWNlT2N0ZXRzLCBvY3RldHMsIHN1Ym5ldE1hc2tPY3RldHM7XG4gICAgdHJ5IHtcbiAgICAgIGNpZHIgPSB0aGlzLnBhcnNlQ0lEUihzdHJpbmcpO1xuICAgICAgaXBJbnRlcmZhY2VPY3RldHMgPSBjaWRyWzBdLnRvQnl0ZUFycmF5KCk7XG4gICAgICBzdWJuZXRNYXNrT2N0ZXRzID0gdGhpcy5zdWJuZXRNYXNrRnJvbVByZWZpeExlbmd0aChjaWRyWzFdKS50b0J5dGVBcnJheSgpO1xuICAgICAgb2N0ZXRzID0gW107XG4gICAgICBpID0gMDtcbiAgICAgIHdoaWxlIChpIDwgNCkge1xuICAgICAgICBvY3RldHMucHVzaChwYXJzZUludChpcEludGVyZmFjZU9jdGV0c1tpXSwgMTApIHwgcGFyc2VJbnQoc3VibmV0TWFza09jdGV0c1tpXSwgMTApIF4gMjU1KTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyB0aGlzKG9jdGV0cyk7XG4gICAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgICBlcnJvciA9IGVycm9yMTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaXBhZGRyOiB0aGUgYWRkcmVzcyBkb2VzIG5vdCBoYXZlIElQdjQgQ0lEUiBmb3JtYXQnKTtcbiAgICB9XG4gIH07XG5cbiAgaXBhZGRyLklQdjQubmV0d29ya0FkZHJlc3NGcm9tQ0lEUiA9IGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHZhciBjaWRyLCBlcnJvciwgaSwgaXBJbnRlcmZhY2VPY3RldHMsIG9jdGV0cywgc3VibmV0TWFza09jdGV0cztcbiAgICB0cnkge1xuICAgICAgY2lkciA9IHRoaXMucGFyc2VDSURSKHN0cmluZyk7XG4gICAgICBpcEludGVyZmFjZU9jdGV0cyA9IGNpZHJbMF0udG9CeXRlQXJyYXkoKTtcbiAgICAgIHN1Ym5ldE1hc2tPY3RldHMgPSB0aGlzLnN1Ym5ldE1hc2tGcm9tUHJlZml4TGVuZ3RoKGNpZHJbMV0pLnRvQnl0ZUFycmF5KCk7XG4gICAgICBvY3RldHMgPSBbXTtcbiAgICAgIGkgPSAwO1xuICAgICAgd2hpbGUgKGkgPCA0KSB7XG4gICAgICAgIG9jdGV0cy5wdXNoKHBhcnNlSW50KGlwSW50ZXJmYWNlT2N0ZXRzW2ldLCAxMCkgJiBwYXJzZUludChzdWJuZXRNYXNrT2N0ZXRzW2ldLCAxMCkpO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IHRoaXMob2N0ZXRzKTtcbiAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgIGVycm9yID0gZXJyb3IxO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGFkZHI6IHRoZSBhZGRyZXNzIGRvZXMgbm90IGhhdmUgSVB2NCBDSURSIGZvcm1hdCcpO1xuICAgIH1cbiAgfTtcblxuICBpcGFkZHIuSVB2Ni5wYXJzZUNJRFIgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB2YXIgbWFza0xlbmd0aCwgbWF0Y2g7XG4gICAgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKC9eKC4rKVxcLyhcXGQrKSQvKSkge1xuICAgICAgbWFza0xlbmd0aCA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgIGlmIChtYXNrTGVuZ3RoID49IDAgJiYgbWFza0xlbmd0aCA8PSAxMjgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLnBhcnNlKG1hdGNoWzFdKSwgbWFza0xlbmd0aF07XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcImlwYWRkcjogc3RyaW5nIGlzIG5vdCBmb3JtYXR0ZWQgbGlrZSBhbiBJUHY2IENJRFIgcmFuZ2VcIik7XG4gIH07XG5cbiAgaXBhZGRyLmlzVmFsaWQgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICByZXR1cm4gaXBhZGRyLklQdjYuaXNWYWxpZChzdHJpbmcpIHx8IGlwYWRkci5JUHY0LmlzVmFsaWQoc3RyaW5nKTtcbiAgfTtcblxuICBpcGFkZHIucGFyc2UgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBpZiAoaXBhZGRyLklQdjYuaXNWYWxpZChzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gaXBhZGRyLklQdjYucGFyc2Uoc3RyaW5nKTtcbiAgICB9IGVsc2UgaWYgKGlwYWRkci5JUHY0LmlzVmFsaWQoc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIGlwYWRkci5JUHY0LnBhcnNlKHN0cmluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlwYWRkcjogdGhlIGFkZHJlc3MgaGFzIG5laXRoZXIgSVB2NiBub3IgSVB2NCBmb3JtYXRcIik7XG4gICAgfVxuICB9O1xuXG4gIGlwYWRkci5wYXJzZUNJRFIgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB2YXIgZTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGlwYWRkci5JUHY2LnBhcnNlQ0lEUihzdHJpbmcpO1xuICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgICAgZSA9IGVycm9yMTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBpcGFkZHIuSVB2NC5wYXJzZUNJRFIoc3RyaW5nKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgICAgICBlID0gZXJyb3IxO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpcGFkZHI6IHRoZSBhZGRyZXNzIGhhcyBuZWl0aGVyIElQdjYgbm9yIElQdjQgQ0lEUiBmb3JtYXRcIik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGlwYWRkci5mcm9tQnl0ZUFycmF5ID0gZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICB2YXIgbGVuZ3RoO1xuICAgIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoID09PSA0KSB7XG4gICAgICByZXR1cm4gbmV3IGlwYWRkci5JUHY0KGJ5dGVzKTtcbiAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gMTYpIHtcbiAgICAgIHJldHVybiBuZXcgaXBhZGRyLklQdjYoYnl0ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpcGFkZHI6IHRoZSBiaW5hcnkgaW5wdXQgaXMgbmVpdGhlciBhbiBJUHY2IG5vciBJUHY0IGFkZHJlc3NcIik7XG4gICAgfVxuICB9O1xuXG4gIGlwYWRkci5wcm9jZXNzID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdmFyIGFkZHI7XG4gICAgYWRkciA9IHRoaXMucGFyc2Uoc3RyaW5nKTtcbiAgICBpZiAoYWRkci5raW5kKCkgPT09ICdpcHY2JyAmJiBhZGRyLmlzSVB2NE1hcHBlZEFkZHJlc3MoKSkge1xuICAgICAgcmV0dXJuIGFkZHIudG9JUHY0QWRkcmVzcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYWRkcjtcbiAgICB9XG4gIH07XG5cbn0pLmNhbGwodGhpcyk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvaXBhZGRyLmpzL2xpYi9pcGFkZHIuanNcbi8vIG1vZHVsZSBpZCA9IDE3MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xyXG5cdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XHJcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcclxuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xyXG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XHJcblx0XHRpZighbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9kdWxlO1xyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qc1xuLy8gbW9kdWxlIGlkID0gMTczXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogZXhwcmVzc1xuICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMyBUSiBIb2xvd2F5Y2h1a1xuICogQ29weXJpZ2h0KGMpIDIwMTMgUm9tYW4gU2h0eWxtYW5cbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgYWNjZXB0cyA9IHJlcXVpcmUoJ2FjY2VwdHMnKTtcbnZhciBkZXByZWNhdGUgPSByZXF1aXJlKCdkZXBkJykoJ2V4cHJlc3MnKTtcbnZhciBpc0lQID0gcmVxdWlyZSgnbmV0JykuaXNJUDtcbnZhciB0eXBlaXMgPSByZXF1aXJlKCd0eXBlLWlzJyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBmcmVzaCA9IHJlcXVpcmUoJ2ZyZXNoJyk7XG52YXIgcGFyc2VSYW5nZSA9IHJlcXVpcmUoJ3JhbmdlLXBhcnNlcicpO1xudmFyIHBhcnNlID0gcmVxdWlyZSgncGFyc2V1cmwnKTtcbnZhciBwcm94eWFkZHIgPSByZXF1aXJlKCdwcm94eS1hZGRyJyk7XG5cbi8qKlxuICogUmVxdWVzdCBwcm90b3R5cGUuXG4gKiBAcHVibGljXG4gKi9cblxudmFyIHJlcSA9IE9iamVjdC5jcmVhdGUoaHR0cC5JbmNvbWluZ01lc3NhZ2UucHJvdG90eXBlKVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxXG5cbi8qKlxuICogUmV0dXJuIHJlcXVlc3QgaGVhZGVyLlxuICpcbiAqIFRoZSBgUmVmZXJyZXJgIGhlYWRlciBmaWVsZCBpcyBzcGVjaWFsLWNhc2VkLFxuICogYm90aCBgUmVmZXJyZXJgIGFuZCBgUmVmZXJlcmAgYXJlIGludGVyY2hhbmdlYWJsZS5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgcmVxLmdldCgnQ29udGVudC1UeXBlJyk7XG4gKiAgICAgLy8gPT4gXCJ0ZXh0L3BsYWluXCJcbiAqXG4gKiAgICAgcmVxLmdldCgnY29udGVudC10eXBlJyk7XG4gKiAgICAgLy8gPT4gXCJ0ZXh0L3BsYWluXCJcbiAqXG4gKiAgICAgcmVxLmdldCgnU29tZXRoaW5nJyk7XG4gKiAgICAgLy8gPT4gdW5kZWZpbmVkXG4gKlxuICogQWxpYXNlZCBhcyBgcmVxLmhlYWRlcigpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5cbnJlcS5nZXQgPVxucmVxLmhlYWRlciA9IGZ1bmN0aW9uIGhlYWRlcihuYW1lKSB7XG4gIGlmICghbmFtZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25hbWUgYXJndW1lbnQgaXMgcmVxdWlyZWQgdG8gcmVxLmdldCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25hbWUgbXVzdCBiZSBhIHN0cmluZyB0byByZXEuZ2V0Jyk7XG4gIH1cblxuICB2YXIgbGMgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgc3dpdGNoIChsYykge1xuICAgIGNhc2UgJ3JlZmVyZXInOlxuICAgIGNhc2UgJ3JlZmVycmVyJzpcbiAgICAgIHJldHVybiB0aGlzLmhlYWRlcnMucmVmZXJyZXJcbiAgICAgICAgfHwgdGhpcy5oZWFkZXJzLnJlZmVyZXI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0aGlzLmhlYWRlcnNbbGNdO1xuICB9XG59O1xuXG4vKipcbiAqIFRvIGRvOiB1cGRhdGUgZG9jcy5cbiAqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gYHR5cGUocylgIGlzIGFjY2VwdGFibGUsIHJldHVybmluZ1xuICogdGhlIGJlc3QgbWF0Y2ggd2hlbiB0cnVlLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAsIGluIHdoaWNoXG4gKiBjYXNlIHlvdSBzaG91bGQgcmVzcG9uZCB3aXRoIDQwNiBcIk5vdCBBY2NlcHRhYmxlXCIuXG4gKlxuICogVGhlIGB0eXBlYCB2YWx1ZSBtYXkgYmUgYSBzaW5nbGUgTUlNRSB0eXBlIHN0cmluZ1xuICogc3VjaCBhcyBcImFwcGxpY2F0aW9uL2pzb25cIiwgYW4gZXh0ZW5zaW9uIG5hbWVcbiAqIHN1Y2ggYXMgXCJqc29uXCIsIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgc3VjaCBhcyBcImpzb24sIGh0bWwsIHRleHQvcGxhaW5cIixcbiAqIGFuIGFyZ3VtZW50IGxpc3Qgc3VjaCBhcyBgXCJqc29uXCIsIFwiaHRtbFwiLCBcInRleHQvcGxhaW5cImAsXG4gKiBvciBhbiBhcnJheSBgW1wianNvblwiLCBcImh0bWxcIiwgXCJ0ZXh0L3BsYWluXCJdYC4gV2hlbiBhIGxpc3RcbiAqIG9yIGFycmF5IGlzIGdpdmVuLCB0aGUgX2Jlc3RfIG1hdGNoLCBpZiBhbnkgaXMgcmV0dXJuZWQuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIC8vIEFjY2VwdDogdGV4dC9odG1sXG4gKiAgICAgcmVxLmFjY2VwdHMoJ2h0bWwnKTtcbiAqICAgICAvLyA9PiBcImh0bWxcIlxuICpcbiAqICAgICAvLyBBY2NlcHQ6IHRleHQvKiwgYXBwbGljYXRpb24vanNvblxuICogICAgIHJlcS5hY2NlcHRzKCdodG1sJyk7XG4gKiAgICAgLy8gPT4gXCJodG1sXCJcbiAqICAgICByZXEuYWNjZXB0cygndGV4dC9odG1sJyk7XG4gKiAgICAgLy8gPT4gXCJ0ZXh0L2h0bWxcIlxuICogICAgIHJlcS5hY2NlcHRzKCdqc29uLCB0ZXh0Jyk7XG4gKiAgICAgLy8gPT4gXCJqc29uXCJcbiAqICAgICByZXEuYWNjZXB0cygnYXBwbGljYXRpb24vanNvbicpO1xuICogICAgIC8vID0+IFwiYXBwbGljYXRpb24vanNvblwiXG4gKlxuICogICAgIC8vIEFjY2VwdDogdGV4dC8qLCBhcHBsaWNhdGlvbi9qc29uXG4gKiAgICAgcmVxLmFjY2VwdHMoJ2ltYWdlL3BuZycpO1xuICogICAgIHJlcS5hY2NlcHRzKCdwbmcnKTtcbiAqICAgICAvLyA9PiB1bmRlZmluZWRcbiAqXG4gKiAgICAgLy8gQWNjZXB0OiB0ZXh0Lyo7cT0uNSwgYXBwbGljYXRpb24vanNvblxuICogICAgIHJlcS5hY2NlcHRzKFsnaHRtbCcsICdqc29uJ10pO1xuICogICAgIHJlcS5hY2NlcHRzKCdodG1sJywgJ2pzb24nKTtcbiAqICAgICByZXEuYWNjZXB0cygnaHRtbCwganNvbicpO1xuICogICAgIC8vID0+IFwianNvblwiXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHR5cGUocylcbiAqIEByZXR1cm4ge1N0cmluZ3xBcnJheXxCb29sZWFufVxuICogQHB1YmxpY1xuICovXG5cbnJlcS5hY2NlcHRzID0gZnVuY3Rpb24oKXtcbiAgdmFyIGFjY2VwdCA9IGFjY2VwdHModGhpcyk7XG4gIHJldHVybiBhY2NlcHQudHlwZXMuYXBwbHkoYWNjZXB0LCBhcmd1bWVudHMpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gYGVuY29kaW5nYHMgYXJlIGFjY2VwdGVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAuLi5lbmNvZGluZ1xuICogQHJldHVybiB7U3RyaW5nfEFycmF5fVxuICogQHB1YmxpY1xuICovXG5cbnJlcS5hY2NlcHRzRW5jb2RpbmdzID0gZnVuY3Rpb24oKXtcbiAgdmFyIGFjY2VwdCA9IGFjY2VwdHModGhpcyk7XG4gIHJldHVybiBhY2NlcHQuZW5jb2RpbmdzLmFwcGx5KGFjY2VwdCwgYXJndW1lbnRzKTtcbn07XG5cbnJlcS5hY2NlcHRzRW5jb2RpbmcgPSBkZXByZWNhdGUuZnVuY3Rpb24ocmVxLmFjY2VwdHNFbmNvZGluZ3MsXG4gICdyZXEuYWNjZXB0c0VuY29kaW5nOiBVc2UgYWNjZXB0c0VuY29kaW5ncyBpbnN0ZWFkJyk7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGBjaGFyc2V0YHMgYXJlIGFjY2VwdGFibGUsXG4gKiBvdGhlcndpc2UgeW91IHNob3VsZCByZXNwb25kIHdpdGggNDA2IFwiTm90IEFjY2VwdGFibGVcIi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gLi4uY2hhcnNldFxuICogQHJldHVybiB7U3RyaW5nfEFycmF5fVxuICogQHB1YmxpY1xuICovXG5cbnJlcS5hY2NlcHRzQ2hhcnNldHMgPSBmdW5jdGlvbigpe1xuICB2YXIgYWNjZXB0ID0gYWNjZXB0cyh0aGlzKTtcbiAgcmV0dXJuIGFjY2VwdC5jaGFyc2V0cy5hcHBseShhY2NlcHQsIGFyZ3VtZW50cyk7XG59O1xuXG5yZXEuYWNjZXB0c0NoYXJzZXQgPSBkZXByZWNhdGUuZnVuY3Rpb24ocmVxLmFjY2VwdHNDaGFyc2V0cyxcbiAgJ3JlcS5hY2NlcHRzQ2hhcnNldDogVXNlIGFjY2VwdHNDaGFyc2V0cyBpbnN0ZWFkJyk7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGBsYW5nYHMgYXJlIGFjY2VwdGFibGUsXG4gKiBvdGhlcndpc2UgeW91IHNob3VsZCByZXNwb25kIHdpdGggNDA2IFwiTm90IEFjY2VwdGFibGVcIi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gLi4ubGFuZ1xuICogQHJldHVybiB7U3RyaW5nfEFycmF5fVxuICogQHB1YmxpY1xuICovXG5cbnJlcS5hY2NlcHRzTGFuZ3VhZ2VzID0gZnVuY3Rpb24oKXtcbiAgdmFyIGFjY2VwdCA9IGFjY2VwdHModGhpcyk7XG4gIHJldHVybiBhY2NlcHQubGFuZ3VhZ2VzLmFwcGx5KGFjY2VwdCwgYXJndW1lbnRzKTtcbn07XG5cbnJlcS5hY2NlcHRzTGFuZ3VhZ2UgPSBkZXByZWNhdGUuZnVuY3Rpb24ocmVxLmFjY2VwdHNMYW5ndWFnZXMsXG4gICdyZXEuYWNjZXB0c0xhbmd1YWdlOiBVc2UgYWNjZXB0c0xhbmd1YWdlcyBpbnN0ZWFkJyk7XG5cbi8qKlxuICogUGFyc2UgUmFuZ2UgaGVhZGVyIGZpZWxkLCBjYXBwaW5nIHRvIHRoZSBnaXZlbiBgc2l6ZWAuXG4gKlxuICogVW5zcGVjaWZpZWQgcmFuZ2VzIHN1Y2ggYXMgXCIwLVwiIHJlcXVpcmUga25vd2xlZGdlIG9mIHlvdXIgcmVzb3VyY2UgbGVuZ3RoLiBJblxuICogdGhlIGNhc2Ugb2YgYSBieXRlIHJhbmdlIHRoaXMgaXMgb2YgY291cnNlIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMuIElmIHRoZVxuICogUmFuZ2UgaGVhZGVyIGZpZWxkIGlzIG5vdCBnaXZlbiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZCwgYC0xYCB3aGVuIHVuc2F0aXNmaWFibGUsXG4gKiBhbmQgYC0yYCB3aGVuIHN5bnRhY3RpY2FsbHkgaW52YWxpZC5cbiAqXG4gKiBXaGVuIHJhbmdlcyBhcmUgcmV0dXJuZWQsIHRoZSBhcnJheSBoYXMgYSBcInR5cGVcIiBwcm9wZXJ0eSB3aGljaCBpcyB0aGUgdHlwZSBvZlxuICogcmFuZ2UgdGhhdCBpcyByZXF1aXJlZCAobW9zdCBjb21tb25seSwgXCJieXRlc1wiKS4gRWFjaCBhcnJheSBlbGVtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCBhIFwic3RhcnRcIiBhbmQgXCJlbmRcIiBwcm9wZXJ0eSBmb3IgdGhlIHBvcnRpb24gb2YgdGhlIHJhbmdlLlxuICpcbiAqIFRoZSBcImNvbWJpbmVcIiBvcHRpb24gY2FuIGJlIHNldCB0byBgdHJ1ZWAgYW5kIG92ZXJsYXBwaW5nICYgYWRqYWNlbnQgcmFuZ2VzXG4gKiB3aWxsIGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgcmFuZ2UuXG4gKlxuICogTk9URTogcmVtZW1iZXIgdGhhdCByYW5nZXMgYXJlIGluY2x1c2l2ZSwgc28gZm9yIGV4YW1wbGUgXCJSYW5nZTogdXNlcnM9MC0zXCJcbiAqIHNob3VsZCByZXNwb25kIHdpdGggNCB1c2VycyB3aGVuIGF2YWlsYWJsZSwgbm90IDMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHNpemVcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29tYmluZT1mYWxzZV1cbiAqIEByZXR1cm4ge251bWJlcnxhcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuXG5yZXEucmFuZ2UgPSBmdW5jdGlvbiByYW5nZShzaXplLCBvcHRpb25zKSB7XG4gIHZhciByYW5nZSA9IHRoaXMuZ2V0KCdSYW5nZScpO1xuICBpZiAoIXJhbmdlKSByZXR1cm47XG4gIHJldHVybiBwYXJzZVJhbmdlKHNpemUsIHJhbmdlLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSB2YWx1ZSBvZiBwYXJhbSBgbmFtZWAgd2hlbiBwcmVzZW50IG9yIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqICAtIENoZWNrcyByb3V0ZSBwbGFjZWhvbGRlcnMsIGV4OiBfL3VzZXIvOmlkX1xuICogIC0gQ2hlY2tzIGJvZHkgcGFyYW1zLCBleDogaWQ9MTIsIHtcImlkXCI6MTJ9XG4gKiAgLSBDaGVja3MgcXVlcnkgc3RyaW5nIHBhcmFtcywgZXg6ID9pZD0xMlxuICpcbiAqIFRvIHV0aWxpemUgcmVxdWVzdCBib2RpZXMsIGByZXEuYm9keWBcbiAqIHNob3VsZCBiZSBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIGRvbmUgYnkgdXNpbmdcbiAqIHRoZSBgYm9keVBhcnNlcigpYCBtaWRkbGV3YXJlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge01peGVkfSBbZGVmYXVsdFZhbHVlXVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5cbnJlcS5wYXJhbSA9IGZ1bmN0aW9uIHBhcmFtKG5hbWUsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXMgfHwge307XG4gIHZhciBib2R5ID0gdGhpcy5ib2R5IHx8IHt9O1xuICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5IHx8IHt9O1xuXG4gIHZhciBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgID8gJ25hbWUnXG4gICAgOiAnbmFtZSwgZGVmYXVsdCc7XG4gIGRlcHJlY2F0ZSgncmVxLnBhcmFtKCcgKyBhcmdzICsgJyk6IFVzZSByZXEucGFyYW1zLCByZXEuYm9keSwgb3IgcmVxLnF1ZXJ5IGluc3RlYWQnKTtcblxuICBpZiAobnVsbCAhPSBwYXJhbXNbbmFtZV0gJiYgcGFyYW1zLmhhc093blByb3BlcnR5KG5hbWUpKSByZXR1cm4gcGFyYW1zW25hbWVdO1xuICBpZiAobnVsbCAhPSBib2R5W25hbWVdKSByZXR1cm4gYm9keVtuYW1lXTtcbiAgaWYgKG51bGwgIT0gcXVlcnlbbmFtZV0pIHJldHVybiBxdWVyeVtuYW1lXTtcblxuICByZXR1cm4gZGVmYXVsdFZhbHVlO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgaW5jb21pbmcgcmVxdWVzdCBjb250YWlucyB0aGUgXCJDb250ZW50LVR5cGVcIlxuICogaGVhZGVyIGZpZWxkLCBhbmQgaXQgY29udGFpbnMgdGhlIGdpdmUgbWltZSBgdHlwZWAuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICAvLyBXaXRoIENvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XG4gKiAgICAgIHJlcS5pcygnaHRtbCcpO1xuICogICAgICByZXEuaXMoJ3RleHQvaHRtbCcpO1xuICogICAgICByZXEuaXMoJ3RleHQvKicpO1xuICogICAgICAvLyA9PiB0cnVlXG4gKlxuICogICAgICAvLyBXaGVuIENvbnRlbnQtVHlwZSBpcyBhcHBsaWNhdGlvbi9qc29uXG4gKiAgICAgIHJlcS5pcygnanNvbicpO1xuICogICAgICByZXEuaXMoJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAqICAgICAgcmVxLmlzKCdhcHBsaWNhdGlvbi8qJyk7XG4gKiAgICAgIC8vID0+IHRydWVcbiAqXG4gKiAgICAgIHJlcS5pcygnaHRtbCcpO1xuICogICAgICAvLyA9PiBmYWxzZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSB0eXBlcy4uLlxuICogQHJldHVybiB7U3RyaW5nfGZhbHNlfG51bGx9XG4gKiBAcHVibGljXG4gKi9cblxucmVxLmlzID0gZnVuY3Rpb24gaXModHlwZXMpIHtcbiAgdmFyIGFyciA9IHR5cGVzO1xuXG4gIC8vIHN1cHBvcnQgZmxhdHRlbmVkIGFyZ3VtZW50c1xuICBpZiAoIUFycmF5LmlzQXJyYXkodHlwZXMpKSB7XG4gICAgYXJyID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnJbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR5cGVpcyh0aGlzLCBhcnIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHByb3RvY29sIHN0cmluZyBcImh0dHBcIiBvciBcImh0dHBzXCJcbiAqIHdoZW4gcmVxdWVzdGVkIHdpdGggVExTLiBXaGVuIHRoZSBcInRydXN0IHByb3h5XCJcbiAqIHNldHRpbmcgdHJ1c3RzIHRoZSBzb2NrZXQgYWRkcmVzcywgdGhlXG4gKiBcIlgtRm9yd2FyZGVkLVByb3RvXCIgaGVhZGVyIGZpZWxkIHdpbGwgYmUgdHJ1c3RlZFxuICogYW5kIHVzZWQgaWYgcHJlc2VudC5cbiAqXG4gKiBJZiB5b3UncmUgcnVubmluZyBiZWhpbmQgYSByZXZlcnNlIHByb3h5IHRoYXRcbiAqIHN1cHBsaWVzIGh0dHBzIGZvciB5b3UgdGhpcyBtYXkgYmUgZW5hYmxlZC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cblxuZGVmaW5lR2V0dGVyKHJlcSwgJ3Byb3RvY29sJywgZnVuY3Rpb24gcHJvdG9jb2woKXtcbiAgdmFyIHByb3RvID0gdGhpcy5jb25uZWN0aW9uLmVuY3J5cHRlZFxuICAgID8gJ2h0dHBzJ1xuICAgIDogJ2h0dHAnO1xuICB2YXIgdHJ1c3QgPSB0aGlzLmFwcC5nZXQoJ3RydXN0IHByb3h5IGZuJyk7XG5cbiAgaWYgKCF0cnVzdCh0aGlzLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzcywgMCkpIHtcbiAgICByZXR1cm4gcHJvdG87XG4gIH1cblxuICAvLyBOb3RlOiBYLUZvcndhcmRlZC1Qcm90byBpcyBub3JtYWxseSBvbmx5IGV2ZXIgYVxuICAvLyAgICAgICBzaW5nbGUgdmFsdWUsIGJ1dCB0aGlzIGlzIHRvIGJlIHNhZmUuXG4gIHZhciBoZWFkZXIgPSB0aGlzLmdldCgnWC1Gb3J3YXJkZWQtUHJvdG8nKSB8fCBwcm90b1xuICB2YXIgaW5kZXggPSBoZWFkZXIuaW5kZXhPZignLCcpXG5cbiAgcmV0dXJuIGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnN1YnN0cmluZygwLCBpbmRleCkudHJpbSgpXG4gICAgOiBoZWFkZXIudHJpbSgpXG59KTtcblxuLyoqXG4gKiBTaG9ydC1oYW5kIGZvcjpcbiAqXG4gKiAgICByZXEucHJvdG9jb2wgPT09ICdodHRwcydcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHB1YmxpY1xuICovXG5cbmRlZmluZUdldHRlcihyZXEsICdzZWN1cmUnLCBmdW5jdGlvbiBzZWN1cmUoKXtcbiAgcmV0dXJuIHRoaXMucHJvdG9jb2wgPT09ICdodHRwcyc7XG59KTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHJlbW90ZSBhZGRyZXNzIGZyb20gdGhlIHRydXN0ZWQgcHJveHkuXG4gKlxuICogVGhlIGlzIHRoZSByZW1vdGUgYWRkcmVzcyBvbiB0aGUgc29ja2V0IHVubGVzc1xuICogXCJ0cnVzdCBwcm94eVwiIGlzIHNldC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cblxuZGVmaW5lR2V0dGVyKHJlcSwgJ2lwJywgZnVuY3Rpb24gaXAoKXtcbiAgdmFyIHRydXN0ID0gdGhpcy5hcHAuZ2V0KCd0cnVzdCBwcm94eSBmbicpO1xuICByZXR1cm4gcHJveHlhZGRyKHRoaXMsIHRydXN0KTtcbn0pO1xuXG4vKipcbiAqIFdoZW4gXCJ0cnVzdCBwcm94eVwiIGlzIHNldCwgdHJ1c3RlZCBwcm94eSBhZGRyZXNzZXMgKyBjbGllbnQuXG4gKlxuICogRm9yIGV4YW1wbGUgaWYgdGhlIHZhbHVlIHdlcmUgXCJjbGllbnQsIHByb3h5MSwgcHJveHkyXCJcbiAqIHlvdSB3b3VsZCByZWNlaXZlIHRoZSBhcnJheSBgW1wiY2xpZW50XCIsIFwicHJveHkxXCIsIFwicHJveHkyXCJdYFxuICogd2hlcmUgXCJwcm94eTJcIiBpcyB0aGUgZnVydGhlc3QgZG93bi1zdHJlYW0gYW5kIFwicHJveHkxXCIgYW5kXG4gKiBcInByb3h5MlwiIHdlcmUgdHJ1c3RlZC5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuXG5kZWZpbmVHZXR0ZXIocmVxLCAnaXBzJywgZnVuY3Rpb24gaXBzKCkge1xuICB2YXIgdHJ1c3QgPSB0aGlzLmFwcC5nZXQoJ3RydXN0IHByb3h5IGZuJyk7XG4gIHZhciBhZGRycyA9IHByb3h5YWRkci5hbGwodGhpcywgdHJ1c3QpO1xuXG4gIC8vIHJldmVyc2UgdGhlIG9yZGVyICh0byBmYXJ0aGVzdCAtPiBjbG9zZXN0KVxuICAvLyBhbmQgcmVtb3ZlIHNvY2tldCBhZGRyZXNzXG4gIGFkZHJzLnJldmVyc2UoKS5wb3AoKVxuXG4gIHJldHVybiBhZGRyc1xufSk7XG5cbi8qKlxuICogUmV0dXJuIHN1YmRvbWFpbnMgYXMgYW4gYXJyYXkuXG4gKlxuICogU3ViZG9tYWlucyBhcmUgdGhlIGRvdC1zZXBhcmF0ZWQgcGFydHMgb2YgdGhlIGhvc3QgYmVmb3JlIHRoZSBtYWluIGRvbWFpbiBvZlxuICogdGhlIGFwcC4gQnkgZGVmYXVsdCwgdGhlIGRvbWFpbiBvZiB0aGUgYXBwIGlzIGFzc3VtZWQgdG8gYmUgdGhlIGxhc3QgdHdvXG4gKiBwYXJ0cyBvZiB0aGUgaG9zdC4gVGhpcyBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIFwic3ViZG9tYWluIG9mZnNldFwiLlxuICpcbiAqIEZvciBleGFtcGxlLCBpZiB0aGUgZG9tYWluIGlzIFwidG9iaS5mZXJyZXRzLmV4YW1wbGUuY29tXCI6XG4gKiBJZiBcInN1YmRvbWFpbiBvZmZzZXRcIiBpcyBub3Qgc2V0LCByZXEuc3ViZG9tYWlucyBpcyBgW1wiZmVycmV0c1wiLCBcInRvYmlcIl1gLlxuICogSWYgXCJzdWJkb21haW4gb2Zmc2V0XCIgaXMgMywgcmVxLnN1YmRvbWFpbnMgaXMgYFtcInRvYmlcIl1gLlxuICpcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQHB1YmxpY1xuICovXG5cbmRlZmluZUdldHRlcihyZXEsICdzdWJkb21haW5zJywgZnVuY3Rpb24gc3ViZG9tYWlucygpIHtcbiAgdmFyIGhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZTtcblxuICBpZiAoIWhvc3RuYW1lKSByZXR1cm4gW107XG5cbiAgdmFyIG9mZnNldCA9IHRoaXMuYXBwLmdldCgnc3ViZG9tYWluIG9mZnNldCcpO1xuICB2YXIgc3ViZG9tYWlucyA9ICFpc0lQKGhvc3RuYW1lKVxuICAgID8gaG9zdG5hbWUuc3BsaXQoJy4nKS5yZXZlcnNlKClcbiAgICA6IFtob3N0bmFtZV07XG5cbiAgcmV0dXJuIHN1YmRvbWFpbnMuc2xpY2Uob2Zmc2V0KTtcbn0pO1xuXG4vKipcbiAqIFNob3J0LWhhbmQgZm9yIGB1cmwucGFyc2UocmVxLnVybCkucGF0aG5hbWVgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5kZWZpbmVHZXR0ZXIocmVxLCAncGF0aCcsIGZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiBwYXJzZSh0aGlzKS5wYXRobmFtZTtcbn0pO1xuXG4vKipcbiAqIFBhcnNlIHRoZSBcIkhvc3RcIiBoZWFkZXIgZmllbGQgdG8gYSBob3N0bmFtZS5cbiAqXG4gKiBXaGVuIHRoZSBcInRydXN0IHByb3h5XCIgc2V0dGluZyB0cnVzdHMgdGhlIHNvY2tldFxuICogYWRkcmVzcywgdGhlIFwiWC1Gb3J3YXJkZWQtSG9zdFwiIGhlYWRlciBmaWVsZCB3aWxsXG4gKiBiZSB0cnVzdGVkLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5kZWZpbmVHZXR0ZXIocmVxLCAnaG9zdG5hbWUnLCBmdW5jdGlvbiBob3N0bmFtZSgpe1xuICB2YXIgdHJ1c3QgPSB0aGlzLmFwcC5nZXQoJ3RydXN0IHByb3h5IGZuJyk7XG4gIHZhciBob3N0ID0gdGhpcy5nZXQoJ1gtRm9yd2FyZGVkLUhvc3QnKTtcblxuICBpZiAoIWhvc3QgfHwgIXRydXN0KHRoaXMuY29ubmVjdGlvbi5yZW1vdGVBZGRyZXNzLCAwKSkge1xuICAgIGhvc3QgPSB0aGlzLmdldCgnSG9zdCcpO1xuICB9XG5cbiAgaWYgKCFob3N0KSByZXR1cm47XG5cbiAgLy8gSVB2NiBsaXRlcmFsIHN1cHBvcnRcbiAgdmFyIG9mZnNldCA9IGhvc3RbMF0gPT09ICdbJ1xuICAgID8gaG9zdC5pbmRleE9mKCddJykgKyAxXG4gICAgOiAwO1xuICB2YXIgaW5kZXggPSBob3N0LmluZGV4T2YoJzonLCBvZmZzZXQpO1xuXG4gIHJldHVybiBpbmRleCAhPT0gLTFcbiAgICA/IGhvc3Quc3Vic3RyaW5nKDAsIGluZGV4KVxuICAgIDogaG9zdDtcbn0pO1xuXG4vLyBUT0RPOiBjaGFuZ2UgcmVxLmhvc3QgdG8gcmV0dXJuIGhvc3QgaW4gbmV4dCBtYWpvclxuXG5kZWZpbmVHZXR0ZXIocmVxLCAnaG9zdCcsIGRlcHJlY2F0ZS5mdW5jdGlvbihmdW5jdGlvbiBob3N0KCl7XG4gIHJldHVybiB0aGlzLmhvc3RuYW1lO1xufSwgJ3JlcS5ob3N0OiBVc2UgcmVxLmhvc3RuYW1lIGluc3RlYWQnKSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlcXVlc3QgaXMgZnJlc2gsIGFrYVxuICogTGFzdC1Nb2RpZmllZCBhbmQvb3IgdGhlIEVUYWdcbiAqIHN0aWxsIG1hdGNoLlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAcHVibGljXG4gKi9cblxuZGVmaW5lR2V0dGVyKHJlcSwgJ2ZyZXNoJywgZnVuY3Rpb24oKXtcbiAgdmFyIG1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICB2YXIgcmVzID0gdGhpcy5yZXNcbiAgdmFyIHN0YXR1cyA9IHJlcy5zdGF0dXNDb2RlXG5cbiAgLy8gR0VUIG9yIEhFQUQgZm9yIHdlYWsgZnJlc2huZXNzIHZhbGlkYXRpb24gb25seVxuICBpZiAoJ0dFVCcgIT09IG1ldGhvZCAmJiAnSEVBRCcgIT09IG1ldGhvZCkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIDJ4eCBvciAzMDQgYXMgcGVyIHJmYzI2MTYgMTQuMjZcbiAgaWYgKChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCkgfHwgMzA0ID09PSBzdGF0dXMpIHtcbiAgICByZXR1cm4gZnJlc2godGhpcy5oZWFkZXJzLCB7XG4gICAgICAnZXRhZyc6IHJlcy5nZXQoJ0VUYWcnKSxcbiAgICAgICdsYXN0LW1vZGlmaWVkJzogcmVzLmdldCgnTGFzdC1Nb2RpZmllZCcpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn0pO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZXF1ZXN0IGlzIHN0YWxlLCBha2FcbiAqIFwiTGFzdC1Nb2RpZmllZFwiIGFuZCAvIG9yIHRoZSBcIkVUYWdcIiBmb3IgdGhlXG4gKiByZXNvdXJjZSBoYXMgY2hhbmdlZC5cbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHB1YmxpY1xuICovXG5cbmRlZmluZUdldHRlcihyZXEsICdzdGFsZScsIGZ1bmN0aW9uIHN0YWxlKCl7XG4gIHJldHVybiAhdGhpcy5mcmVzaDtcbn0pO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZXF1ZXN0IHdhcyBhbiBfWE1MSHR0cFJlcXVlc3RfLlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAcHVibGljXG4gKi9cblxuZGVmaW5lR2V0dGVyKHJlcSwgJ3hocicsIGZ1bmN0aW9uIHhocigpe1xuICB2YXIgdmFsID0gdGhpcy5nZXQoJ1gtUmVxdWVzdGVkLVdpdGgnKSB8fCAnJztcbiAgcmV0dXJuIHZhbC50b0xvd2VyQ2FzZSgpID09PSAneG1saHR0cHJlcXVlc3QnO1xufSk7XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIGdldHRlciBvbiBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lR2V0dGVyKG9iaiwgbmFtZSwgZ2V0dGVyKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG5hbWUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGdldHRlclxuICB9KTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9leHByZXNzL2xpYi9yZXF1ZXN0LmpzXG4vLyBtb2R1bGUgaWQgPSAxNzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBhY2NlcHRzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgTmVnb3RpYXRvciA9IHJlcXVpcmUoJ25lZ290aWF0b3InKVxudmFyIG1pbWUgPSByZXF1aXJlKCdtaW1lLXR5cGVzJylcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFjY2VwdHNcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgQWNjZXB0cyBvYmplY3QgZm9yIHRoZSBnaXZlbiByZXEuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHJlcVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIEFjY2VwdHMgKHJlcSkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWNjZXB0cykpIHtcbiAgICByZXR1cm4gbmV3IEFjY2VwdHMocmVxKVxuICB9XG5cbiAgdGhpcy5oZWFkZXJzID0gcmVxLmhlYWRlcnNcbiAgdGhpcy5uZWdvdGlhdG9yID0gbmV3IE5lZ290aWF0b3IocmVxKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBgdHlwZShzKWAgaXMgYWNjZXB0YWJsZSwgcmV0dXJuaW5nXG4gKiB0aGUgYmVzdCBtYXRjaCB3aGVuIHRydWUsIG90aGVyd2lzZSBgdW5kZWZpbmVkYCwgaW4gd2hpY2hcbiAqIGNhc2UgeW91IHNob3VsZCByZXNwb25kIHdpdGggNDA2IFwiTm90IEFjY2VwdGFibGVcIi5cbiAqXG4gKiBUaGUgYHR5cGVgIHZhbHVlIG1heSBiZSBhIHNpbmdsZSBtaW1lIHR5cGUgc3RyaW5nXG4gKiBzdWNoIGFzIFwiYXBwbGljYXRpb24vanNvblwiLCB0aGUgZXh0ZW5zaW9uIG5hbWVcbiAqIHN1Y2ggYXMgXCJqc29uXCIgb3IgYW4gYXJyYXkgYFtcImpzb25cIiwgXCJodG1sXCIsIFwidGV4dC9wbGFpblwiXWAuIFdoZW4gYSBsaXN0XG4gKiBvciBhcnJheSBpcyBnaXZlbiB0aGUgX2Jlc3RfIG1hdGNoLCBpZiBhbnkgaXMgcmV0dXJuZWQuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIC8vIEFjY2VwdDogdGV4dC9odG1sXG4gKiAgICAgdGhpcy50eXBlcygnaHRtbCcpO1xuICogICAgIC8vID0+IFwiaHRtbFwiXG4gKlxuICogICAgIC8vIEFjY2VwdDogdGV4dC8qLCBhcHBsaWNhdGlvbi9qc29uXG4gKiAgICAgdGhpcy50eXBlcygnaHRtbCcpO1xuICogICAgIC8vID0+IFwiaHRtbFwiXG4gKiAgICAgdGhpcy50eXBlcygndGV4dC9odG1sJyk7XG4gKiAgICAgLy8gPT4gXCJ0ZXh0L2h0bWxcIlxuICogICAgIHRoaXMudHlwZXMoJ2pzb24nLCAndGV4dCcpO1xuICogICAgIC8vID0+IFwianNvblwiXG4gKiAgICAgdGhpcy50eXBlcygnYXBwbGljYXRpb24vanNvbicpO1xuICogICAgIC8vID0+IFwiYXBwbGljYXRpb24vanNvblwiXG4gKlxuICogICAgIC8vIEFjY2VwdDogdGV4dC8qLCBhcHBsaWNhdGlvbi9qc29uXG4gKiAgICAgdGhpcy50eXBlcygnaW1hZ2UvcG5nJyk7XG4gKiAgICAgdGhpcy50eXBlcygncG5nJyk7XG4gKiAgICAgLy8gPT4gdW5kZWZpbmVkXG4gKlxuICogICAgIC8vIEFjY2VwdDogdGV4dC8qO3E9LjUsIGFwcGxpY2F0aW9uL2pzb25cbiAqICAgICB0aGlzLnR5cGVzKFsnaHRtbCcsICdqc29uJ10pO1xuICogICAgIHRoaXMudHlwZXMoJ2h0bWwnLCAnanNvbicpO1xuICogICAgIC8vID0+IFwianNvblwiXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHR5cGVzLi4uXG4gKiBAcmV0dXJuIHtTdHJpbmd8QXJyYXl8Qm9vbGVhbn1cbiAqIEBwdWJsaWNcbiAqL1xuXG5BY2NlcHRzLnByb3RvdHlwZS50eXBlID1cbkFjY2VwdHMucHJvdG90eXBlLnR5cGVzID0gZnVuY3Rpb24gKHR5cGVzXykge1xuICB2YXIgdHlwZXMgPSB0eXBlc19cblxuICAvLyBzdXBwb3J0IGZsYXR0ZW5lZCBhcmd1bWVudHNcbiAgaWYgKHR5cGVzICYmICFBcnJheS5pc0FycmF5KHR5cGVzKSkge1xuICAgIHR5cGVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdHlwZXNbaV0gPSBhcmd1bWVudHNbaV1cbiAgICB9XG4gIH1cblxuICAvLyBubyB0eXBlcywgcmV0dXJuIGFsbCByZXF1ZXN0ZWQgdHlwZXNcbiAgaWYgKCF0eXBlcyB8fCB0eXBlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdGhpcy5uZWdvdGlhdG9yLm1lZGlhVHlwZXMoKVxuICB9XG5cbiAgLy8gbm8gYWNjZXB0IGhlYWRlciwgcmV0dXJuIGZpcnN0IGdpdmVuIHR5cGVcbiAgaWYgKCF0aGlzLmhlYWRlcnMuYWNjZXB0KSB7XG4gICAgcmV0dXJuIHR5cGVzWzBdXG4gIH1cblxuICB2YXIgbWltZXMgPSB0eXBlcy5tYXAoZXh0VG9NaW1lKVxuICB2YXIgYWNjZXB0cyA9IHRoaXMubmVnb3RpYXRvci5tZWRpYVR5cGVzKG1pbWVzLmZpbHRlcih2YWxpZE1pbWUpKVxuICB2YXIgZmlyc3QgPSBhY2NlcHRzWzBdXG5cbiAgcmV0dXJuIGZpcnN0XG4gICAgPyB0eXBlc1ttaW1lcy5pbmRleE9mKGZpcnN0KV1cbiAgICA6IGZhbHNlXG59XG5cbi8qKlxuICogUmV0dXJuIGFjY2VwdGVkIGVuY29kaW5ncyBvciBiZXN0IGZpdCBiYXNlZCBvbiBgZW5jb2RpbmdzYC5cbiAqXG4gKiBHaXZlbiBgQWNjZXB0LUVuY29kaW5nOiBnemlwLCBkZWZsYXRlYFxuICogYW4gYXJyYXkgc29ydGVkIGJ5IHF1YWxpdHkgaXMgcmV0dXJuZWQ6XG4gKlxuICogICAgIFsnZ3ppcCcsICdkZWZsYXRlJ11cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gZW5jb2RpbmdzLi4uXG4gKiBAcmV0dXJuIHtTdHJpbmd8QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cblxuQWNjZXB0cy5wcm90b3R5cGUuZW5jb2RpbmcgPVxuQWNjZXB0cy5wcm90b3R5cGUuZW5jb2RpbmdzID0gZnVuY3Rpb24gKGVuY29kaW5nc18pIHtcbiAgdmFyIGVuY29kaW5ncyA9IGVuY29kaW5nc19cblxuICAvLyBzdXBwb3J0IGZsYXR0ZW5lZCBhcmd1bWVudHNcbiAgaWYgKGVuY29kaW5ncyAmJiAhQXJyYXkuaXNBcnJheShlbmNvZGluZ3MpKSB7XG4gICAgZW5jb2RpbmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmNvZGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVuY29kaW5nc1tpXSA9IGFyZ3VtZW50c1tpXVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vIGVuY29kaW5ncywgcmV0dXJuIGFsbCByZXF1ZXN0ZWQgZW5jb2RpbmdzXG4gIGlmICghZW5jb2RpbmdzIHx8IGVuY29kaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdGhpcy5uZWdvdGlhdG9yLmVuY29kaW5ncygpXG4gIH1cblxuICByZXR1cm4gdGhpcy5uZWdvdGlhdG9yLmVuY29kaW5ncyhlbmNvZGluZ3MpWzBdIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUmV0dXJuIGFjY2VwdGVkIGNoYXJzZXRzIG9yIGJlc3QgZml0IGJhc2VkIG9uIGBjaGFyc2V0c2AuXG4gKlxuICogR2l2ZW4gYEFjY2VwdC1DaGFyc2V0OiB1dGYtOCwgaXNvLTg4NTktMTtxPTAuMiwgdXRmLTc7cT0wLjVgXG4gKiBhbiBhcnJheSBzb3J0ZWQgYnkgcXVhbGl0eSBpcyByZXR1cm5lZDpcbiAqXG4gKiAgICAgWyd1dGYtOCcsICd1dGYtNycsICdpc28tODg1OS0xJ11cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gY2hhcnNldHMuLi5cbiAqIEByZXR1cm4ge1N0cmluZ3xBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuXG5BY2NlcHRzLnByb3RvdHlwZS5jaGFyc2V0ID1cbkFjY2VwdHMucHJvdG90eXBlLmNoYXJzZXRzID0gZnVuY3Rpb24gKGNoYXJzZXRzXykge1xuICB2YXIgY2hhcnNldHMgPSBjaGFyc2V0c19cblxuICAvLyBzdXBwb3J0IGZsYXR0ZW5lZCBhcmd1bWVudHNcbiAgaWYgKGNoYXJzZXRzICYmICFBcnJheS5pc0FycmF5KGNoYXJzZXRzKSkge1xuICAgIGNoYXJzZXRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFyc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNldHNbaV0gPSBhcmd1bWVudHNbaV1cbiAgICB9XG4gIH1cblxuICAvLyBubyBjaGFyc2V0cywgcmV0dXJuIGFsbCByZXF1ZXN0ZWQgY2hhcnNldHNcbiAgaWYgKCFjaGFyc2V0cyB8fCBjaGFyc2V0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdGhpcy5uZWdvdGlhdG9yLmNoYXJzZXRzKClcbiAgfVxuXG4gIHJldHVybiB0aGlzLm5lZ290aWF0b3IuY2hhcnNldHMoY2hhcnNldHMpWzBdIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUmV0dXJuIGFjY2VwdGVkIGxhbmd1YWdlcyBvciBiZXN0IGZpdCBiYXNlZCBvbiBgbGFuZ3NgLlxuICpcbiAqIEdpdmVuIGBBY2NlcHQtTGFuZ3VhZ2U6IGVuO3E9MC44LCBlcywgcHRgXG4gKiBhbiBhcnJheSBzb3J0ZWQgYnkgcXVhbGl0eSBpcyByZXR1cm5lZDpcbiAqXG4gKiAgICAgWydlcycsICdwdCcsICdlbiddXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGxhbmdzLi4uXG4gKiBAcmV0dXJuIHtBcnJheXxTdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cblxuQWNjZXB0cy5wcm90b3R5cGUubGFuZyA9XG5BY2NlcHRzLnByb3RvdHlwZS5sYW5ncyA9XG5BY2NlcHRzLnByb3RvdHlwZS5sYW5ndWFnZSA9XG5BY2NlcHRzLnByb3RvdHlwZS5sYW5ndWFnZXMgPSBmdW5jdGlvbiAobGFuZ3VhZ2VzXykge1xuICB2YXIgbGFuZ3VhZ2VzID0gbGFuZ3VhZ2VzX1xuXG4gIC8vIHN1cHBvcnQgZmxhdHRlbmVkIGFyZ3VtZW50c1xuICBpZiAobGFuZ3VhZ2VzICYmICFBcnJheS5pc0FycmF5KGxhbmd1YWdlcykpIHtcbiAgICBsYW5ndWFnZXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhbmd1YWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGFuZ3VhZ2VzW2ldID0gYXJndW1lbnRzW2ldXG4gICAgfVxuICB9XG5cbiAgLy8gbm8gbGFuZ3VhZ2VzLCByZXR1cm4gYWxsIHJlcXVlc3RlZCBsYW5ndWFnZXNcbiAgaWYgKCFsYW5ndWFnZXMgfHwgbGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0aGlzLm5lZ290aWF0b3IubGFuZ3VhZ2VzKClcbiAgfVxuXG4gIHJldHVybiB0aGlzLm5lZ290aWF0b3IubGFuZ3VhZ2VzKGxhbmd1YWdlcylbMF0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGV4dG5hbWVzIHRvIG1pbWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZXh0VG9NaW1lICh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmluZGV4T2YoJy8nKSA9PT0gLTFcbiAgICA/IG1pbWUubG9va3VwKHR5cGUpXG4gICAgOiB0eXBlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgbWltZSBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB2YWxpZE1pbWUgKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJ1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2FjY2VwdHMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE3NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIG5lZ290aWF0b3JcbiAqIENvcHlyaWdodChjKSAyMDEyIEZlZGVyaWNvIFJvbWVyb1xuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBJc2FhYyBaLiBTY2hsdWV0ZXJcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FjaGVkIGxvYWRlZCBzdWJtb2R1bGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgbW9kdWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBOZWdvdGlhdG9yO1xubW9kdWxlLmV4cG9ydHMuTmVnb3RpYXRvciA9IE5lZ290aWF0b3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgTmVnb3RpYXRvciBpbnN0YW5jZSBmcm9tIGEgcmVxdWVzdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXF1ZXN0XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gTmVnb3RpYXRvcihyZXF1ZXN0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOZWdvdGlhdG9yKSkge1xuICAgIHJldHVybiBuZXcgTmVnb3RpYXRvcihyZXF1ZXN0KTtcbiAgfVxuXG4gIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG59XG5cbk5lZ290aWF0b3IucHJvdG90eXBlLmNoYXJzZXQgPSBmdW5jdGlvbiBjaGFyc2V0KGF2YWlsYWJsZSkge1xuICB2YXIgc2V0ID0gdGhpcy5jaGFyc2V0cyhhdmFpbGFibGUpO1xuICByZXR1cm4gc2V0ICYmIHNldFswXTtcbn07XG5cbk5lZ290aWF0b3IucHJvdG90eXBlLmNoYXJzZXRzID0gZnVuY3Rpb24gY2hhcnNldHMoYXZhaWxhYmxlKSB7XG4gIHZhciBwcmVmZXJyZWRDaGFyc2V0cyA9IGxvYWRNb2R1bGUoJ2NoYXJzZXQnKS5wcmVmZXJyZWRDaGFyc2V0cztcbiAgcmV0dXJuIHByZWZlcnJlZENoYXJzZXRzKHRoaXMucmVxdWVzdC5oZWFkZXJzWydhY2NlcHQtY2hhcnNldCddLCBhdmFpbGFibGUpO1xufTtcblxuTmVnb3RpYXRvci5wcm90b3R5cGUuZW5jb2RpbmcgPSBmdW5jdGlvbiBlbmNvZGluZyhhdmFpbGFibGUpIHtcbiAgdmFyIHNldCA9IHRoaXMuZW5jb2RpbmdzKGF2YWlsYWJsZSk7XG4gIHJldHVybiBzZXQgJiYgc2V0WzBdO1xufTtcblxuTmVnb3RpYXRvci5wcm90b3R5cGUuZW5jb2RpbmdzID0gZnVuY3Rpb24gZW5jb2RpbmdzKGF2YWlsYWJsZSkge1xuICB2YXIgcHJlZmVycmVkRW5jb2RpbmdzID0gbG9hZE1vZHVsZSgnZW5jb2RpbmcnKS5wcmVmZXJyZWRFbmNvZGluZ3M7XG4gIHJldHVybiBwcmVmZXJyZWRFbmNvZGluZ3ModGhpcy5yZXF1ZXN0LmhlYWRlcnNbJ2FjY2VwdC1lbmNvZGluZyddLCBhdmFpbGFibGUpO1xufTtcblxuTmVnb3RpYXRvci5wcm90b3R5cGUubGFuZ3VhZ2UgPSBmdW5jdGlvbiBsYW5ndWFnZShhdmFpbGFibGUpIHtcbiAgdmFyIHNldCA9IHRoaXMubGFuZ3VhZ2VzKGF2YWlsYWJsZSk7XG4gIHJldHVybiBzZXQgJiYgc2V0WzBdO1xufTtcblxuTmVnb3RpYXRvci5wcm90b3R5cGUubGFuZ3VhZ2VzID0gZnVuY3Rpb24gbGFuZ3VhZ2VzKGF2YWlsYWJsZSkge1xuICB2YXIgcHJlZmVycmVkTGFuZ3VhZ2VzID0gbG9hZE1vZHVsZSgnbGFuZ3VhZ2UnKS5wcmVmZXJyZWRMYW5ndWFnZXM7XG4gIHJldHVybiBwcmVmZXJyZWRMYW5ndWFnZXModGhpcy5yZXF1ZXN0LmhlYWRlcnNbJ2FjY2VwdC1sYW5ndWFnZSddLCBhdmFpbGFibGUpO1xufTtcblxuTmVnb3RpYXRvci5wcm90b3R5cGUubWVkaWFUeXBlID0gZnVuY3Rpb24gbWVkaWFUeXBlKGF2YWlsYWJsZSkge1xuICB2YXIgc2V0ID0gdGhpcy5tZWRpYVR5cGVzKGF2YWlsYWJsZSk7XG4gIHJldHVybiBzZXQgJiYgc2V0WzBdO1xufTtcblxuTmVnb3RpYXRvci5wcm90b3R5cGUubWVkaWFUeXBlcyA9IGZ1bmN0aW9uIG1lZGlhVHlwZXMoYXZhaWxhYmxlKSB7XG4gIHZhciBwcmVmZXJyZWRNZWRpYVR5cGVzID0gbG9hZE1vZHVsZSgnbWVkaWFUeXBlJykucHJlZmVycmVkTWVkaWFUeXBlcztcbiAgcmV0dXJuIHByZWZlcnJlZE1lZGlhVHlwZXModGhpcy5yZXF1ZXN0LmhlYWRlcnMuYWNjZXB0LCBhdmFpbGFibGUpO1xufTtcblxuLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbk5lZ290aWF0b3IucHJvdG90eXBlLnByZWZlcnJlZENoYXJzZXQgPSBOZWdvdGlhdG9yLnByb3RvdHlwZS5jaGFyc2V0O1xuTmVnb3RpYXRvci5wcm90b3R5cGUucHJlZmVycmVkQ2hhcnNldHMgPSBOZWdvdGlhdG9yLnByb3RvdHlwZS5jaGFyc2V0cztcbk5lZ290aWF0b3IucHJvdG90eXBlLnByZWZlcnJlZEVuY29kaW5nID0gTmVnb3RpYXRvci5wcm90b3R5cGUuZW5jb2Rpbmc7XG5OZWdvdGlhdG9yLnByb3RvdHlwZS5wcmVmZXJyZWRFbmNvZGluZ3MgPSBOZWdvdGlhdG9yLnByb3RvdHlwZS5lbmNvZGluZ3M7XG5OZWdvdGlhdG9yLnByb3RvdHlwZS5wcmVmZXJyZWRMYW5ndWFnZSA9IE5lZ290aWF0b3IucHJvdG90eXBlLmxhbmd1YWdlO1xuTmVnb3RpYXRvci5wcm90b3R5cGUucHJlZmVycmVkTGFuZ3VhZ2VzID0gTmVnb3RpYXRvci5wcm90b3R5cGUubGFuZ3VhZ2VzO1xuTmVnb3RpYXRvci5wcm90b3R5cGUucHJlZmVycmVkTWVkaWFUeXBlID0gTmVnb3RpYXRvci5wcm90b3R5cGUubWVkaWFUeXBlO1xuTmVnb3RpYXRvci5wcm90b3R5cGUucHJlZmVycmVkTWVkaWFUeXBlcyA9IE5lZ290aWF0b3IucHJvdG90eXBlLm1lZGlhVHlwZXM7XG5cbi8qKlxuICogTG9hZCB0aGUgZ2l2ZW4gbW9kdWxlLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkTW9kdWxlKG1vZHVsZU5hbWUpIHtcbiAgdmFyIG1vZHVsZSA9IG1vZHVsZXNbbW9kdWxlTmFtZV07XG5cbiAgaWYgKG1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG1vZHVsZTtcbiAgfVxuXG4gIC8vIFRoaXMgdXNlcyBhIHN3aXRjaCBmb3Igc3RhdGljIHJlcXVpcmUgYW5hbHlzaXNcbiAgc3dpdGNoIChtb2R1bGVOYW1lKSB7XG4gICAgY2FzZSAnY2hhcnNldCc6XG4gICAgICBtb2R1bGUgPSByZXF1aXJlKCcuL2xpYi9jaGFyc2V0Jyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmNvZGluZyc6XG4gICAgICBtb2R1bGUgPSByZXF1aXJlKCcuL2xpYi9lbmNvZGluZycpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGFuZ3VhZ2UnOlxuICAgICAgbW9kdWxlID0gcmVxdWlyZSgnLi9saWIvbGFuZ3VhZ2UnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ21lZGlhVHlwZSc6XG4gICAgICBtb2R1bGUgPSByZXF1aXJlKCcuL2xpYi9tZWRpYVR5cGUnKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIG1vZHVsZSBcXCcnICsgbW9kdWxlTmFtZSArICdcXCcnKTtcbiAgfVxuXG4gIC8vIFN0b3JlIHRvIHByZXZlbnQgaW52b2tpbmcgcmVxdWlyZSgpXG4gIG1vZHVsZXNbbW9kdWxlTmFtZV0gPSBtb2R1bGU7XG5cbiAgcmV0dXJuIG1vZHVsZTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9uZWdvdGlhdG9yL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxNzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBuZWdvdGlhdG9yXG4gKiBDb3B5cmlnaHQoYykgMjAxMiBJc2FhYyBaLiBTY2hsdWV0ZXJcbiAqIENvcHlyaWdodChjKSAyMDE0IEZlZGVyaWNvIFJvbWVyb1xuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcHJlZmVycmVkQ2hhcnNldHM7XG5tb2R1bGUuZXhwb3J0cy5wcmVmZXJyZWRDaGFyc2V0cyA9IHByZWZlcnJlZENoYXJzZXRzO1xuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBzaW1wbGVDaGFyc2V0UmVnRXhwID0gL15cXHMqKFteXFxzO10rKVxccyooPzo7KC4qKSk/JC87XG5cbi8qKlxuICogUGFyc2UgdGhlIEFjY2VwdC1DaGFyc2V0IGhlYWRlci5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2VBY2NlcHRDaGFyc2V0KGFjY2VwdCkge1xuICB2YXIgYWNjZXB0cyA9IGFjY2VwdC5zcGxpdCgnLCcpO1xuXG4gIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IGFjY2VwdHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hhcnNldCA9IHBhcnNlQ2hhcnNldChhY2NlcHRzW2ldLnRyaW0oKSwgaSk7XG5cbiAgICBpZiAoY2hhcnNldCkge1xuICAgICAgYWNjZXB0c1tqKytdID0gY2hhcnNldDtcbiAgICB9XG4gIH1cblxuICAvLyB0cmltIGFjY2VwdHNcbiAgYWNjZXB0cy5sZW5ndGggPSBqO1xuXG4gIHJldHVybiBhY2NlcHRzO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgY2hhcnNldCBmcm9tIHRoZSBBY2NlcHQtQ2hhcnNldCBoZWFkZXIuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlQ2hhcnNldChzdHIsIGkpIHtcbiAgdmFyIG1hdGNoID0gc2ltcGxlQ2hhcnNldFJlZ0V4cC5leGVjKHN0cik7XG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuXG4gIHZhciBjaGFyc2V0ID0gbWF0Y2hbMV07XG4gIHZhciBxID0gMTtcbiAgaWYgKG1hdGNoWzJdKSB7XG4gICAgdmFyIHBhcmFtcyA9IG1hdGNoWzJdLnNwbGl0KCc7JylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgIHZhciBwID0gcGFyYW1zW2ldLnRyaW0oKS5zcGxpdCgnPScpO1xuICAgICAgaWYgKHBbMF0gPT09ICdxJykge1xuICAgICAgICBxID0gcGFyc2VGbG9hdChwWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjaGFyc2V0OiBjaGFyc2V0LFxuICAgIHE6IHEsXG4gICAgaTogaVxuICB9O1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJpb3JpdHkgb2YgYSBjaGFyc2V0LlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRDaGFyc2V0UHJpb3JpdHkoY2hhcnNldCwgYWNjZXB0ZWQsIGluZGV4KSB7XG4gIHZhciBwcmlvcml0eSA9IHtvOiAtMSwgcTogMCwgczogMH07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2NlcHRlZC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzcGVjID0gc3BlY2lmeShjaGFyc2V0LCBhY2NlcHRlZFtpXSwgaW5kZXgpO1xuXG4gICAgaWYgKHNwZWMgJiYgKHByaW9yaXR5LnMgLSBzcGVjLnMgfHwgcHJpb3JpdHkucSAtIHNwZWMucSB8fCBwcmlvcml0eS5vIC0gc3BlYy5vKSA8IDApIHtcbiAgICAgIHByaW9yaXR5ID0gc3BlYztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJpb3JpdHk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBzcGVjaWZpY2l0eSBvZiB0aGUgY2hhcnNldC5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3BlY2lmeShjaGFyc2V0LCBzcGVjLCBpbmRleCkge1xuICB2YXIgcyA9IDA7XG4gIGlmKHNwZWMuY2hhcnNldC50b0xvd2VyQ2FzZSgpID09PSBjaGFyc2V0LnRvTG93ZXJDYXNlKCkpe1xuICAgIHMgfD0gMTtcbiAgfSBlbHNlIGlmIChzcGVjLmNoYXJzZXQgIT09ICcqJyApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBpbmRleCxcbiAgICBvOiBzcGVjLmksXG4gICAgcTogc3BlYy5xLFxuICAgIHM6IHNcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZmVycmVkIGNoYXJzZXRzIGZyb20gYW4gQWNjZXB0LUNoYXJzZXQgaGVhZGVyLlxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHByZWZlcnJlZENoYXJzZXRzKGFjY2VwdCwgcHJvdmlkZWQpIHtcbiAgLy8gUkZDIDI2MTYgc2VjIDE0LjI6IG5vIGhlYWRlciA9ICpcbiAgdmFyIGFjY2VwdHMgPSBwYXJzZUFjY2VwdENoYXJzZXQoYWNjZXB0ID09PSB1bmRlZmluZWQgPyAnKicgOiBhY2NlcHQgfHwgJycpO1xuXG4gIGlmICghcHJvdmlkZWQpIHtcbiAgICAvLyBzb3J0ZWQgbGlzdCBvZiBhbGwgY2hhcnNldHNcbiAgICByZXR1cm4gYWNjZXB0c1xuICAgICAgLmZpbHRlcihpc1F1YWxpdHkpXG4gICAgICAuc29ydChjb21wYXJlU3BlY3MpXG4gICAgICAubWFwKGdldEZ1bGxDaGFyc2V0KTtcbiAgfVxuXG4gIHZhciBwcmlvcml0aWVzID0gcHJvdmlkZWQubWFwKGZ1bmN0aW9uIGdldFByaW9yaXR5KHR5cGUsIGluZGV4KSB7XG4gICAgcmV0dXJuIGdldENoYXJzZXRQcmlvcml0eSh0eXBlLCBhY2NlcHRzLCBpbmRleCk7XG4gIH0pO1xuXG4gIC8vIHNvcnRlZCBsaXN0IG9mIGFjY2VwdGVkIGNoYXJzZXRzXG4gIHJldHVybiBwcmlvcml0aWVzLmZpbHRlcihpc1F1YWxpdHkpLnNvcnQoY29tcGFyZVNwZWNzKS5tYXAoZnVuY3Rpb24gZ2V0Q2hhcnNldChwcmlvcml0eSkge1xuICAgIHJldHVybiBwcm92aWRlZFtwcmlvcml0aWVzLmluZGV4T2YocHJpb3JpdHkpXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gc3BlY3MuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbXBhcmVTcGVjcyhhLCBiKSB7XG4gIHJldHVybiAoYi5xIC0gYS5xKSB8fCAoYi5zIC0gYS5zKSB8fCAoYS5vIC0gYi5vKSB8fCAoYS5pIC0gYi5pKSB8fCAwO1xufVxuXG4vKipcbiAqIEdldCBmdWxsIGNoYXJzZXQgc3RyaW5nLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRGdWxsQ2hhcnNldChzcGVjKSB7XG4gIHJldHVybiBzcGVjLmNoYXJzZXQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzcGVjIGhhcyBhbnkgcXVhbGl0eS5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaXNRdWFsaXR5KHNwZWMpIHtcbiAgcmV0dXJuIHNwZWMucSA+IDA7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvbmVnb3RpYXRvci9saWIvY2hhcnNldC5qc1xuLy8gbW9kdWxlIGlkID0gMTc3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogbmVnb3RpYXRvclxuICogQ29weXJpZ2h0KGMpIDIwMTIgSXNhYWMgWi4gU2NobHVldGVyXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBGZWRlcmljbyBSb21lcm9cbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHByZWZlcnJlZEVuY29kaW5ncztcbm1vZHVsZS5leHBvcnRzLnByZWZlcnJlZEVuY29kaW5ncyA9IHByZWZlcnJlZEVuY29kaW5ncztcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgc2ltcGxlRW5jb2RpbmdSZWdFeHAgPSAvXlxccyooW15cXHM7XSspXFxzKig/OjsoLiopKT8kLztcblxuLyoqXG4gKiBQYXJzZSB0aGUgQWNjZXB0LUVuY29kaW5nIGhlYWRlci5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2VBY2NlcHRFbmNvZGluZyhhY2NlcHQpIHtcbiAgdmFyIGFjY2VwdHMgPSBhY2NlcHQuc3BsaXQoJywnKTtcbiAgdmFyIGhhc0lkZW50aXR5ID0gZmFsc2U7XG4gIHZhciBtaW5RdWFsaXR5ID0gMTtcblxuICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCBhY2NlcHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVuY29kaW5nID0gcGFyc2VFbmNvZGluZyhhY2NlcHRzW2ldLnRyaW0oKSwgaSk7XG5cbiAgICBpZiAoZW5jb2RpbmcpIHtcbiAgICAgIGFjY2VwdHNbaisrXSA9IGVuY29kaW5nO1xuICAgICAgaGFzSWRlbnRpdHkgPSBoYXNJZGVudGl0eSB8fCBzcGVjaWZ5KCdpZGVudGl0eScsIGVuY29kaW5nKTtcbiAgICAgIG1pblF1YWxpdHkgPSBNYXRoLm1pbihtaW5RdWFsaXR5LCBlbmNvZGluZy5xIHx8IDEpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaGFzSWRlbnRpdHkpIHtcbiAgICAvKlxuICAgICAqIElmIGlkZW50aXR5IGRvZXNuJ3QgZXhwbGljaXRseSBhcHBlYXIgaW4gdGhlIGFjY2VwdC1lbmNvZGluZyBoZWFkZXIsXG4gICAgICogaXQncyBhZGRlZCB0byB0aGUgbGlzdCBvZiBhY2NlcHRhYmxlIGVuY29kaW5nIHdpdGggdGhlIGxvd2VzdCBxXG4gICAgICovXG4gICAgYWNjZXB0c1tqKytdID0ge1xuICAgICAgZW5jb2Rpbmc6ICdpZGVudGl0eScsXG4gICAgICBxOiBtaW5RdWFsaXR5LFxuICAgICAgaTogaVxuICAgIH07XG4gIH1cblxuICAvLyB0cmltIGFjY2VwdHNcbiAgYWNjZXB0cy5sZW5ndGggPSBqO1xuXG4gIHJldHVybiBhY2NlcHRzO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIGVuY29kaW5nIGZyb20gdGhlIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlRW5jb2Rpbmcoc3RyLCBpKSB7XG4gIHZhciBtYXRjaCA9IHNpbXBsZUVuY29kaW5nUmVnRXhwLmV4ZWMoc3RyKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIGVuY29kaW5nID0gbWF0Y2hbMV07XG4gIHZhciBxID0gMTtcbiAgaWYgKG1hdGNoWzJdKSB7XG4gICAgdmFyIHBhcmFtcyA9IG1hdGNoWzJdLnNwbGl0KCc7Jyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpICsrKSB7XG4gICAgICB2YXIgcCA9IHBhcmFtc1tpXS50cmltKCkuc3BsaXQoJz0nKTtcbiAgICAgIGlmIChwWzBdID09PSAncScpIHtcbiAgICAgICAgcSA9IHBhcnNlRmxvYXQocFsxXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW5jb2Rpbmc6IGVuY29kaW5nLFxuICAgIHE6IHEsXG4gICAgaTogaVxuICB9O1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJpb3JpdHkgb2YgYW4gZW5jb2RpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldEVuY29kaW5nUHJpb3JpdHkoZW5jb2RpbmcsIGFjY2VwdGVkLCBpbmRleCkge1xuICB2YXIgcHJpb3JpdHkgPSB7bzogLTEsIHE6IDAsIHM6IDB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWNjZXB0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc3BlYyA9IHNwZWNpZnkoZW5jb2RpbmcsIGFjY2VwdGVkW2ldLCBpbmRleCk7XG5cbiAgICBpZiAoc3BlYyAmJiAocHJpb3JpdHkucyAtIHNwZWMucyB8fCBwcmlvcml0eS5xIC0gc3BlYy5xIHx8IHByaW9yaXR5Lm8gLSBzcGVjLm8pIDwgMCkge1xuICAgICAgcHJpb3JpdHkgPSBzcGVjO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmlvcml0eTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHNwZWNpZmljaXR5IG9mIHRoZSBlbmNvZGluZy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3BlY2lmeShlbmNvZGluZywgc3BlYywgaW5kZXgpIHtcbiAgdmFyIHMgPSAwO1xuICBpZihzcGVjLmVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpe1xuICAgIHMgfD0gMTtcbiAgfSBlbHNlIGlmIChzcGVjLmVuY29kaW5nICE9PSAnKicgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaTogaW5kZXgsXG4gICAgbzogc3BlYy5pLFxuICAgIHE6IHNwZWMucSxcbiAgICBzOiBzXG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBwcmVmZXJyZWQgZW5jb2RpbmdzIGZyb20gYW4gQWNjZXB0LUVuY29kaW5nIGhlYWRlci5cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBwcmVmZXJyZWRFbmNvZGluZ3MoYWNjZXB0LCBwcm92aWRlZCkge1xuICB2YXIgYWNjZXB0cyA9IHBhcnNlQWNjZXB0RW5jb2RpbmcoYWNjZXB0IHx8ICcnKTtcblxuICBpZiAoIXByb3ZpZGVkKSB7XG4gICAgLy8gc29ydGVkIGxpc3Qgb2YgYWxsIGVuY29kaW5nc1xuICAgIHJldHVybiBhY2NlcHRzXG4gICAgICAuZmlsdGVyKGlzUXVhbGl0eSlcbiAgICAgIC5zb3J0KGNvbXBhcmVTcGVjcylcbiAgICAgIC5tYXAoZ2V0RnVsbEVuY29kaW5nKTtcbiAgfVxuXG4gIHZhciBwcmlvcml0aWVzID0gcHJvdmlkZWQubWFwKGZ1bmN0aW9uIGdldFByaW9yaXR5KHR5cGUsIGluZGV4KSB7XG4gICAgcmV0dXJuIGdldEVuY29kaW5nUHJpb3JpdHkodHlwZSwgYWNjZXB0cywgaW5kZXgpO1xuICB9KTtcblxuICAvLyBzb3J0ZWQgbGlzdCBvZiBhY2NlcHRlZCBlbmNvZGluZ3NcbiAgcmV0dXJuIHByaW9yaXRpZXMuZmlsdGVyKGlzUXVhbGl0eSkuc29ydChjb21wYXJlU3BlY3MpLm1hcChmdW5jdGlvbiBnZXRFbmNvZGluZyhwcmlvcml0eSkge1xuICAgIHJldHVybiBwcm92aWRlZFtwcmlvcml0aWVzLmluZGV4T2YocHJpb3JpdHkpXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gc3BlY3MuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbXBhcmVTcGVjcyhhLCBiKSB7XG4gIHJldHVybiAoYi5xIC0gYS5xKSB8fCAoYi5zIC0gYS5zKSB8fCAoYS5vIC0gYi5vKSB8fCAoYS5pIC0gYi5pKSB8fCAwO1xufVxuXG4vKipcbiAqIEdldCBmdWxsIGVuY29kaW5nIHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RnVsbEVuY29kaW5nKHNwZWMpIHtcbiAgcmV0dXJuIHNwZWMuZW5jb2Rpbmc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzcGVjIGhhcyBhbnkgcXVhbGl0eS5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaXNRdWFsaXR5KHNwZWMpIHtcbiAgcmV0dXJuIHNwZWMucSA+IDA7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvbmVnb3RpYXRvci9saWIvZW5jb2RpbmcuanNcbi8vIG1vZHVsZSBpZCA9IDE3OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIG5lZ290aWF0b3JcbiAqIENvcHlyaWdodChjKSAyMDEyIElzYWFjIFouIFNjaGx1ZXRlclxuICogQ29weXJpZ2h0KGMpIDIwMTQgRmVkZXJpY28gUm9tZXJvXG4gKiBDb3B5cmlnaHQoYykgMjAxNC0yMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBwcmVmZXJyZWRMYW5ndWFnZXM7XG5tb2R1bGUuZXhwb3J0cy5wcmVmZXJyZWRMYW5ndWFnZXMgPSBwcmVmZXJyZWRMYW5ndWFnZXM7XG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIHNpbXBsZUxhbmd1YWdlUmVnRXhwID0gL15cXHMqKFteXFxzXFwtO10rKSg/Oi0oW15cXHM7XSspKT9cXHMqKD86OyguKikpPyQvO1xuXG4vKipcbiAqIFBhcnNlIHRoZSBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZUFjY2VwdExhbmd1YWdlKGFjY2VwdCkge1xuICB2YXIgYWNjZXB0cyA9IGFjY2VwdC5zcGxpdCgnLCcpO1xuXG4gIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IGFjY2VwdHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGFuZ2F1Z2UgPSBwYXJzZUxhbmd1YWdlKGFjY2VwdHNbaV0udHJpbSgpLCBpKTtcblxuICAgIGlmIChsYW5nYXVnZSkge1xuICAgICAgYWNjZXB0c1tqKytdID0gbGFuZ2F1Z2U7XG4gICAgfVxuICB9XG5cbiAgLy8gdHJpbSBhY2NlcHRzXG4gIGFjY2VwdHMubGVuZ3RoID0gajtcblxuICByZXR1cm4gYWNjZXB0cztcbn1cblxuLyoqXG4gKiBQYXJzZSBhIGxhbmd1YWdlIGZyb20gdGhlIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlTGFuZ3VhZ2Uoc3RyLCBpKSB7XG4gIHZhciBtYXRjaCA9IHNpbXBsZUxhbmd1YWdlUmVnRXhwLmV4ZWMoc3RyKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHByZWZpeCA9IG1hdGNoWzFdLFxuICAgICAgc3VmZml4ID0gbWF0Y2hbMl0sXG4gICAgICBmdWxsID0gcHJlZml4O1xuXG4gIGlmIChzdWZmaXgpIGZ1bGwgKz0gXCItXCIgKyBzdWZmaXg7XG5cbiAgdmFyIHEgPSAxO1xuICBpZiAobWF0Y2hbM10pIHtcbiAgICB2YXIgcGFyYW1zID0gbWF0Y2hbM10uc3BsaXQoJzsnKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSArKykge1xuICAgICAgdmFyIHAgPSBwYXJhbXNbaV0uc3BsaXQoJz0nKTtcbiAgICAgIGlmIChwWzBdID09PSAncScpIHEgPSBwYXJzZUZsb2F0KHBbMV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJlZml4OiBwcmVmaXgsXG4gICAgc3VmZml4OiBzdWZmaXgsXG4gICAgcTogcSxcbiAgICBpOiBpLFxuICAgIGZ1bGw6IGZ1bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByaW9yaXR5IG9mIGEgbGFuZ3VhZ2UuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldExhbmd1YWdlUHJpb3JpdHkobGFuZ3VhZ2UsIGFjY2VwdGVkLCBpbmRleCkge1xuICB2YXIgcHJpb3JpdHkgPSB7bzogLTEsIHE6IDAsIHM6IDB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWNjZXB0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc3BlYyA9IHNwZWNpZnkobGFuZ3VhZ2UsIGFjY2VwdGVkW2ldLCBpbmRleCk7XG5cbiAgICBpZiAoc3BlYyAmJiAocHJpb3JpdHkucyAtIHNwZWMucyB8fCBwcmlvcml0eS5xIC0gc3BlYy5xIHx8IHByaW9yaXR5Lm8gLSBzcGVjLm8pIDwgMCkge1xuICAgICAgcHJpb3JpdHkgPSBzcGVjO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmlvcml0eTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHNwZWNpZmljaXR5IG9mIHRoZSBsYW5ndWFnZS5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3BlY2lmeShsYW5ndWFnZSwgc3BlYywgaW5kZXgpIHtcbiAgdmFyIHAgPSBwYXJzZUxhbmd1YWdlKGxhbmd1YWdlKVxuICBpZiAoIXApIHJldHVybiBudWxsO1xuICB2YXIgcyA9IDA7XG4gIGlmKHNwZWMuZnVsbC50b0xvd2VyQ2FzZSgpID09PSBwLmZ1bGwudG9Mb3dlckNhc2UoKSl7XG4gICAgcyB8PSA0O1xuICB9IGVsc2UgaWYgKHNwZWMucHJlZml4LnRvTG93ZXJDYXNlKCkgPT09IHAuZnVsbC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcyB8PSAyO1xuICB9IGVsc2UgaWYgKHNwZWMuZnVsbC50b0xvd2VyQ2FzZSgpID09PSBwLnByZWZpeC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcyB8PSAxO1xuICB9IGVsc2UgaWYgKHNwZWMuZnVsbCAhPT0gJyonICkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGk6IGluZGV4LFxuICAgIG86IHNwZWMuaSxcbiAgICBxOiBzcGVjLnEsXG4gICAgczogc1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgcHJlZmVycmVkIGxhbmd1YWdlcyBmcm9tIGFuIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIuXG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcHJlZmVycmVkTGFuZ3VhZ2VzKGFjY2VwdCwgcHJvdmlkZWQpIHtcbiAgLy8gUkZDIDI2MTYgc2VjIDE0LjQ6IG5vIGhlYWRlciA9ICpcbiAgdmFyIGFjY2VwdHMgPSBwYXJzZUFjY2VwdExhbmd1YWdlKGFjY2VwdCA9PT0gdW5kZWZpbmVkID8gJyonIDogYWNjZXB0IHx8ICcnKTtcblxuICBpZiAoIXByb3ZpZGVkKSB7XG4gICAgLy8gc29ydGVkIGxpc3Qgb2YgYWxsIGxhbmd1YWdlc1xuICAgIHJldHVybiBhY2NlcHRzXG4gICAgICAuZmlsdGVyKGlzUXVhbGl0eSlcbiAgICAgIC5zb3J0KGNvbXBhcmVTcGVjcylcbiAgICAgIC5tYXAoZ2V0RnVsbExhbmd1YWdlKTtcbiAgfVxuXG4gIHZhciBwcmlvcml0aWVzID0gcHJvdmlkZWQubWFwKGZ1bmN0aW9uIGdldFByaW9yaXR5KHR5cGUsIGluZGV4KSB7XG4gICAgcmV0dXJuIGdldExhbmd1YWdlUHJpb3JpdHkodHlwZSwgYWNjZXB0cywgaW5kZXgpO1xuICB9KTtcblxuICAvLyBzb3J0ZWQgbGlzdCBvZiBhY2NlcHRlZCBsYW5ndWFnZXNcbiAgcmV0dXJuIHByaW9yaXRpZXMuZmlsdGVyKGlzUXVhbGl0eSkuc29ydChjb21wYXJlU3BlY3MpLm1hcChmdW5jdGlvbiBnZXRMYW5ndWFnZShwcmlvcml0eSkge1xuICAgIHJldHVybiBwcm92aWRlZFtwcmlvcml0aWVzLmluZGV4T2YocHJpb3JpdHkpXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gc3BlY3MuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbXBhcmVTcGVjcyhhLCBiKSB7XG4gIHJldHVybiAoYi5xIC0gYS5xKSB8fCAoYi5zIC0gYS5zKSB8fCAoYS5vIC0gYi5vKSB8fCAoYS5pIC0gYi5pKSB8fCAwO1xufVxuXG4vKipcbiAqIEdldCBmdWxsIGxhbmd1YWdlIHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RnVsbExhbmd1YWdlKHNwZWMpIHtcbiAgcmV0dXJuIHNwZWMuZnVsbDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHNwZWMgaGFzIGFueSBxdWFsaXR5LlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc1F1YWxpdHkoc3BlYykge1xuICByZXR1cm4gc3BlYy5xID4gMDtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9uZWdvdGlhdG9yL2xpYi9sYW5ndWFnZS5qc1xuLy8gbW9kdWxlIGlkID0gMTc5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxuICogbmVnb3RpYXRvclxuICogQ29weXJpZ2h0KGMpIDIwMTIgSXNhYWMgWi4gU2NobHVldGVyXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBGZWRlcmljbyBSb21lcm9cbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHByZWZlcnJlZE1lZGlhVHlwZXM7XG5tb2R1bGUuZXhwb3J0cy5wcmVmZXJyZWRNZWRpYVR5cGVzID0gcHJlZmVycmVkTWVkaWFUeXBlcztcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgc2ltcGxlTWVkaWFUeXBlUmVnRXhwID0gL15cXHMqKFteXFxzXFwvO10rKVxcLyhbXjtcXHNdKylcXHMqKD86OyguKikpPyQvO1xuXG4vKipcbiAqIFBhcnNlIHRoZSBBY2NlcHQgaGVhZGVyLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZUFjY2VwdChhY2NlcHQpIHtcbiAgdmFyIGFjY2VwdHMgPSBzcGxpdE1lZGlhVHlwZXMoYWNjZXB0KTtcblxuICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCBhY2NlcHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1lZGlhVHlwZSA9IHBhcnNlTWVkaWFUeXBlKGFjY2VwdHNbaV0udHJpbSgpLCBpKTtcblxuICAgIGlmIChtZWRpYVR5cGUpIHtcbiAgICAgIGFjY2VwdHNbaisrXSA9IG1lZGlhVHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyB0cmltIGFjY2VwdHNcbiAgYWNjZXB0cy5sZW5ndGggPSBqO1xuXG4gIHJldHVybiBhY2NlcHRzO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgbWVkaWEgdHlwZSBmcm9tIHRoZSBBY2NlcHQgaGVhZGVyLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZU1lZGlhVHlwZShzdHIsIGkpIHtcbiAgdmFyIG1hdGNoID0gc2ltcGxlTWVkaWFUeXBlUmVnRXhwLmV4ZWMoc3RyKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBxID0gMTtcbiAgdmFyIHN1YnR5cGUgPSBtYXRjaFsyXTtcbiAgdmFyIHR5cGUgPSBtYXRjaFsxXTtcblxuICBpZiAobWF0Y2hbM10pIHtcbiAgICB2YXIga3ZwcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaFszXSkubWFwKHNwbGl0S2V5VmFsdWVQYWlyKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwga3Zwcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIHBhaXIgPSBrdnBzW2pdO1xuICAgICAgdmFyIGtleSA9IHBhaXJbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciB2YWwgPSBwYWlyWzFdO1xuXG4gICAgICAvLyBnZXQgdGhlIHZhbHVlLCB1bndyYXBwaW5nIHF1b3Rlc1xuICAgICAgdmFyIHZhbHVlID0gdmFsICYmIHZhbFswXSA9PT0gJ1wiJyAmJiB2YWxbdmFsLmxlbmd0aCAtIDFdID09PSAnXCInXG4gICAgICAgID8gdmFsLnN1YnN0cigxLCB2YWwubGVuZ3RoIC0gMilcbiAgICAgICAgOiB2YWw7XG5cbiAgICAgIGlmIChrZXkgPT09ICdxJykge1xuICAgICAgICBxID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBzdG9yZSBwYXJhbWV0ZXJcbiAgICAgIHBhcmFtc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHN1YnR5cGU6IHN1YnR5cGUsXG4gICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgcTogcSxcbiAgICBpOiBpXG4gIH07XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcmlvcml0eSBvZiBhIG1lZGlhIHR5cGUuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldE1lZGlhVHlwZVByaW9yaXR5KHR5cGUsIGFjY2VwdGVkLCBpbmRleCkge1xuICB2YXIgcHJpb3JpdHkgPSB7bzogLTEsIHE6IDAsIHM6IDB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWNjZXB0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc3BlYyA9IHNwZWNpZnkodHlwZSwgYWNjZXB0ZWRbaV0sIGluZGV4KTtcblxuICAgIGlmIChzcGVjICYmIChwcmlvcml0eS5zIC0gc3BlYy5zIHx8IHByaW9yaXR5LnEgLSBzcGVjLnEgfHwgcHJpb3JpdHkubyAtIHNwZWMubykgPCAwKSB7XG4gICAgICBwcmlvcml0eSA9IHNwZWM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByaW9yaXR5O1xufVxuXG4vKipcbiAqIEdldCB0aGUgc3BlY2lmaWNpdHkgb2YgdGhlIG1lZGlhIHR5cGUuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNwZWNpZnkodHlwZSwgc3BlYywgaW5kZXgpIHtcbiAgdmFyIHAgPSBwYXJzZU1lZGlhVHlwZSh0eXBlKTtcbiAgdmFyIHMgPSAwO1xuXG4gIGlmICghcCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYoc3BlYy50eXBlLnRvTG93ZXJDYXNlKCkgPT0gcC50eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBzIHw9IDRcbiAgfSBlbHNlIGlmKHNwZWMudHlwZSAhPSAnKicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmKHNwZWMuc3VidHlwZS50b0xvd2VyQ2FzZSgpID09IHAuc3VidHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcyB8PSAyXG4gIH0gZWxzZSBpZihzcGVjLnN1YnR5cGUgIT0gJyonKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNwZWMucGFyYW1zKTtcbiAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgIGlmIChrZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrKSB7XG4gICAgICByZXR1cm4gc3BlYy5wYXJhbXNba10gPT0gJyonIHx8IChzcGVjLnBhcmFtc1trXSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PSAocC5wYXJhbXNba10gfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgfSkpIHtcbiAgICAgIHMgfD0gMVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaTogaW5kZXgsXG4gICAgbzogc3BlYy5pLFxuICAgIHE6IHNwZWMucSxcbiAgICBzOiBzLFxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcmVmZXJyZWQgbWVkaWEgdHlwZXMgZnJvbSBhbiBBY2NlcHQgaGVhZGVyLlxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHByZWZlcnJlZE1lZGlhVHlwZXMoYWNjZXB0LCBwcm92aWRlZCkge1xuICAvLyBSRkMgMjYxNiBzZWMgMTQuMjogbm8gaGVhZGVyID0gKi8qXG4gIHZhciBhY2NlcHRzID0gcGFyc2VBY2NlcHQoYWNjZXB0ID09PSB1bmRlZmluZWQgPyAnKi8qJyA6IGFjY2VwdCB8fCAnJyk7XG5cbiAgaWYgKCFwcm92aWRlZCkge1xuICAgIC8vIHNvcnRlZCBsaXN0IG9mIGFsbCB0eXBlc1xuICAgIHJldHVybiBhY2NlcHRzXG4gICAgICAuZmlsdGVyKGlzUXVhbGl0eSlcbiAgICAgIC5zb3J0KGNvbXBhcmVTcGVjcylcbiAgICAgIC5tYXAoZ2V0RnVsbFR5cGUpO1xuICB9XG5cbiAgdmFyIHByaW9yaXRpZXMgPSBwcm92aWRlZC5tYXAoZnVuY3Rpb24gZ2V0UHJpb3JpdHkodHlwZSwgaW5kZXgpIHtcbiAgICByZXR1cm4gZ2V0TWVkaWFUeXBlUHJpb3JpdHkodHlwZSwgYWNjZXB0cywgaW5kZXgpO1xuICB9KTtcblxuICAvLyBzb3J0ZWQgbGlzdCBvZiBhY2NlcHRlZCB0eXBlc1xuICByZXR1cm4gcHJpb3JpdGllcy5maWx0ZXIoaXNRdWFsaXR5KS5zb3J0KGNvbXBhcmVTcGVjcykubWFwKGZ1bmN0aW9uIGdldFR5cGUocHJpb3JpdHkpIHtcbiAgICByZXR1cm4gcHJvdmlkZWRbcHJpb3JpdGllcy5pbmRleE9mKHByaW9yaXR5KV07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXBhcmUgdHdvIHNwZWNzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb21wYXJlU3BlY3MoYSwgYikge1xuICByZXR1cm4gKGIucSAtIGEucSkgfHwgKGIucyAtIGEucykgfHwgKGEubyAtIGIubykgfHwgKGEuaSAtIGIuaSkgfHwgMDtcbn1cblxuLyoqXG4gKiBHZXQgZnVsbCB0eXBlIHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RnVsbFR5cGUoc3BlYykge1xuICByZXR1cm4gc3BlYy50eXBlICsgJy8nICsgc3BlYy5zdWJ0eXBlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgc3BlYyBoYXMgYW55IHF1YWxpdHkuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzUXVhbGl0eShzcGVjKSB7XG4gIHJldHVybiBzcGVjLnEgPiAwO1xufVxuXG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgcXVvdGVzIGluIGEgc3RyaW5nLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBxdW90ZUNvdW50KHN0cmluZykge1xuICB2YXIgY291bnQgPSAwO1xuICB2YXIgaW5kZXggPSAwO1xuXG4gIHdoaWxlICgoaW5kZXggPSBzdHJpbmcuaW5kZXhPZignXCInLCBpbmRleCkpICE9PSAtMSkge1xuICAgIGNvdW50Kys7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiBjb3VudDtcbn1cblxuLyoqXG4gKiBTcGxpdCBhIGtleSB2YWx1ZSBwYWlyLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzcGxpdEtleVZhbHVlUGFpcihzdHIpIHtcbiAgdmFyIGluZGV4ID0gc3RyLmluZGV4T2YoJz0nKTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAga2V5ID0gc3RyO1xuICB9IGVsc2Uge1xuICAgIGtleSA9IHN0ci5zdWJzdHIoMCwgaW5kZXgpO1xuICAgIHZhbCA9IHN0ci5zdWJzdHIoaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiBba2V5LCB2YWxdO1xufVxuXG4vKipcbiAqIFNwbGl0IGFuIEFjY2VwdCBoZWFkZXIgaW50byBtZWRpYSB0eXBlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3BsaXRNZWRpYVR5cGVzKGFjY2VwdCkge1xuICB2YXIgYWNjZXB0cyA9IGFjY2VwdC5zcGxpdCgnLCcpO1xuXG4gIGZvciAodmFyIGkgPSAxLCBqID0gMDsgaSA8IGFjY2VwdHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocXVvdGVDb3VudChhY2NlcHRzW2pdKSAlIDIgPT0gMCkge1xuICAgICAgYWNjZXB0c1srK2pdID0gYWNjZXB0c1tpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjZXB0c1tqXSArPSAnLCcgKyBhY2NlcHRzW2ldO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRyaW0gYWNjZXB0c1xuICBhY2NlcHRzLmxlbmd0aCA9IGogKyAxO1xuXG4gIHJldHVybiBhY2NlcHRzO1xufVxuXG4vKipcbiAqIFNwbGl0IGEgc3RyaW5nIG9mIHBhcmFtZXRlcnMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNwbGl0UGFyYW1ldGVycyhzdHIpIHtcbiAgdmFyIHBhcmFtZXRlcnMgPSBzdHIuc3BsaXQoJzsnKTtcblxuICBmb3IgKHZhciBpID0gMSwgaiA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHF1b3RlQ291bnQocGFyYW1ldGVyc1tqXSkgJSAyID09IDApIHtcbiAgICAgIHBhcmFtZXRlcnNbKytqXSA9IHBhcmFtZXRlcnNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtZXRlcnNbal0gKz0gJzsnICsgcGFyYW1ldGVyc1tpXTtcbiAgICB9XG4gIH1cblxuICAvLyB0cmltIHBhcmFtZXRlcnNcbiAgcGFyYW1ldGVycy5sZW5ndGggPSBqICsgMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJhbWV0ZXJzW2ldID0gcGFyYW1ldGVyc1tpXS50cmltKCk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9uZWdvdGlhdG9yL2xpYi9tZWRpYVR5cGUuanNcbi8vIG1vZHVsZSBpZCA9IDE4MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGV4cHJlc3NcbiAqIENvcHlyaWdodChjKSAyMDA5LTIwMTMgVEogSG9sb3dheWNodWtcbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBjb250ZW50RGlzcG9zaXRpb24gPSByZXF1aXJlKCdjb250ZW50LWRpc3Bvc2l0aW9uJyk7XG52YXIgZGVwcmVjYXRlID0gcmVxdWlyZSgnZGVwZCcpKCdleHByZXNzJyk7XG52YXIgZW5jb2RlVXJsID0gcmVxdWlyZSgnZW5jb2RldXJsJyk7XG52YXIgZXNjYXBlSHRtbCA9IHJlcXVpcmUoJ2VzY2FwZS1odG1sJyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBpc0Fic29sdXRlID0gcmVxdWlyZSgnLi91dGlscycpLmlzQWJzb2x1dGU7XG52YXIgb25GaW5pc2hlZCA9IHJlcXVpcmUoJ29uLWZpbmlzaGVkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBzdGF0dXNlcyA9IHJlcXVpcmUoJ3N0YXR1c2VzJylcbnZhciBtZXJnZSA9IHJlcXVpcmUoJ3V0aWxzLW1lcmdlJyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJ2Nvb2tpZS1zaWduYXR1cmUnKS5zaWduO1xudmFyIG5vcm1hbGl6ZVR5cGUgPSByZXF1aXJlKCcuL3V0aWxzJykubm9ybWFsaXplVHlwZTtcbnZhciBub3JtYWxpemVUeXBlcyA9IHJlcXVpcmUoJy4vdXRpbHMnKS5ub3JtYWxpemVUeXBlcztcbnZhciBzZXRDaGFyc2V0ID0gcmVxdWlyZSgnLi91dGlscycpLnNldENoYXJzZXQ7XG52YXIgY29va2llID0gcmVxdWlyZSgnY29va2llJyk7XG52YXIgc2VuZCA9IHJlcXVpcmUoJ3NlbmQnKTtcbnZhciBleHRuYW1lID0gcGF0aC5leHRuYW1lO1xudmFyIG1pbWUgPSBzZW5kLm1pbWU7XG52YXIgcmVzb2x2ZSA9IHBhdGgucmVzb2x2ZTtcbnZhciB2YXJ5ID0gcmVxdWlyZSgndmFyeScpO1xuXG4vKipcbiAqIFJlc3BvbnNlIHByb3RvdHlwZS5cbiAqIEBwdWJsaWNcbiAqL1xuXG52YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShodHRwLlNlcnZlclJlc3BvbnNlLnByb3RvdHlwZSlcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc1xuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBjaGFyc2V0UmVnRXhwID0gLztcXHMqY2hhcnNldFxccyo9LztcblxuLyoqXG4gKiBTZXQgc3RhdHVzIGBjb2RlYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVxuICogQHJldHVybiB7U2VydmVyUmVzcG9uc2V9XG4gKiBAcHVibGljXG4gKi9cblxucmVzLnN0YXR1cyA9IGZ1bmN0aW9uIHN0YXR1cyhjb2RlKSB7XG4gIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgTGluayBoZWFkZXIgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gYGxpbmtzYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICByZXMubGlua3Moe1xuICogICAgICBuZXh0OiAnaHR0cDovL2FwaS5leGFtcGxlLmNvbS91c2Vycz9wYWdlPTInLFxuICogICAgICBsYXN0OiAnaHR0cDovL2FwaS5leGFtcGxlLmNvbS91c2Vycz9wYWdlPTUnXG4gKiAgICB9KTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbGlua3NcbiAqIEByZXR1cm4ge1NlcnZlclJlc3BvbnNlfVxuICogQHB1YmxpY1xuICovXG5cbnJlcy5saW5rcyA9IGZ1bmN0aW9uKGxpbmtzKXtcbiAgdmFyIGxpbmsgPSB0aGlzLmdldCgnTGluaycpIHx8ICcnO1xuICBpZiAobGluaykgbGluayArPSAnLCAnO1xuICByZXR1cm4gdGhpcy5zZXQoJ0xpbmsnLCBsaW5rICsgT2JqZWN0LmtleXMobGlua3MpLm1hcChmdW5jdGlvbihyZWwpe1xuICAgIHJldHVybiAnPCcgKyBsaW5rc1tyZWxdICsgJz47IHJlbD1cIicgKyByZWwgKyAnXCInO1xuICB9KS5qb2luKCcsICcpKTtcbn07XG5cbi8qKlxuICogU2VuZCBhIHJlc3BvbnNlLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICByZXMuc2VuZChCdWZmZXIuZnJvbSgnd2Fob28nKSk7XG4gKiAgICAgcmVzLnNlbmQoeyBzb21lOiAnanNvbicgfSk7XG4gKiAgICAgcmVzLnNlbmQoJzxwPnNvbWUgaHRtbDwvcD4nKTtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8Ym9vbGVhbnxvYmplY3R8QnVmZmVyfSBib2R5XG4gKiBAcHVibGljXG4gKi9cblxucmVzLnNlbmQgPSBmdW5jdGlvbiBzZW5kKGJvZHkpIHtcbiAgdmFyIGNodW5rID0gYm9keTtcbiAgdmFyIGVuY29kaW5nO1xuICB2YXIgcmVxID0gdGhpcy5yZXE7XG4gIHZhciB0eXBlO1xuXG4gIC8vIHNldHRpbmdzXG4gIHZhciBhcHAgPSB0aGlzLmFwcDtcblxuICAvLyBhbGxvdyBzdGF0dXMgLyBib2R5XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgLy8gcmVzLnNlbmQoYm9keSwgc3RhdHVzKSBiYWNrd2FyZHMgY29tcGF0XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdudW1iZXInICYmIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdudW1iZXInKSB7XG4gICAgICBkZXByZWNhdGUoJ3Jlcy5zZW5kKGJvZHksIHN0YXR1cyk6IFVzZSByZXMuc3RhdHVzKHN0YXR1cykuc2VuZChib2R5KSBpbnN0ZWFkJyk7XG4gICAgICB0aGlzLnN0YXR1c0NvZGUgPSBhcmd1bWVudHNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlcHJlY2F0ZSgncmVzLnNlbmQoc3RhdHVzLCBib2R5KTogVXNlIHJlcy5zdGF0dXMoc3RhdHVzKS5zZW5kKGJvZHkpIGluc3RlYWQnKTtcbiAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgIGNodW5rID0gYXJndW1lbnRzWzFdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGRpc2FtYmlndWF0ZSByZXMuc2VuZChzdGF0dXMpIGFuZCByZXMuc2VuZChzdGF0dXMsIG51bSlcbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ251bWJlcicgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIHJlcy5zZW5kKHN0YXR1cykgd2lsbCBzZXQgc3RhdHVzIG1lc3NhZ2UgYXMgdGV4dCBzdHJpbmdcbiAgICBpZiAoIXRoaXMuZ2V0KCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgdGhpcy50eXBlKCd0eHQnKTtcbiAgICB9XG5cbiAgICBkZXByZWNhdGUoJ3Jlcy5zZW5kKHN0YXR1cyk6IFVzZSByZXMuc2VuZFN0YXR1cyhzdGF0dXMpIGluc3RlYWQnKTtcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjaHVuaztcbiAgICBjaHVuayA9IHN0YXR1c2VzW2NodW5rXVxuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgY2h1bmspIHtcbiAgICAvLyBzdHJpbmcgZGVmYXVsdGluZyB0byBodG1sXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmICghdGhpcy5nZXQoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICAgIHRoaXMudHlwZSgnaHRtbCcpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgICAgIGNodW5rID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldCgnQ29udGVudC1UeXBlJykpIHtcbiAgICAgICAgICB0aGlzLnR5cGUoJ2JpbicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5qc29uKGNodW5rKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gd3JpdGUgc3RyaW5ncyBpbiB1dGYtOFxuICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgIHR5cGUgPSB0aGlzLmdldCgnQ29udGVudC1UeXBlJyk7XG5cbiAgICAvLyByZWZsZWN0IHRoaXMgaW4gY29udGVudC10eXBlXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5zZXQoJ0NvbnRlbnQtVHlwZScsIHNldENoYXJzZXQodHlwZSwgJ3V0Zi04JykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGRldGVybWluZSBpZiBFVGFnIHNob3VsZCBiZSBnZW5lcmF0ZWRcbiAgdmFyIGV0YWdGbiA9IGFwcC5nZXQoJ2V0YWcgZm4nKVxuICB2YXIgZ2VuZXJhdGVFVGFnID0gIXRoaXMuZ2V0KCdFVGFnJykgJiYgdHlwZW9mIGV0YWdGbiA9PT0gJ2Z1bmN0aW9uJ1xuXG4gIC8vIHBvcHVsYXRlIENvbnRlbnQtTGVuZ3RoXG4gIHZhciBsZW5cbiAgaWYgKGNodW5rICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgICAgLy8gZ2V0IGxlbmd0aCBvZiBCdWZmZXJcbiAgICAgIGxlbiA9IGNodW5rLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAoIWdlbmVyYXRlRVRhZyAmJiBjaHVuay5sZW5ndGggPCAxMDAwKSB7XG4gICAgICAvLyBqdXN0IGNhbGN1bGF0ZSBsZW5ndGggd2hlbiBubyBFVGFnICsgc21hbGwgY2h1bmtcbiAgICAgIGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29udmVydCBjaHVuayB0byBCdWZmZXIgYW5kIGNhbGN1bGF0ZVxuICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpXG4gICAgICBlbmNvZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgIGxlbiA9IGNodW5rLmxlbmd0aFxuICAgIH1cblxuICAgIHRoaXMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGxlbik7XG4gIH1cblxuICAvLyBwb3B1bGF0ZSBFVGFnXG4gIHZhciBldGFnO1xuICBpZiAoZ2VuZXJhdGVFVGFnICYmIGxlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKChldGFnID0gZXRhZ0ZuKGNodW5rLCBlbmNvZGluZykpKSB7XG4gICAgICB0aGlzLnNldCgnRVRhZycsIGV0YWcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZyZXNobmVzc1xuICBpZiAocmVxLmZyZXNoKSB0aGlzLnN0YXR1c0NvZGUgPSAzMDQ7XG5cbiAgLy8gc3RyaXAgaXJyZWxldmFudCBoZWFkZXJzXG4gIGlmICgyMDQgPT09IHRoaXMuc3RhdHVzQ29kZSB8fCAzMDQgPT09IHRoaXMuc3RhdHVzQ29kZSkge1xuICAgIHRoaXMucmVtb3ZlSGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICB0aGlzLnJlbW92ZUhlYWRlcignQ29udGVudC1MZW5ndGgnKTtcbiAgICB0aGlzLnJlbW92ZUhlYWRlcignVHJhbnNmZXItRW5jb2RpbmcnKTtcbiAgICBjaHVuayA9ICcnO1xuICB9XG5cbiAgaWYgKHJlcS5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIHNraXAgYm9keSBmb3IgSEVBRFxuICAgIHRoaXMuZW5kKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVzcG9uZFxuICAgIHRoaXMuZW5kKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2VuZCBKU09OIHJlc3BvbnNlLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICByZXMuanNvbihudWxsKTtcbiAqICAgICByZXMuanNvbih7IHVzZXI6ICd0aicgfSk7XG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfGJvb2xlYW58b2JqZWN0fSBvYmpcbiAqIEBwdWJsaWNcbiAqL1xuXG5yZXMuanNvbiA9IGZ1bmN0aW9uIGpzb24ob2JqKSB7XG4gIHZhciB2YWwgPSBvYmo7XG5cbiAgLy8gYWxsb3cgc3RhdHVzIC8gYm9keVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIC8vIHJlcy5qc29uKGJvZHksIHN0YXR1cykgYmFja3dhcmRzIGNvbXBhdFxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnbnVtYmVyJykge1xuICAgICAgZGVwcmVjYXRlKCdyZXMuanNvbihvYmosIHN0YXR1cyk6IFVzZSByZXMuc3RhdHVzKHN0YXR1cykuanNvbihvYmopIGluc3RlYWQnKTtcbiAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IGFyZ3VtZW50c1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVwcmVjYXRlKCdyZXMuanNvbihzdGF0dXMsIG9iaik6IFVzZSByZXMuc3RhdHVzKHN0YXR1cykuanNvbihvYmopIGluc3RlYWQnKTtcbiAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgIHZhbCA9IGFyZ3VtZW50c1sxXTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXR0aW5nc1xuICB2YXIgYXBwID0gdGhpcy5hcHA7XG4gIHZhciBlc2NhcGUgPSBhcHAuZ2V0KCdqc29uIGVzY2FwZScpXG4gIHZhciByZXBsYWNlciA9IGFwcC5nZXQoJ2pzb24gcmVwbGFjZXInKTtcbiAgdmFyIHNwYWNlcyA9IGFwcC5nZXQoJ2pzb24gc3BhY2VzJyk7XG4gIHZhciBib2R5ID0gc3RyaW5naWZ5KHZhbCwgcmVwbGFjZXIsIHNwYWNlcywgZXNjYXBlKVxuXG4gIC8vIGNvbnRlbnQtdHlwZVxuICBpZiAoIXRoaXMuZ2V0KCdDb250ZW50LVR5cGUnKSkge1xuICAgIHRoaXMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuc2VuZChib2R5KTtcbn07XG5cbi8qKlxuICogU2VuZCBKU09OIHJlc3BvbnNlIHdpdGggSlNPTlAgY2FsbGJhY2sgc3VwcG9ydC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgcmVzLmpzb25wKG51bGwpO1xuICogICAgIHJlcy5qc29ucCh7IHVzZXI6ICd0aicgfSk7XG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfGJvb2xlYW58b2JqZWN0fSBvYmpcbiAqIEBwdWJsaWNcbiAqL1xuXG5yZXMuanNvbnAgPSBmdW5jdGlvbiBqc29ucChvYmopIHtcbiAgdmFyIHZhbCA9IG9iajtcblxuICAvLyBhbGxvdyBzdGF0dXMgLyBib2R5XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgLy8gcmVzLmpzb24oYm9keSwgc3RhdHVzKSBiYWNrd2FyZHMgY29tcGF0XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdudW1iZXInKSB7XG4gICAgICBkZXByZWNhdGUoJ3Jlcy5qc29ucChvYmosIHN0YXR1cyk6IFVzZSByZXMuc3RhdHVzKHN0YXR1cykuanNvbihvYmopIGluc3RlYWQnKTtcbiAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IGFyZ3VtZW50c1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVwcmVjYXRlKCdyZXMuanNvbnAoc3RhdHVzLCBvYmopOiBVc2UgcmVzLnN0YXR1cyhzdGF0dXMpLmpzb25wKG9iaikgaW5zdGVhZCcpO1xuICAgICAgdGhpcy5zdGF0dXNDb2RlID0gYXJndW1lbnRzWzBdO1xuICAgICAgdmFsID0gYXJndW1lbnRzWzFdO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldHRpbmdzXG4gIHZhciBhcHAgPSB0aGlzLmFwcDtcbiAgdmFyIGVzY2FwZSA9IGFwcC5nZXQoJ2pzb24gZXNjYXBlJylcbiAgdmFyIHJlcGxhY2VyID0gYXBwLmdldCgnanNvbiByZXBsYWNlcicpO1xuICB2YXIgc3BhY2VzID0gYXBwLmdldCgnanNvbiBzcGFjZXMnKTtcbiAgdmFyIGJvZHkgPSBzdHJpbmdpZnkodmFsLCByZXBsYWNlciwgc3BhY2VzLCBlc2NhcGUpXG4gIHZhciBjYWxsYmFjayA9IHRoaXMucmVxLnF1ZXJ5W2FwcC5nZXQoJ2pzb25wIGNhbGxiYWNrIG5hbWUnKV07XG5cbiAgLy8gY29udGVudC10eXBlXG4gIGlmICghdGhpcy5nZXQoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgdGhpcy5zZXQoJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLCAnbm9zbmlmZicpO1xuICAgIHRoaXMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICB9XG5cbiAgLy8gZml4dXAgY2FsbGJhY2tcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2FsbGJhY2spKSB7XG4gICAgY2FsbGJhY2sgPSBjYWxsYmFja1swXTtcbiAgfVxuXG4gIC8vIGpzb25wXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnICYmIGNhbGxiYWNrLmxlbmd0aCAhPT0gMCkge1xuICAgIHRoaXMuc2V0KCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcbiAgICB0aGlzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuXG4gICAgLy8gcmVzdHJpY3QgY2FsbGJhY2sgY2hhcnNldFxuICAgIGNhbGxiYWNrID0gY2FsbGJhY2sucmVwbGFjZSgvW15cXFtcXF1cXHckLl0vZywgJycpO1xuXG4gICAgLy8gcmVwbGFjZSBjaGFycyBub3QgYWxsb3dlZCBpbiBKYXZhU2NyaXB0IHRoYXQgYXJlIGluIEpTT05cbiAgICBib2R5ID0gYm9keVxuICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpXG4gICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5Jyk7XG5cbiAgICAvLyB0aGUgLyoqLyBpcyBhIHNwZWNpZmljIHNlY3VyaXR5IG1pdGlnYXRpb24gZm9yIFwiUm9zZXR0YSBGbGFzaCBKU09OUCBhYnVzZVwiXG4gICAgLy8gdGhlIHR5cGVvZiBjaGVjayBpcyBqdXN0IHRvIHJlZHVjZSBjbGllbnQgZXJyb3Igbm9pc2VcbiAgICBib2R5ID0gJy8qKi8gdHlwZW9mICcgKyBjYWxsYmFjayArICcgPT09IFxcJ2Z1bmN0aW9uXFwnICYmICcgKyBjYWxsYmFjayArICcoJyArIGJvZHkgKyAnKTsnO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuc2VuZChib2R5KTtcbn07XG5cbi8qKlxuICogU2VuZCBnaXZlbiBIVFRQIHN0YXR1cyBjb2RlLlxuICpcbiAqIFNldHMgdGhlIHJlc3BvbnNlIHN0YXR1cyB0byBgc3RhdHVzQ29kZWAgYW5kIHRoZSBib2R5IG9mIHRoZVxuICogcmVzcG9uc2UgdG8gdGhlIHN0YW5kYXJkIGRlc2NyaXB0aW9uIGZyb20gbm9kZSdzIGh0dHAuU1RBVFVTX0NPREVTXG4gKiBvciB0aGUgc3RhdHVzQ29kZSBudW1iZXIgaWYgbm8gZGVzY3JpcHRpb24uXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIHJlcy5zZW5kU3RhdHVzKDIwMCk7XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqIEBwdWJsaWNcbiAqL1xuXG5yZXMuc2VuZFN0YXR1cyA9IGZ1bmN0aW9uIHNlbmRTdGF0dXMoc3RhdHVzQ29kZSkge1xuICB2YXIgYm9keSA9IHN0YXR1c2VzW3N0YXR1c0NvZGVdIHx8IFN0cmluZyhzdGF0dXNDb2RlKVxuXG4gIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gIHRoaXMudHlwZSgndHh0Jyk7XG5cbiAgcmV0dXJuIHRoaXMuc2VuZChib2R5KTtcbn07XG5cbi8qKlxuICogVHJhbnNmZXIgdGhlIGZpbGUgYXQgdGhlIGdpdmVuIGBwYXRoYC5cbiAqXG4gKiBBdXRvbWF0aWNhbGx5IHNldHMgdGhlIF9Db250ZW50LVR5cGVfIHJlc3BvbnNlIGhlYWRlciBmaWVsZC5cbiAqIFRoZSBjYWxsYmFjayBgY2FsbGJhY2soZXJyKWAgaXMgaW52b2tlZCB3aGVuIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZVxuICogb3Igd2hlbiBhbiBlcnJvciBvY2N1cnMuIEJlIHN1cmUgdG8gY2hlY2sgYHJlcy5zZW50SGVhZGVyYFxuICogaWYgeW91IHdpc2ggdG8gYXR0ZW1wdCByZXNwb25kaW5nLCBhcyB0aGUgaGVhZGVyIGFuZCBzb21lIGRhdGFcbiAqIG1heSBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2ZlcnJlZC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAgLSBgbWF4QWdlYCAgIGRlZmF1bHRpbmcgdG8gMCAoY2FuIGJlIHN0cmluZyBjb252ZXJ0ZWQgYnkgYG1zYClcbiAqICAgLSBgcm9vdGAgICAgIHJvb3QgZGlyZWN0b3J5IGZvciByZWxhdGl2ZSBmaWxlbmFtZXNcbiAqICAgLSBgaGVhZGVyc2AgIG9iamVjdCBvZiBoZWFkZXJzIHRvIHNlcnZlIHdpdGggZmlsZVxuICogICAtIGBkb3RmaWxlc2Agc2VydmUgZG90ZmlsZXMsIGRlZmF1bHRpbmcgdG8gZmFsc2U7IGNhbiBiZSBgXCJhbGxvd1wiYCB0byBzZW5kIHRoZW1cbiAqXG4gKiBPdGhlciBvcHRpb25zIGFyZSBwYXNzZWQgYWxvbmcgdG8gYHNlbmRgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IGByZXMuc2VuZEZpbGUoKWAgbWF5XG4gKiAgYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhlIGBzdGF0aWMoKWAgbWlkZGxld2FyZSBmb3JcbiAqICBkeW5hbWljIHNpdHVhdGlvbnMuIFRoZSBjb2RlIGJhY2tpbmcgYHJlcy5zZW5kRmlsZSgpYCBpcyBhY3R1YWxseVxuICogIHRoZSBzYW1lIGNvZGUsIHNvIEhUVFAgY2FjaGUgc3VwcG9ydCBldGMgaXMgaWRlbnRpY2FsLlxuICpcbiAqICAgICBhcHAuZ2V0KCcvdXNlci86dWlkL3Bob3Rvcy86ZmlsZScsIGZ1bmN0aW9uKHJlcSwgcmVzKXtcbiAqICAgICAgIHZhciB1aWQgPSByZXEucGFyYW1zLnVpZFxuICogICAgICAgICAsIGZpbGUgPSByZXEucGFyYW1zLmZpbGU7XG4gKlxuICogICAgICAgcmVxLnVzZXIubWF5Vmlld0ZpbGVzRnJvbSh1aWQsIGZ1bmN0aW9uKHllcyl7XG4gKiAgICAgICAgIGlmICh5ZXMpIHtcbiAqICAgICAgICAgICByZXMuc2VuZEZpbGUoJy91cGxvYWRzLycgKyB1aWQgKyAnLycgKyBmaWxlKTtcbiAqICAgICAgICAgfSBlbHNlIHtcbiAqICAgICAgICAgICByZXMuc2VuZCg0MDMsICdTb3JyeSEgeW91IGNhbnQgc2VlIHRoYXQuJyk7XG4gKiAgICAgICAgIH1cbiAqICAgICAgIH0pO1xuICogICAgIH0pO1xuICpcbiAqIEBwdWJsaWNcbiAqL1xuXG5yZXMuc2VuZEZpbGUgPSBmdW5jdGlvbiBzZW5kRmlsZShwYXRoLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgZG9uZSA9IGNhbGxiYWNrO1xuICB2YXIgcmVxID0gdGhpcy5yZXE7XG4gIHZhciByZXMgPSB0aGlzO1xuICB2YXIgbmV4dCA9IHJlcS5uZXh0O1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKCFwYXRoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGF0aCBhcmd1bWVudCBpcyByZXF1aXJlZCB0byByZXMuc2VuZEZpbGUnKTtcbiAgfVxuXG4gIC8vIHN1cHBvcnQgZnVuY3Rpb24gYXMgc2Vjb25kIGFyZ1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBkb25lID0gb3B0aW9ucztcbiAgICBvcHRzID0ge307XG4gIH1cblxuICBpZiAoIW9wdHMucm9vdCAmJiAhaXNBYnNvbHV0ZShwYXRoKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhdGggbXVzdCBiZSBhYnNvbHV0ZSBvciBzcGVjaWZ5IHJvb3QgdG8gcmVzLnNlbmRGaWxlJyk7XG4gIH1cblxuICAvLyBjcmVhdGUgZmlsZSBzdHJlYW1cbiAgdmFyIHBhdGhuYW1lID0gZW5jb2RlVVJJKHBhdGgpO1xuICB2YXIgZmlsZSA9IHNlbmQocmVxLCBwYXRobmFtZSwgb3B0cyk7XG5cbiAgLy8gdHJhbnNmZXJcbiAgc2VuZGZpbGUocmVzLCBmaWxlLCBvcHRzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGRvbmUpIHJldHVybiBkb25lKGVycik7XG4gICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gJ0VJU0RJUicpIHJldHVybiBuZXh0KCk7XG5cbiAgICAvLyBuZXh0KCkgYWxsIGJ1dCB3cml0ZSBlcnJvcnNcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRUNPTk5BQk9SVEVEJyAmJiBlcnIuc3lzY2FsbCAhPT0gJ3dyaXRlJykge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZmVyIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBgcGF0aGAuXG4gKlxuICogQXV0b21hdGljYWxseSBzZXRzIHRoZSBfQ29udGVudC1UeXBlXyByZXNwb25zZSBoZWFkZXIgZmllbGQuXG4gKiBUaGUgY2FsbGJhY2sgYGNhbGxiYWNrKGVycilgIGlzIGludm9rZWQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGVcbiAqIG9yIHdoZW4gYW4gZXJyb3Igb2NjdXJzLiBCZSBzdXJlIHRvIGNoZWNrIGByZXMuc2VudEhlYWRlcmBcbiAqIGlmIHlvdSB3aXNoIHRvIGF0dGVtcHQgcmVzcG9uZGluZywgYXMgdGhlIGhlYWRlciBhbmQgc29tZSBkYXRhXG4gKiBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNmZXJyZWQuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgIC0gYG1heEFnZWAgICBkZWZhdWx0aW5nIHRvIDAgKGNhbiBiZSBzdHJpbmcgY29udmVydGVkIGJ5IGBtc2ApXG4gKiAgIC0gYHJvb3RgICAgICByb290IGRpcmVjdG9yeSBmb3IgcmVsYXRpdmUgZmlsZW5hbWVzXG4gKiAgIC0gYGhlYWRlcnNgICBvYmplY3Qgb2YgaGVhZGVycyB0byBzZXJ2ZSB3aXRoIGZpbGVcbiAqICAgLSBgZG90ZmlsZXNgIHNlcnZlIGRvdGZpbGVzLCBkZWZhdWx0aW5nIHRvIGZhbHNlOyBjYW4gYmUgYFwiYWxsb3dcImAgdG8gc2VuZCB0aGVtXG4gKlxuICogT3RoZXIgb3B0aW9ucyBhcmUgcGFzc2VkIGFsb25nIHRvIGBzZW5kYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGlsbHVzdHJhdGVzIGhvdyBgcmVzLnNlbmRmaWxlKClgIG1heVxuICogIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBgc3RhdGljKClgIG1pZGRsZXdhcmUgZm9yXG4gKiAgZHluYW1pYyBzaXR1YXRpb25zLiBUaGUgY29kZSBiYWNraW5nIGByZXMuc2VuZGZpbGUoKWAgaXMgYWN0dWFsbHlcbiAqICB0aGUgc2FtZSBjb2RlLCBzbyBIVFRQIGNhY2hlIHN1cHBvcnQgZXRjIGlzIGlkZW50aWNhbC5cbiAqXG4gKiAgICAgYXBwLmdldCgnL3VzZXIvOnVpZC9waG90b3MvOmZpbGUnLCBmdW5jdGlvbihyZXEsIHJlcyl7XG4gKiAgICAgICB2YXIgdWlkID0gcmVxLnBhcmFtcy51aWRcbiAqICAgICAgICAgLCBmaWxlID0gcmVxLnBhcmFtcy5maWxlO1xuICpcbiAqICAgICAgIHJlcS51c2VyLm1heVZpZXdGaWxlc0Zyb20odWlkLCBmdW5jdGlvbih5ZXMpe1xuICogICAgICAgICBpZiAoeWVzKSB7XG4gKiAgICAgICAgICAgcmVzLnNlbmRmaWxlKCcvdXBsb2Fkcy8nICsgdWlkICsgJy8nICsgZmlsZSk7XG4gKiAgICAgICAgIH0gZWxzZSB7XG4gKiAgICAgICAgICAgcmVzLnNlbmQoNDAzLCAnU29ycnkhIHlvdSBjYW50IHNlZSB0aGF0LicpO1xuICogICAgICAgICB9XG4gKiAgICAgICB9KTtcbiAqICAgICB9KTtcbiAqXG4gKiBAcHVibGljXG4gKi9cblxucmVzLnNlbmRmaWxlID0gZnVuY3Rpb24gKHBhdGgsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhciBkb25lID0gY2FsbGJhY2s7XG4gIHZhciByZXEgPSB0aGlzLnJlcTtcbiAgdmFyIHJlcyA9IHRoaXM7XG4gIHZhciBuZXh0ID0gcmVxLm5leHQ7XG4gIHZhciBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBzdXBwb3J0IGZ1bmN0aW9uIGFzIHNlY29uZCBhcmdcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZG9uZSA9IG9wdGlvbnM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgLy8gY3JlYXRlIGZpbGUgc3RyZWFtXG4gIHZhciBmaWxlID0gc2VuZChyZXEsIHBhdGgsIG9wdHMpO1xuXG4gIC8vIHRyYW5zZmVyXG4gIHNlbmRmaWxlKHJlcywgZmlsZSwgb3B0cywgZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChkb25lKSByZXR1cm4gZG9uZShlcnIpO1xuICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdFSVNESVInKSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gbmV4dCgpIGFsbCBidXQgd3JpdGUgZXJyb3JzXG4gICAgaWYgKGVyciAmJiBlcnIuY29kZSAhPT0gJ0VDT05OQUJPUlQnICYmIGVyci5zeXNjYWxsICE9PSAnd3JpdGUnKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9KTtcbn07XG5cbnJlcy5zZW5kZmlsZSA9IGRlcHJlY2F0ZS5mdW5jdGlvbihyZXMuc2VuZGZpbGUsXG4gICdyZXMuc2VuZGZpbGU6IFVzZSByZXMuc2VuZEZpbGUgaW5zdGVhZCcpO1xuXG4vKipcbiAqIFRyYW5zZmVyIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBgcGF0aGAgYXMgYW4gYXR0YWNobWVudC5cbiAqXG4gKiBPcHRpb25hbGx5IHByb3ZpZGluZyBhbiBhbHRlcm5hdGUgYXR0YWNobWVudCBgZmlsZW5hbWVgLFxuICogYW5kIG9wdGlvbmFsIGNhbGxiYWNrIGBjYWxsYmFjayhlcnIpYC4gVGhlIGNhbGxiYWNrIGlzIGludm9rZWRcbiAqIHdoZW4gdGhlIGRhdGEgdHJhbnNmZXIgaXMgY29tcGxldGUsIG9yIHdoZW4gYW4gZXJyb3IgaGFzXG4gKiBvY3VycmVkLiBCZSBzdXJlIHRvIGNoZWNrIGByZXMuaGVhZGVyc1NlbnRgIGlmIHlvdSBwbGFuIHRvIHJlc3BvbmQuXG4gKlxuICogT3B0aW9uYWxseSBwcm92aWRpbmcgYW4gYG9wdGlvbnNgIG9iamVjdCB0byB1c2Ugd2l0aCBgcmVzLnNlbmRGaWxlKClgLlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgYENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlciwgb3ZlcnJpZGluZ1xuICogYW55IGBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIgcGFzc2VkIGFzIGhlYWRlciBvcHRpb25zIGluIG9yZGVyXG4gKiB0byBzZXQgdGhlIGF0dGFjaG1lbnQgYW5kIGZpbGVuYW1lLlxuICpcbiAqIFRoaXMgbWV0aG9kIHVzZXMgYHJlcy5zZW5kRmlsZSgpYC5cbiAqXG4gKiBAcHVibGljXG4gKi9cblxucmVzLmRvd25sb2FkID0gZnVuY3Rpb24gZG93bmxvYWQgKHBhdGgsIGZpbGVuYW1lLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgZG9uZSA9IGNhbGxiYWNrO1xuICB2YXIgbmFtZSA9IGZpbGVuYW1lO1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwgbnVsbFxuXG4gIC8vIHN1cHBvcnQgZnVuY3Rpb24gYXMgc2Vjb25kIG9yIHRoaXJkIGFyZ1xuICBpZiAodHlwZW9mIGZpbGVuYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZG9uZSA9IGZpbGVuYW1lO1xuICAgIG5hbWUgPSBudWxsO1xuICAgIG9wdHMgPSBudWxsXG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBkb25lID0gb3B0aW9uc1xuICAgIG9wdHMgPSBudWxsXG4gIH1cblxuICAvLyBzZXQgQ29udGVudC1EaXNwb3NpdGlvbiB3aGVuIGZpbGUgaXMgc2VudFxuICB2YXIgaGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1EaXNwb3NpdGlvbic6IGNvbnRlbnREaXNwb3NpdGlvbihuYW1lIHx8IHBhdGgpXG4gIH07XG5cbiAgLy8gbWVyZ2UgdXNlci1wcm92aWRlZCBoZWFkZXJzXG4gIGlmIChvcHRzICYmIG9wdHMuaGVhZGVycykge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0cy5oZWFkZXJzKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV1cbiAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSAhPT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IG9wdHMuaGVhZGVyc1trZXldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2UgdXNlci1wcm92aWRlZCBvcHRpb25zXG4gIG9wdHMgPSBPYmplY3QuY3JlYXRlKG9wdHMpXG4gIG9wdHMuaGVhZGVycyA9IGhlYWRlcnNcblxuICAvLyBSZXNvbHZlIHRoZSBmdWxsIHBhdGggZm9yIHNlbmRGaWxlXG4gIHZhciBmdWxsUGF0aCA9IHJlc29sdmUocGF0aCk7XG5cbiAgLy8gc2VuZCBmaWxlXG4gIHJldHVybiB0aGlzLnNlbmRGaWxlKGZ1bGxQYXRoLCBvcHRzLCBkb25lKVxufTtcblxuLyoqXG4gKiBTZXQgX0NvbnRlbnQtVHlwZV8gcmVzcG9uc2UgaGVhZGVyIHdpdGggYHR5cGVgIHRocm91Z2ggYG1pbWUubG9va3VwKClgXG4gKiB3aGVuIGl0IGRvZXMgbm90IGNvbnRhaW4gXCIvXCIsIG9yIHNldCB0aGUgQ29udGVudC1UeXBlIHRvIGB0eXBlYCBvdGhlcndpc2UuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIHJlcy50eXBlKCcuaHRtbCcpO1xuICogICAgIHJlcy50eXBlKCdodG1sJyk7XG4gKiAgICAgcmVzLnR5cGUoJ2pzb24nKTtcbiAqICAgICByZXMudHlwZSgnYXBwbGljYXRpb24vanNvbicpO1xuICogICAgIHJlcy50eXBlKCdwbmcnKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHJldHVybiB7U2VydmVyUmVzcG9uc2V9IGZvciBjaGFpbmluZ1xuICogQHB1YmxpY1xuICovXG5cbnJlcy5jb250ZW50VHlwZSA9XG5yZXMudHlwZSA9IGZ1bmN0aW9uIGNvbnRlbnRUeXBlKHR5cGUpIHtcbiAgdmFyIGN0ID0gdHlwZS5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBtaW1lLmxvb2t1cCh0eXBlKVxuICAgIDogdHlwZTtcblxuICByZXR1cm4gdGhpcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGN0KTtcbn07XG5cbi8qKlxuICogUmVzcG9uZCB0byB0aGUgQWNjZXB0YWJsZSBmb3JtYXRzIHVzaW5nIGFuIGBvYmpgXG4gKiBvZiBtaW1lLXR5cGUgY2FsbGJhY2tzLlxuICpcbiAqIFRoaXMgbWV0aG9kIHVzZXMgYHJlcS5hY2NlcHRlZGAsIGFuIGFycmF5IG9mXG4gKiBhY2NlcHRhYmxlIHR5cGVzIG9yZGVyZWQgYnkgdGhlaXIgcXVhbGl0eSB2YWx1ZXMuXG4gKiBXaGVuIFwiQWNjZXB0XCIgaXMgbm90IHByZXNlbnQgdGhlIF9maXJzdF8gY2FsbGJhY2tcbiAqIGlzIGludm9rZWQsIG90aGVyd2lzZSB0aGUgZmlyc3QgbWF0Y2ggaXMgdXNlZC4gV2hlblxuICogbm8gbWF0Y2ggaXMgcGVyZm9ybWVkIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aFxuICogNDA2IFwiTm90IEFjY2VwdGFibGVcIi5cbiAqXG4gKiBDb250ZW50LVR5cGUgaXMgc2V0IGZvciB5b3UsIGhvd2V2ZXIgaWYgeW91IGNob29zZVxuICogeW91IG1heSBhbHRlciB0aGlzIHdpdGhpbiB0aGUgY2FsbGJhY2sgdXNpbmcgYHJlcy50eXBlKClgXG4gKiBvciBgcmVzLnNldCgnQ29udGVudC1UeXBlJywgLi4uKWAuXG4gKlxuICogICAgcmVzLmZvcm1hdCh7XG4gKiAgICAgICd0ZXh0L3BsYWluJzogZnVuY3Rpb24oKXtcbiAqICAgICAgICByZXMuc2VuZCgnaGV5Jyk7XG4gKiAgICAgIH0sXG4gKlxuICogICAgICAndGV4dC9odG1sJzogZnVuY3Rpb24oKXtcbiAqICAgICAgICByZXMuc2VuZCgnPHA+aGV5PC9wPicpO1xuICogICAgICB9LFxuICpcbiAqICAgICAgJ2FwcGxpYXRpb24vanNvbic6IGZ1bmN0aW9uKCl7XG4gKiAgICAgICAgcmVzLnNlbmQoeyBtZXNzYWdlOiAnaGV5JyB9KTtcbiAqICAgICAgfVxuICogICAgfSk7XG4gKlxuICogSW4gYWRkaXRpb24gdG8gY2Fub25pY2FsaXplZCBNSU1FIHR5cGVzIHlvdSBtYXlcbiAqIGFsc28gdXNlIGV4dG5hbWVzIG1hcHBlZCB0byB0aGVzZSB0eXBlczpcbiAqXG4gKiAgICByZXMuZm9ybWF0KHtcbiAqICAgICAgdGV4dDogZnVuY3Rpb24oKXtcbiAqICAgICAgICByZXMuc2VuZCgnaGV5Jyk7XG4gKiAgICAgIH0sXG4gKlxuICogICAgICBodG1sOiBmdW5jdGlvbigpe1xuICogICAgICAgIHJlcy5zZW5kKCc8cD5oZXk8L3A+Jyk7XG4gKiAgICAgIH0sXG4gKlxuICogICAgICBqc29uOiBmdW5jdGlvbigpe1xuICogICAgICAgIHJlcy5zZW5kKHsgbWVzc2FnZTogJ2hleScgfSk7XG4gKiAgICAgIH1cbiAqICAgIH0pO1xuICpcbiAqIEJ5IGRlZmF1bHQgRXhwcmVzcyBwYXNzZXMgYW4gYEVycm9yYFxuICogd2l0aCBhIGAuc3RhdHVzYCBvZiA0MDYgdG8gYG5leHQoZXJyKWBcbiAqIGlmIGEgbWF0Y2ggaXMgbm90IG1hZGUuIElmIHlvdSBwcm92aWRlXG4gKiBhIGAuZGVmYXVsdGAgY2FsbGJhY2sgaXQgd2lsbCBiZSBpbnZva2VkXG4gKiBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge1NlcnZlclJlc3BvbnNlfSBmb3IgY2hhaW5pbmdcbiAqIEBwdWJsaWNcbiAqL1xuXG5yZXMuZm9ybWF0ID0gZnVuY3Rpb24ob2JqKXtcbiAgdmFyIHJlcSA9IHRoaXMucmVxO1xuICB2YXIgbmV4dCA9IHJlcS5uZXh0O1xuXG4gIHZhciBmbiA9IG9iai5kZWZhdWx0O1xuICBpZiAoZm4pIGRlbGV0ZSBvYmouZGVmYXVsdDtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG4gIHZhciBrZXkgPSBrZXlzLmxlbmd0aCA+IDBcbiAgICA/IHJlcS5hY2NlcHRzKGtleXMpXG4gICAgOiBmYWxzZTtcblxuICB0aGlzLnZhcnkoXCJBY2NlcHRcIik7XG5cbiAgaWYgKGtleSkge1xuICAgIHRoaXMuc2V0KCdDb250ZW50LVR5cGUnLCBub3JtYWxpemVUeXBlKGtleSkudmFsdWUpO1xuICAgIG9ialtrZXldKHJlcSwgdGhpcywgbmV4dCk7XG4gIH0gZWxzZSBpZiAoZm4pIHtcbiAgICBmbigpO1xuICB9IGVsc2Uge1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ05vdCBBY2NlcHRhYmxlJyk7XG4gICAgZXJyLnN0YXR1cyA9IGVyci5zdGF0dXNDb2RlID0gNDA2O1xuICAgIGVyci50eXBlcyA9IG5vcm1hbGl6ZVR5cGVzKGtleXMpLm1hcChmdW5jdGlvbihvKXsgcmV0dXJuIG8udmFsdWUgfSk7XG4gICAgbmV4dChlcnIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBfQ29udGVudC1EaXNwb3NpdGlvbl8gaGVhZGVyIHRvIF9hdHRhY2htZW50XyB3aXRoIG9wdGlvbmFsIGBmaWxlbmFtZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lXG4gKiBAcmV0dXJuIHtTZXJ2ZXJSZXNwb25zZX1cbiAqIEBwdWJsaWNcbiAqL1xuXG5yZXMuYXR0YWNobWVudCA9IGZ1bmN0aW9uIGF0dGFjaG1lbnQoZmlsZW5hbWUpIHtcbiAgaWYgKGZpbGVuYW1lKSB7XG4gICAgdGhpcy50eXBlKGV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIHRoaXMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgY29udGVudERpc3Bvc2l0aW9uKGZpbGVuYW1lKSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZCBhZGRpdGlvbmFsIGhlYWRlciBgZmllbGRgIHdpdGggdmFsdWUgYHZhbGAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICByZXMuYXBwZW5kKCdMaW5rJywgWyc8aHR0cDovL2xvY2FsaG9zdC8+JywgJzxodHRwOi8vbG9jYWxob3N0OjMwMDAvPiddKTtcbiAqICAgIHJlcy5hcHBlbmQoJ1NldC1Db29raWUnLCAnZm9vPWJhcjsgUGF0aD0vOyBIdHRwT25seScpO1xuICogICAgcmVzLmFwcGVuZCgnV2FybmluZycsICcxOTkgTWlzY2VsbGFuZW91cyB3YXJuaW5nJyk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gdmFsXG4gKiBAcmV0dXJuIHtTZXJ2ZXJSZXNwb25zZX0gZm9yIGNoYWluaW5nXG4gKiBAcHVibGljXG4gKi9cblxucmVzLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChmaWVsZCwgdmFsKSB7XG4gIHZhciBwcmV2ID0gdGhpcy5nZXQoZmllbGQpO1xuICB2YXIgdmFsdWUgPSB2YWw7XG5cbiAgaWYgKHByZXYpIHtcbiAgICAvLyBjb25jYXQgdGhlIG5ldyBhbmQgcHJldiB2YWxzXG4gICAgdmFsdWUgPSBBcnJheS5pc0FycmF5KHByZXYpID8gcHJldi5jb25jYXQodmFsKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHZhbCkgPyBbcHJldl0uY29uY2F0KHZhbClcbiAgICAgIDogW3ByZXYsIHZhbF07XG4gIH1cblxuICByZXR1cm4gdGhpcy5zZXQoZmllbGQsIHZhbHVlKTtcbn07XG5cbi8qKlxuICogU2V0IGhlYWRlciBgZmllbGRgIHRvIGB2YWxgLCBvciBwYXNzXG4gKiBhbiBvYmplY3Qgb2YgaGVhZGVyIGZpZWxkcy5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICByZXMuc2V0KCdGb28nLCBbJ2JhcicsICdiYXonXSk7XG4gKiAgICByZXMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICogICAgcmVzLnNldCh7IEFjY2VwdDogJ3RleHQvcGxhaW4nLCAnWC1BUEktS2V5JzogJ3RvYmknIH0pO1xuICpcbiAqIEFsaWFzZWQgYXMgYHJlcy5oZWFkZXIoKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHZhbFxuICogQHJldHVybiB7U2VydmVyUmVzcG9uc2V9IGZvciBjaGFpbmluZ1xuICogQHB1YmxpY1xuICovXG5cbnJlcy5zZXQgPVxucmVzLmhlYWRlciA9IGZ1bmN0aW9uIGhlYWRlcihmaWVsZCwgdmFsKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgdmFyIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICA/IHZhbC5tYXAoU3RyaW5nKVxuICAgICAgOiBTdHJpbmcodmFsKTtcblxuICAgIC8vIGFkZCBjaGFyc2V0IHRvIGNvbnRlbnQtdHlwZVxuICAgIGlmIChmaWVsZC50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbnRlbnQtVHlwZSBjYW5ub3QgYmUgc2V0IHRvIGFuIEFycmF5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNoYXJzZXRSZWdFeHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgdmFyIGNoYXJzZXQgPSBtaW1lLmNoYXJzZXRzLmxvb2t1cCh2YWx1ZS5zcGxpdCgnOycpWzBdKTtcbiAgICAgICAgaWYgKGNoYXJzZXQpIHZhbHVlICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldEhlYWRlcihmaWVsZCwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiBmaWVsZCkge1xuICAgICAgdGhpcy5zZXQoa2V5LCBmaWVsZFtrZXldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEdldCB2YWx1ZSBmb3IgaGVhZGVyIGBmaWVsZGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cblxucmVzLmdldCA9IGZ1bmN0aW9uKGZpZWxkKXtcbiAgcmV0dXJuIHRoaXMuZ2V0SGVhZGVyKGZpZWxkKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgY29va2llIGBuYW1lYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHJldHVybiB7U2VydmVyUmVzcG9uc2V9IGZvciBjaGFpbmluZ1xuICogQHB1YmxpY1xuICovXG5cbnJlcy5jbGVhckNvb2tpZSA9IGZ1bmN0aW9uIGNsZWFyQ29va2llKG5hbWUsIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBtZXJnZSh7IGV4cGlyZXM6IG5ldyBEYXRlKDEpLCBwYXRoOiAnLycgfSwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIHRoaXMuY29va2llKG5hbWUsICcnLCBvcHRzKTtcbn07XG5cbi8qKlxuICogU2V0IGNvb2tpZSBgbmFtZWAgdG8gYHZhbHVlYCwgd2l0aCB0aGUgZ2l2ZW4gYG9wdGlvbnNgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogICAgLSBgbWF4QWdlYCAgIG1heC1hZ2UgaW4gbWlsbGlzZWNvbmRzLCBjb252ZXJ0ZWQgdG8gYGV4cGlyZXNgXG4gKiAgICAtIGBzaWduZWRgICAgc2lnbiB0aGUgY29va2llXG4gKiAgICAtIGBwYXRoYCAgICAgZGVmYXVsdHMgdG8gXCIvXCJcbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAvLyBcIlJlbWVtYmVyIE1lXCIgZm9yIDE1IG1pbnV0ZXNcbiAqICAgIHJlcy5jb29raWUoJ3JlbWVtYmVybWUnLCAnMScsIHsgZXhwaXJlczogbmV3IERhdGUoRGF0ZS5ub3coKSArIDkwMDAwMCksIGh0dHBPbmx5OiB0cnVlIH0pO1xuICpcbiAqICAgIC8vIHNhdmUgYXMgYWJvdmVcbiAqICAgIHJlcy5jb29raWUoJ3JlbWVtYmVybWUnLCAnMScsIHsgbWF4QWdlOiA5MDAwMDAsIGh0dHBPbmx5OiB0cnVlIH0pXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge1NlcnZlclJlc3BvbnNlfSBmb3IgY2hhaW5pbmdcbiAqIEBwdWJsaWNcbiAqL1xuXG5yZXMuY29va2llID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciBvcHRzID0gbWVyZ2Uoe30sIG9wdGlvbnMpO1xuICB2YXIgc2VjcmV0ID0gdGhpcy5yZXEuc2VjcmV0O1xuICB2YXIgc2lnbmVkID0gb3B0cy5zaWduZWQ7XG5cbiAgaWYgKHNpZ25lZCAmJiAhc2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb29raWVQYXJzZXIoXCJzZWNyZXRcIikgcmVxdWlyZWQgZm9yIHNpZ25lZCBjb29raWVzJyk7XG4gIH1cblxuICB2YXIgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgID8gJ2o6JyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgIDogU3RyaW5nKHZhbHVlKTtcblxuICBpZiAoc2lnbmVkKSB7XG4gICAgdmFsID0gJ3M6JyArIHNpZ24odmFsLCBzZWNyZXQpO1xuICB9XG5cbiAgaWYgKCdtYXhBZ2UnIGluIG9wdHMpIHtcbiAgICBvcHRzLmV4cGlyZXMgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgb3B0cy5tYXhBZ2UpO1xuICAgIG9wdHMubWF4QWdlIC89IDEwMDA7XG4gIH1cblxuICBpZiAob3B0cy5wYXRoID09IG51bGwpIHtcbiAgICBvcHRzLnBhdGggPSAnLyc7XG4gIH1cblxuICB0aGlzLmFwcGVuZCgnU2V0LUNvb2tpZScsIGNvb2tpZS5zZXJpYWxpemUobmFtZSwgU3RyaW5nKHZhbCksIG9wdHMpKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBsb2NhdGlvbiBoZWFkZXIgdG8gYHVybGAuXG4gKlxuICogVGhlIGdpdmVuIGB1cmxgIGNhbiBhbHNvIGJlIFwiYmFja1wiLCB3aGljaCByZWRpcmVjdHNcbiAqIHRvIHRoZSBfUmVmZXJyZXJfIG9yIF9SZWZlcmVyXyBoZWFkZXJzIG9yIFwiL1wiLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgIHJlcy5sb2NhdGlvbignL2Zvby9iYXInKS47XG4gKiAgICByZXMubG9jYXRpb24oJ2h0dHA6Ly9leGFtcGxlLmNvbScpO1xuICogICAgcmVzLmxvY2F0aW9uKCcuLi9sb2dpbicpO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEByZXR1cm4ge1NlcnZlclJlc3BvbnNlfSBmb3IgY2hhaW5pbmdcbiAqIEBwdWJsaWNcbiAqL1xuXG5yZXMubG9jYXRpb24gPSBmdW5jdGlvbiBsb2NhdGlvbih1cmwpIHtcbiAgdmFyIGxvYyA9IHVybDtcblxuICAvLyBcImJhY2tcIiBpcyBhbiBhbGlhcyBmb3IgdGhlIHJlZmVycmVyXG4gIGlmICh1cmwgPT09ICdiYWNrJykge1xuICAgIGxvYyA9IHRoaXMucmVxLmdldCgnUmVmZXJyZXInKSB8fCAnLyc7XG4gIH1cblxuICAvLyBzZXQgbG9jYXRpb25cbiAgcmV0dXJuIHRoaXMuc2V0KCdMb2NhdGlvbicsIGVuY29kZVVybChsb2MpKTtcbn07XG5cbi8qKlxuICogUmVkaXJlY3QgdG8gdGhlIGdpdmVuIGB1cmxgIHdpdGggb3B0aW9uYWwgcmVzcG9uc2UgYHN0YXR1c2BcbiAqIGRlZmF1bHRpbmcgdG8gMzAyLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgYHVybGAgaXMgZGV0ZXJtaW5lZCBieSBgcmVzLmxvY2F0aW9uKClgLCBzb1xuICogaXQgd2lsbCBwbGF5IG5pY2VseSB3aXRoIG1vdW50ZWQgYXBwcywgcmVsYXRpdmUgcGF0aHMsXG4gKiBgXCJiYWNrXCJgIGV0Yy5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICByZXMucmVkaXJlY3QoJy9mb28vYmFyJyk7XG4gKiAgICByZXMucmVkaXJlY3QoJ2h0dHA6Ly9leGFtcGxlLmNvbScpO1xuICogICAgcmVzLnJlZGlyZWN0KDMwMSwgJ2h0dHA6Ly9leGFtcGxlLmNvbScpO1xuICogICAgcmVzLnJlZGlyZWN0KCcuLi9sb2dpbicpOyAvLyAvYmxvZy9wb3N0LzEgLT4gL2Jsb2cvbG9naW5cbiAqXG4gKiBAcHVibGljXG4gKi9cblxucmVzLnJlZGlyZWN0ID0gZnVuY3Rpb24gcmVkaXJlY3QodXJsKSB7XG4gIHZhciBhZGRyZXNzID0gdXJsO1xuICB2YXIgYm9keTtcbiAgdmFyIHN0YXR1cyA9IDMwMjtcblxuICAvLyBhbGxvdyBzdGF0dXMgLyB1cmxcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHN0YXR1cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgIGFkZHJlc3MgPSBhcmd1bWVudHNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlcHJlY2F0ZSgncmVzLnJlZGlyZWN0KHVybCwgc3RhdHVzKTogVXNlIHJlcy5yZWRpcmVjdChzdGF0dXMsIHVybCkgaW5zdGVhZCcpO1xuICAgICAgc3RhdHVzID0gYXJndW1lbnRzWzFdO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBsb2NhdGlvbiBoZWFkZXJcbiAgYWRkcmVzcyA9IHRoaXMubG9jYXRpb24oYWRkcmVzcykuZ2V0KCdMb2NhdGlvbicpO1xuXG4gIC8vIFN1cHBvcnQgdGV4dC97cGxhaW4saHRtbH0gYnkgZGVmYXVsdFxuICB0aGlzLmZvcm1hdCh7XG4gICAgdGV4dDogZnVuY3Rpb24oKXtcbiAgICAgIGJvZHkgPSBzdGF0dXNlc1tzdGF0dXNdICsgJy4gUmVkaXJlY3RpbmcgdG8gJyArIGFkZHJlc3NcbiAgICB9LFxuXG4gICAgaHRtbDogZnVuY3Rpb24oKXtcbiAgICAgIHZhciB1ID0gZXNjYXBlSHRtbChhZGRyZXNzKTtcbiAgICAgIGJvZHkgPSAnPHA+JyArIHN0YXR1c2VzW3N0YXR1c10gKyAnLiBSZWRpcmVjdGluZyB0byA8YSBocmVmPVwiJyArIHUgKyAnXCI+JyArIHUgKyAnPC9hPjwvcD4nXG4gICAgfSxcblxuICAgIGRlZmF1bHQ6IGZ1bmN0aW9uKCl7XG4gICAgICBib2R5ID0gJyc7XG4gICAgfVxuICB9KTtcblxuICAvLyBSZXNwb25kXG4gIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgdGhpcy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgQnVmZmVyLmJ5dGVMZW5ndGgoYm9keSkpO1xuXG4gIGlmICh0aGlzLnJlcS5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIHRoaXMuZW5kKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lbmQoYm9keSk7XG4gIH1cbn07XG5cbi8qKlxuICogQWRkIGBmaWVsZGAgdG8gVmFyeS4gSWYgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBWYXJ5IHNldCwgdGhlblxuICogdGhpcyBjYWxsIGlzIHNpbXBseSBpZ25vcmVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBmaWVsZFxuICogQHJldHVybiB7U2VydmVyUmVzcG9uc2V9IGZvciBjaGFpbmluZ1xuICogQHB1YmxpY1xuICovXG5cbnJlcy52YXJ5ID0gZnVuY3Rpb24oZmllbGQpe1xuICAvLyBjaGVja3MgZm9yIGJhY2stY29tcGF0XG4gIGlmICghZmllbGQgfHwgKEFycmF5LmlzQXJyYXkoZmllbGQpICYmICFmaWVsZC5sZW5ndGgpKSB7XG4gICAgZGVwcmVjYXRlKCdyZXMudmFyeSgpOiBQcm92aWRlIGEgZmllbGQgbmFtZScpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyeSh0aGlzLCBmaWVsZCk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbmRlciBgdmlld2Agd2l0aCB0aGUgZ2l2ZW4gYG9wdGlvbnNgIGFuZCBvcHRpb25hbCBjYWxsYmFjayBgZm5gLlxuICogV2hlbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGdpdmVuIGEgcmVzcG9uc2Ugd2lsbCBfbm90XyBiZSBtYWRlXG4gKiBhdXRvbWF0aWNhbGx5LCBvdGhlcndpc2UgYSByZXNwb25zZSBvZiBfMjAwXyBhbmQgX3RleHQvaHRtbF8gaXMgZ2l2ZW4uXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgY2FjaGVgICAgICBib29sZWFuIGhpbnRpbmcgdG8gdGhlIGVuZ2luZSBpdCBzaG91bGQgY2FjaGVcbiAqICAtIGBmaWxlbmFtZWAgIGZpbGVuYW1lIG9mIHRoZSB2aWV3IGJlaW5nIHJlbmRlcmVkXG4gKlxuICogQHB1YmxpY1xuICovXG5cbnJlcy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIodmlldywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIGFwcCA9IHRoaXMucmVxLmFwcDtcbiAgdmFyIGRvbmUgPSBjYWxsYmFjaztcbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgcmVxID0gdGhpcy5yZXE7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBzdXBwb3J0IGNhbGxiYWNrIGZ1bmN0aW9uIGFzIHNlY29uZCBhcmdcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZG9uZSA9IG9wdGlvbnM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgLy8gbWVyZ2UgcmVzLmxvY2Fsc1xuICBvcHRzLl9sb2NhbHMgPSBzZWxmLmxvY2FscztcblxuICAvLyBkZWZhdWx0IGNhbGxiYWNrIHRvIHJlc3BvbmRcbiAgZG9uZSA9IGRvbmUgfHwgZnVuY3Rpb24gKGVyciwgc3RyKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIHJlcS5uZXh0KGVycik7XG4gICAgc2VsZi5zZW5kKHN0cik7XG4gIH07XG5cbiAgLy8gcmVuZGVyXG4gIGFwcC5yZW5kZXIodmlldywgb3B0cywgZG9uZSk7XG59O1xuXG4vLyBwaXBlIHRoZSBzZW5kIGZpbGUgc3RyZWFtXG5mdW5jdGlvbiBzZW5kZmlsZShyZXMsIGZpbGUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhciBkb25lID0gZmFsc2U7XG4gIHZhciBzdHJlYW1pbmc7XG5cbiAgLy8gcmVxdWVzdCBhYm9ydGVkXG4gIGZ1bmN0aW9uIG9uYWJvcnRlZCgpIHtcbiAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgIGRvbmUgPSB0cnVlO1xuXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignUmVxdWVzdCBhYm9ydGVkJyk7XG4gICAgZXJyLmNvZGUgPSAnRUNPTk5BQk9SVEVEJztcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG5cbiAgLy8gZGlyZWN0b3J5XG4gIGZ1bmN0aW9uIG9uZGlyZWN0b3J5KCkge1xuICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgZG9uZSA9IHRydWU7XG5cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdFSVNESVIsIHJlYWQnKTtcbiAgICBlcnIuY29kZSA9ICdFSVNESVInO1xuICAgIGNhbGxiYWNrKGVycik7XG4gIH1cblxuICAvLyBlcnJvcnNcbiAgZnVuY3Rpb24gb25lcnJvcihlcnIpIHtcbiAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgIGRvbmUgPSB0cnVlO1xuICAgIGNhbGxiYWNrKGVycik7XG4gIH1cblxuICAvLyBlbmRlZFxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgIGRvbmUgPSB0cnVlO1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICAvLyBmaWxlXG4gIGZ1bmN0aW9uIG9uZmlsZSgpIHtcbiAgICBzdHJlYW1pbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGZpbmlzaGVkXG4gIGZ1bmN0aW9uIG9uZmluaXNoKGVycikge1xuICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJykgcmV0dXJuIG9uYWJvcnRlZCgpO1xuICAgIGlmIChlcnIpIHJldHVybiBvbmVycm9yKGVycik7XG4gICAgaWYgKGRvbmUpIHJldHVybjtcblxuICAgIHNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc3RyZWFtaW5nICE9PSBmYWxzZSAmJiAhZG9uZSkge1xuICAgICAgICBvbmFib3J0ZWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc3RyZWFtaW5nXG4gIGZ1bmN0aW9uIG9uc3RyZWFtKCkge1xuICAgIHN0cmVhbWluZyA9IHRydWU7XG4gIH1cblxuICBmaWxlLm9uKCdkaXJlY3RvcnknLCBvbmRpcmVjdG9yeSk7XG4gIGZpbGUub24oJ2VuZCcsIG9uZW5kKTtcbiAgZmlsZS5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgZmlsZS5vbignZmlsZScsIG9uZmlsZSk7XG4gIGZpbGUub24oJ3N0cmVhbScsIG9uc3RyZWFtKTtcbiAgb25GaW5pc2hlZChyZXMsIG9uZmluaXNoKTtcblxuICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgLy8gc2V0IGhlYWRlcnMgb24gc3VjY2Vzc2Z1bCB0cmFuc2ZlclxuICAgIGZpbGUub24oJ2hlYWRlcnMnLCBmdW5jdGlvbiBoZWFkZXJzKHJlcykge1xuICAgICAgdmFyIG9iaiA9IG9wdGlvbnMuaGVhZGVycztcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrID0ga2V5c1tpXTtcbiAgICAgICAgcmVzLnNldEhlYWRlcihrLCBvYmpba10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gcGlwZVxuICBmaWxlLnBpcGUocmVzKTtcbn1cblxuLyoqXG4gKiBTdHJpbmdpZnkgSlNPTiwgbGlrZSBKU09OLnN0cmluZ2lmeSwgYnV0IHY4IG9wdGltaXplZCwgd2l0aCB0aGVcbiAqIGFiaWxpdHkgdG8gZXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBjYW4gdHJpZ2dlciBIVE1MIHNuaWZmaW5nLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlcGxhY2VzXG4gKiBAcGFyYW0ge251bWJlcn0gc3BhY2VzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGVzY2FwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3RyaW5naWZ5ICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlcywgZXNjYXBlKSB7XG4gIC8vIHY4IGNoZWNrcyBhcmd1bWVudHMubGVuZ3RoIGZvciBvcHRpbWl6aW5nIHNpbXBsZSBjYWxsXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQ3MzBcbiAgdmFyIGpzb24gPSByZXBsYWNlciB8fCBzcGFjZXNcbiAgICA/IEpTT04uc3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2VzKVxuICAgIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG4gIGlmIChlc2NhcGUpIHtcbiAgICBqc29uID0ganNvbi5yZXBsYWNlKC9bPD4mXS9nLCBmdW5jdGlvbiAoYykge1xuICAgICAgc3dpdGNoIChjLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgICAgY2FzZSAweDNjOlxuICAgICAgICAgIHJldHVybiAnXFxcXHUwMDNjJ1xuICAgICAgICBjYXNlIDB4M2U6XG4gICAgICAgICAgcmV0dXJuICdcXFxcdTAwM2UnXG4gICAgICAgIGNhc2UgMHgyNjpcbiAgICAgICAgICByZXR1cm4gJ1xcXFx1MDAyNidcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4ganNvblxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2V4cHJlc3MvbGliL3Jlc3BvbnNlLmpzXG4vLyBtb2R1bGUgaWQgPSAxODFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblxuLyoqXG4gKiBTaWduIHRoZSBnaXZlbiBgdmFsYCB3aXRoIGBzZWNyZXRgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWNyZXRcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuc2lnbiA9IGZ1bmN0aW9uKHZhbCwgc2VjcmV0KXtcbiAgaWYgKCdzdHJpbmcnICE9IHR5cGVvZiB2YWwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb29raWUgdmFsdWUgbXVzdCBiZSBwcm92aWRlZCBhcyBhIHN0cmluZy5cIik7XG4gIGlmICgnc3RyaW5nJyAhPSB0eXBlb2Ygc2VjcmV0KSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU2VjcmV0IHN0cmluZyBtdXN0IGJlIHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIHZhbCArICcuJyArIGNyeXB0b1xuICAgIC5jcmVhdGVIbWFjKCdzaGEyNTYnLCBzZWNyZXQpXG4gICAgLnVwZGF0ZSh2YWwpXG4gICAgLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAucmVwbGFjZSgvXFw9KyQvLCAnJyk7XG59O1xuXG4vKipcbiAqIFVuc2lnbiBhbmQgZGVjb2RlIHRoZSBnaXZlbiBgdmFsYCB3aXRoIGBzZWNyZXRgLFxuICogcmV0dXJuaW5nIGBmYWxzZWAgaWYgdGhlIHNpZ25hdHVyZSBpcyBpbnZhbGlkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWNyZXRcbiAqIEByZXR1cm4ge1N0cmluZ3xCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy51bnNpZ24gPSBmdW5jdGlvbih2YWwsIHNlY3JldCl7XG4gIGlmICgnc3RyaW5nJyAhPSB0eXBlb2YgdmFsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU2lnbmVkIGNvb2tpZSBzdHJpbmcgbXVzdCBiZSBwcm92aWRlZC5cIik7XG4gIGlmICgnc3RyaW5nJyAhPSB0eXBlb2Ygc2VjcmV0KSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU2VjcmV0IHN0cmluZyBtdXN0IGJlIHByb3ZpZGVkLlwiKTtcbiAgdmFyIHN0ciA9IHZhbC5zbGljZSgwLCB2YWwubGFzdEluZGV4T2YoJy4nKSlcbiAgICAsIG1hYyA9IGV4cG9ydHMuc2lnbihzdHIsIHNlY3JldCk7XG4gIFxuICByZXR1cm4gc2hhMShtYWMpID09IHNoYTEodmFsKSA/IHN0ciA6IGZhbHNlO1xufTtcblxuLyoqXG4gKiBQcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2hhMShzdHIpe1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoc3RyKS5kaWdlc3QoJ2hleCcpO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2Nvb2tpZS1zaWduYXR1cmUvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE4MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIGNvb2tpZVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBSb21hbiBTaHR5bG1hblxuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50O1xudmFyIGVuY29kZSA9IGVuY29kZVVSSUNvbXBvbmVudDtcbnZhciBwYWlyU3BsaXRSZWdFeHAgPSAvOyAqLztcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggZmllbGQtY29udGVudCBpbiBSRkMgNzIzMCBzZWMgMy4yXG4gKlxuICogZmllbGQtY29udGVudCA9IGZpZWxkLXZjaGFyIFsgMSooIFNQIC8gSFRBQiApIGZpZWxkLXZjaGFyIF1cbiAqIGZpZWxkLXZjaGFyICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKiBvYnMtdGV4dCAgICAgID0gJXg4MC1GRlxuICovXG5cbnZhciBmaWVsZENvbnRlbnRSZWdFeHAgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSskLztcblxuLyoqXG4gKiBQYXJzZSBhIGNvb2tpZSBoZWFkZXIuXG4gKlxuICogUGFyc2UgdGhlIGdpdmVuIGNvb2tpZSBoZWFkZXIgc3RyaW5nIGludG8gYW4gb2JqZWN0XG4gKiBUaGUgb2JqZWN0IGhhcyB0aGUgdmFyaW91cyBjb29raWVzIGFzIGtleXMobmFtZXMpID0+IHZhbHVlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc3RyIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIHZhciBvYmogPSB7fVxuICB2YXIgb3B0ID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHBhaXJzID0gc3RyLnNwbGl0KHBhaXJTcGxpdFJlZ0V4cCk7XG4gIHZhciBkZWMgPSBvcHQuZGVjb2RlIHx8IGRlY29kZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBhaXIgPSBwYWlyc1tpXTtcbiAgICB2YXIgZXFfaWR4ID0gcGFpci5pbmRleE9mKCc9Jyk7XG5cbiAgICAvLyBza2lwIHRoaW5ncyB0aGF0IGRvbid0IGxvb2sgbGlrZSBrZXk9dmFsdWVcbiAgICBpZiAoZXFfaWR4IDwgMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IHBhaXIuc3Vic3RyKDAsIGVxX2lkeCkudHJpbSgpXG4gICAgdmFyIHZhbCA9IHBhaXIuc3Vic3RyKCsrZXFfaWR4LCBwYWlyLmxlbmd0aCkudHJpbSgpO1xuXG4gICAgLy8gcXVvdGVkIHZhbHVlc1xuICAgIGlmICgnXCInID09IHZhbFswXSkge1xuICAgICAgdmFsID0gdmFsLnNsaWNlKDEsIC0xKTtcbiAgICB9XG5cbiAgICAvLyBvbmx5IGFzc2lnbiBvbmNlXG4gICAgaWYgKHVuZGVmaW5lZCA9PSBvYmpba2V5XSkge1xuICAgICAgb2JqW2tleV0gPSB0cnlEZWNvZGUodmFsLCBkZWMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIGRhdGEgaW50byBhIGNvb2tpZSBoZWFkZXIuXG4gKlxuICogU2VyaWFsaXplIHRoZSBhIG5hbWUgdmFsdWUgcGFpciBpbnRvIGEgY29va2llIHN0cmluZyBzdWl0YWJsZSBmb3JcbiAqIGh0dHAgaGVhZGVycy4gQW4gb3B0aW9uYWwgb3B0aW9ucyBvYmplY3Qgc3BlY2lmaWVkIGNvb2tpZSBwYXJhbWV0ZXJzLlxuICpcbiAqIHNlcmlhbGl6ZSgnZm9vJywgJ2JhcicsIHsgaHR0cE9ubHk6IHRydWUgfSlcbiAqICAgPT4gXCJmb289YmFyOyBodHRwT25seVwiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBzZXJpYWxpemUobmFtZSwgdmFsLCBvcHRpb25zKSB7XG4gIHZhciBvcHQgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgZW5jID0gb3B0LmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgaWYgKHR5cGVvZiBlbmMgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gZW5jb2RlIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIGlmICghZmllbGRDb250ZW50UmVnRXhwLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBuYW1lIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVuYyh2YWwpO1xuXG4gIGlmICh2YWx1ZSAmJiAhZmllbGRDb250ZW50UmVnRXhwLnRlc3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgdmFsIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHZhciBzdHIgPSBuYW1lICsgJz0nICsgdmFsdWU7XG5cbiAgaWYgKG51bGwgIT0gb3B0Lm1heEFnZSkge1xuICAgIHZhciBtYXhBZ2UgPSBvcHQubWF4QWdlIC0gMDtcbiAgICBpZiAoaXNOYU4obWF4QWdlKSkgdGhyb3cgbmV3IEVycm9yKCdtYXhBZ2Ugc2hvdWxkIGJlIGEgTnVtYmVyJyk7XG4gICAgc3RyICs9ICc7IE1heC1BZ2U9JyArIE1hdGguZmxvb3IobWF4QWdlKTtcbiAgfVxuXG4gIGlmIChvcHQuZG9tYWluKSB7XG4gICAgaWYgKCFmaWVsZENvbnRlbnRSZWdFeHAudGVzdChvcHQuZG9tYWluKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIGRvbWFpbiBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgc3RyICs9ICc7IERvbWFpbj0nICsgb3B0LmRvbWFpbjtcbiAgfVxuXG4gIGlmIChvcHQucGF0aCkge1xuICAgIGlmICghZmllbGRDb250ZW50UmVnRXhwLnRlc3Qob3B0LnBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gcGF0aCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgc3RyICs9ICc7IFBhdGg9JyArIG9wdC5wYXRoO1xuICB9XG5cbiAgaWYgKG9wdC5leHBpcmVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHQuZXhwaXJlcy50b1VUQ1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIGV4cGlyZXMgaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIHN0ciArPSAnOyBFeHBpcmVzPScgKyBvcHQuZXhwaXJlcy50b1VUQ1N0cmluZygpO1xuICB9XG5cbiAgaWYgKG9wdC5odHRwT25seSkge1xuICAgIHN0ciArPSAnOyBIdHRwT25seSc7XG4gIH1cblxuICBpZiAob3B0LnNlY3VyZSkge1xuICAgIHN0ciArPSAnOyBTZWN1cmUnO1xuICB9XG5cbiAgaWYgKG9wdC5zYW1lU2l0ZSkge1xuICAgIHZhciBzYW1lU2l0ZSA9IHR5cGVvZiBvcHQuc2FtZVNpdGUgPT09ICdzdHJpbmcnXG4gICAgICA/IG9wdC5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpIDogb3B0LnNhbWVTaXRlO1xuXG4gICAgc3dpdGNoIChzYW1lU2l0ZSkge1xuICAgICAgY2FzZSB0cnVlOlxuICAgICAgICBzdHIgKz0gJzsgU2FtZVNpdGU9U3RyaWN0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYXgnOlxuICAgICAgICBzdHIgKz0gJzsgU2FtZVNpdGU9TGF4JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdHJpY3QnOlxuICAgICAgICBzdHIgKz0gJzsgU2FtZVNpdGU9U3RyaWN0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gc2FtZVNpdGUgaXMgaW52YWxpZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogVHJ5IGRlY29kaW5nIGEgc3RyaW5nIHVzaW5nIGEgZGVjb2RpbmcgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtmdW5jdGlvbn0gZGVjb2RlXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHRyeURlY29kZShzdHIsIGRlY29kZSkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGUoc3RyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb29raWUvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE4M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIHZhcnlcbiAqIENvcHlyaWdodChjKSAyMDE0LTIwMTcgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gdmFyeVxubW9kdWxlLmV4cG9ydHMuYXBwZW5kID0gYXBwZW5kXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIGZpZWxkLW5hbWUgaW4gUkZDIDcyMzAgc2VjIDMuMlxuICpcbiAqIGZpZWxkLW5hbWUgICAgPSB0b2tlblxuICogdG9rZW4gICAgICAgICA9IDEqdGNoYXJcbiAqIHRjaGFyICAgICAgICAgPSBcIiFcIiAvIFwiI1wiIC8gXCIkXCIgLyBcIiVcIiAvIFwiJlwiIC8gXCInXCIgLyBcIipcIlxuICogICAgICAgICAgICAgICAvIFwiK1wiIC8gXCItXCIgLyBcIi5cIiAvIFwiXlwiIC8gXCJfXCIgLyBcImBcIiAvIFwifFwiIC8gXCJ+XCJcbiAqICAgICAgICAgICAgICAgLyBESUdJVCAvIEFMUEhBXG4gKiAgICAgICAgICAgICAgIDsgYW55IFZDSEFSLCBleGNlcHQgZGVsaW1pdGVyc1xuICovXG5cbnZhciBGSUVMRF9OQU1FX1JFR0VYUCA9IC9eWyEjJCUmJyorXFwtLl5fYHx+MC05QS1aYS16XSskL1xuXG4vKipcbiAqIEFwcGVuZCBhIGZpZWxkIHRvIGEgdmFyeSBoZWFkZXIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlclxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gYXBwZW5kIChoZWFkZXIsIGZpZWxkKSB7XG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2hlYWRlciBhcmd1bWVudCBpcyByZXF1aXJlZCcpXG4gIH1cblxuICBpZiAoIWZpZWxkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmllbGQgYXJndW1lbnQgaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gZ2V0IGZpZWxkcyBhcnJheVxuICB2YXIgZmllbGRzID0gIUFycmF5LmlzQXJyYXkoZmllbGQpXG4gICAgPyBwYXJzZShTdHJpbmcoZmllbGQpKVxuICAgIDogZmllbGRcblxuICAvLyBhc3NlcnQgb24gaW52YWxpZCBmaWVsZCBuYW1lc1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGZpZWxkcy5sZW5ndGg7IGorKykge1xuICAgIGlmICghRklFTERfTkFNRV9SRUdFWFAudGVzdChmaWVsZHNbal0pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmaWVsZCBhcmd1bWVudCBjb250YWlucyBhbiBpbnZhbGlkIGhlYWRlciBuYW1lJylcbiAgICB9XG4gIH1cblxuICAvLyBleGlzdGluZywgdW5zcGVjaWZpZWQgdmFyeVxuICBpZiAoaGVhZGVyID09PSAnKicpIHtcbiAgICByZXR1cm4gaGVhZGVyXG4gIH1cblxuICAvLyBlbnVtZXJhdGUgY3VycmVudCB2YWx1ZXNcbiAgdmFyIHZhbCA9IGhlYWRlclxuICB2YXIgdmFscyA9IHBhcnNlKGhlYWRlci50b0xvd2VyQ2FzZSgpKVxuXG4gIC8vIHVuc3BlY2lmaWVkIHZhcnlcbiAgaWYgKGZpZWxkcy5pbmRleE9mKCcqJykgIT09IC0xIHx8IHZhbHMuaW5kZXhPZignKicpICE9PSAtMSkge1xuICAgIHJldHVybiAnKidcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGZsZCA9IGZpZWxkc1tpXS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyBhcHBlbmQgdmFsdWUgKGNhc2UtcHJlc2VydmluZylcbiAgICBpZiAodmFscy5pbmRleE9mKGZsZCkgPT09IC0xKSB7XG4gICAgICB2YWxzLnB1c2goZmxkKVxuICAgICAgdmFsID0gdmFsXG4gICAgICAgID8gdmFsICsgJywgJyArIGZpZWxkc1tpXVxuICAgICAgICA6IGZpZWxkc1tpXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHZhcnkgaGVhZGVyIGludG8gYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlIChoZWFkZXIpIHtcbiAgdmFyIGVuZCA9IDBcbiAgdmFyIGxpc3QgPSBbXVxuICB2YXIgc3RhcnQgPSAwXG5cbiAgLy8gZ2F0aGVyIHRva2Vuc1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gaGVhZGVyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc3dpdGNoIChoZWFkZXIuY2hhckNvZGVBdChpKSkge1xuICAgICAgY2FzZSAweDIwOiAvKiAgICovXG4gICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XG4gICAgICAgICAgc3RhcnQgPSBlbmQgPSBpICsgMVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDB4MmM6IC8qICwgKi9cbiAgICAgICAgbGlzdC5wdXNoKGhlYWRlci5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpXG4gICAgICAgIHN0YXJ0ID0gZW5kID0gaSArIDFcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVuZCA9IGkgKyAxXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gZmluYWwgdG9rZW5cbiAgbGlzdC5wdXNoKGhlYWRlci5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpXG5cbiAgcmV0dXJuIGxpc3Rcbn1cblxuLyoqXG4gKiBNYXJrIHRoYXQgYSByZXF1ZXN0IGlzIHZhcmllZCBvbiBhIGhlYWRlciBmaWVsZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVzXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gZmllbGRcbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiB2YXJ5IChyZXMsIGZpZWxkKSB7XG4gIGlmICghcmVzIHx8ICFyZXMuZ2V0SGVhZGVyIHx8ICFyZXMuc2V0SGVhZGVyKSB7XG4gICAgLy8gcXVhY2sgcXVhY2tcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZXMgYXJndW1lbnQgaXMgcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gZ2V0IGV4aXN0aW5nIGhlYWRlclxuICB2YXIgdmFsID0gcmVzLmdldEhlYWRlcignVmFyeScpIHx8ICcnXG4gIHZhciBoZWFkZXIgPSBBcnJheS5pc0FycmF5KHZhbClcbiAgICA/IHZhbC5qb2luKCcsICcpXG4gICAgOiBTdHJpbmcodmFsKVxuXG4gIC8vIHNldCBuZXcgaGVhZGVyXG4gIGlmICgodmFsID0gYXBwZW5kKGhlYWRlciwgZmllbGQpKSkge1xuICAgIHJlcy5zZXRIZWFkZXIoJ1ZhcnknLCB2YWwpXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy92YXJ5L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxODRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyohXG4gKiBzZXJ2ZS1zdGF0aWNcbiAqIENvcHlyaWdodChjKSAyMDEwIFNlbmNoYSBJbmMuXG4gKiBDb3B5cmlnaHQoYykgMjAxMSBUSiBIb2xvd2F5Y2h1a1xuICogQ29weXJpZ2h0KGMpIDIwMTQtMjAxNiBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGVuY29kZVVybCA9IHJlcXVpcmUoJ2VuY29kZXVybCcpXG52YXIgZXNjYXBlSHRtbCA9IHJlcXVpcmUoJ2VzY2FwZS1odG1sJylcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3BhcnNldXJsJylcbnZhciByZXNvbHZlID0gcmVxdWlyZSgncGF0aCcpLnJlc29sdmVcbnZhciBzZW5kID0gcmVxdWlyZSgnc2VuZCcpXG52YXIgdXJsID0gcmVxdWlyZSgndXJsJylcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNlcnZlU3RhdGljXG5tb2R1bGUuZXhwb3J0cy5taW1lID0gc2VuZC5taW1lXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHNlcnZlU3RhdGljIChyb290LCBvcHRpb25zKSB7XG4gIGlmICghcm9vdCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jvb3QgcGF0aCByZXF1aXJlZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIHJvb3QgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncm9vdCBwYXRoIG11c3QgYmUgYSBzdHJpbmcnKVxuICB9XG5cbiAgLy8gY29weSBvcHRpb25zIG9iamVjdFxuICB2YXIgb3B0cyA9IE9iamVjdC5jcmVhdGUob3B0aW9ucyB8fCBudWxsKVxuXG4gIC8vIGZhbGwtdGhvdWdoXG4gIHZhciBmYWxsdGhyb3VnaCA9IG9wdHMuZmFsbHRocm91Z2ggIT09IGZhbHNlXG5cbiAgLy8gZGVmYXVsdCByZWRpcmVjdFxuICB2YXIgcmVkaXJlY3QgPSBvcHRzLnJlZGlyZWN0ICE9PSBmYWxzZVxuXG4gIC8vIGhlYWRlcnMgbGlzdGVuZXJcbiAgdmFyIHNldEhlYWRlcnMgPSBvcHRzLnNldEhlYWRlcnNcblxuICBpZiAoc2V0SGVhZGVycyAmJiB0eXBlb2Ygc2V0SGVhZGVycyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBzZXRIZWFkZXJzIG11c3QgYmUgZnVuY3Rpb24nKVxuICB9XG5cbiAgLy8gc2V0dXAgb3B0aW9ucyBmb3Igc2VuZFxuICBvcHRzLm1heGFnZSA9IG9wdHMubWF4YWdlIHx8IG9wdHMubWF4QWdlIHx8IDBcbiAgb3B0cy5yb290ID0gcmVzb2x2ZShyb290KVxuXG4gIC8vIGNvbnN0cnVjdCBkaXJlY3RvcnkgbGlzdGVuZXJcbiAgdmFyIG9uRGlyZWN0b3J5ID0gcmVkaXJlY3RcbiAgICA/IGNyZWF0ZVJlZGlyZWN0RGlyZWN0b3J5TGlzdGVuZXIoKVxuICAgIDogY3JlYXRlTm90Rm91bmREaXJlY3RvcnlMaXN0ZW5lcigpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHNlcnZlU3RhdGljIChyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEubWV0aG9kICE9PSAnR0VUJyAmJiByZXEubWV0aG9kICE9PSAnSEVBRCcpIHtcbiAgICAgIGlmIChmYWxsdGhyb3VnaCkge1xuICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICB9XG5cbiAgICAgIC8vIG1ldGhvZCBub3QgYWxsb3dlZFxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDVcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0FsbG93JywgJ0dFVCwgSEVBRCcpXG4gICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsICcwJylcbiAgICAgIHJlcy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGZvcndhcmRFcnJvciA9ICFmYWxsdGhyb3VnaFxuICAgIHZhciBvcmlnaW5hbFVybCA9IHBhcnNlVXJsLm9yaWdpbmFsKHJlcSlcbiAgICB2YXIgcGF0aCA9IHBhcnNlVXJsKHJlcSkucGF0aG5hbWVcblxuICAgIC8vIG1ha2Ugc3VyZSByZWRpcmVjdCBvY2N1cnMgYXQgbW91bnRcbiAgICBpZiAocGF0aCA9PT0gJy8nICYmIG9yaWdpbmFsVXJsLnBhdGhuYW1lLnN1YnN0cigtMSkgIT09ICcvJykge1xuICAgICAgcGF0aCA9ICcnXG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIHNlbmQgc3RyZWFtXG4gICAgdmFyIHN0cmVhbSA9IHNlbmQocmVxLCBwYXRoLCBvcHRzKVxuXG4gICAgLy8gYWRkIGRpcmVjdG9yeSBoYW5kbGVyXG4gICAgc3RyZWFtLm9uKCdkaXJlY3RvcnknLCBvbkRpcmVjdG9yeSlcblxuICAgIC8vIGFkZCBoZWFkZXJzIGxpc3RlbmVyXG4gICAgaWYgKHNldEhlYWRlcnMpIHtcbiAgICAgIHN0cmVhbS5vbignaGVhZGVycycsIHNldEhlYWRlcnMpXG4gICAgfVxuXG4gICAgLy8gYWRkIGZpbGUgbGlzdGVuZXIgZm9yIGZhbGx0aHJvdWdoXG4gICAgaWYgKGZhbGx0aHJvdWdoKSB7XG4gICAgICBzdHJlYW0ub24oJ2ZpbGUnLCBmdW5jdGlvbiBvbkZpbGUgKCkge1xuICAgICAgICAvLyBvbmNlIGZpbGUgaXMgZGV0ZXJtaW5lZCwgYWx3YXlzIGZvcndhcmQgZXJyb3JcbiAgICAgICAgZm9yd2FyZEVycm9yID0gdHJ1ZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBmb3J3YXJkIGVycm9yc1xuICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBlcnJvciAoZXJyKSB7XG4gICAgICBpZiAoZm9yd2FyZEVycm9yIHx8ICEoZXJyLnN0YXR1c0NvZGUgPCA1MDApKSB7XG4gICAgICAgIG5leHQoZXJyKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbmV4dCgpXG4gICAgfSlcblxuICAgIC8vIHBpcGVcbiAgICBzdHJlYW0ucGlwZShyZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBhbGwgbGVhZGluZyBzbGFzaGVzIGludG8gYSBzaW5nbGUgc2xhc2hcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbGxhcHNlTGVhZGluZ1NsYXNoZXMgKHN0cikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHIuY2hhckNvZGVBdChpKSAhPT0gMHgyZiAvKiAvICovKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpID4gMVxuICAgID8gJy8nICsgc3RyLnN1YnN0cihpKVxuICAgIDogc3RyXG59XG5cbiAvKipcbiAqIENyZWF0ZSBhIG1pbmltYWwgSFRNTCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBib2R5XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUh0bWxEb2N1bWVudCAodGl0bGUsIGJvZHkpIHtcbiAgcmV0dXJuICc8IURPQ1RZUEUgaHRtbD5cXG4nICtcbiAgICAnPGh0bWwgbGFuZz1cImVuXCI+XFxuJyArXG4gICAgJzxoZWFkPlxcbicgK1xuICAgICc8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cXG4nICtcbiAgICAnPHRpdGxlPicgKyB0aXRsZSArICc8L3RpdGxlPlxcbicgK1xuICAgICc8L2hlYWQ+XFxuJyArXG4gICAgJzxib2R5PlxcbicgK1xuICAgICc8cHJlPicgKyBib2R5ICsgJzwvcHJlPlxcbicgK1xuICAgICc8L2JvZHk+XFxuJyArXG4gICAgJzwvaHRtbD5cXG4nXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZGlyZWN0b3J5IGxpc3RlbmVyIHRoYXQganVzdCA0MDRzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVOb3RGb3VuZERpcmVjdG9yeUxpc3RlbmVyICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG5vdEZvdW5kICgpIHtcbiAgICB0aGlzLmVycm9yKDQwNClcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGRpcmVjdG9yeSBsaXN0ZW5lciB0aGF0IHBlcmZvcm1zIGEgcmVkaXJlY3QuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0RGlyZWN0b3J5TGlzdGVuZXIgKCkge1xuICByZXR1cm4gZnVuY3Rpb24gcmVkaXJlY3QgKHJlcykge1xuICAgIGlmICh0aGlzLmhhc1RyYWlsaW5nU2xhc2goKSkge1xuICAgICAgdGhpcy5lcnJvcig0MDQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBnZXQgb3JpZ2luYWwgVVJMXG4gICAgdmFyIG9yaWdpbmFsVXJsID0gcGFyc2VVcmwub3JpZ2luYWwodGhpcy5yZXEpXG5cbiAgICAvLyBhcHBlbmQgdHJhaWxpbmcgc2xhc2hcbiAgICBvcmlnaW5hbFVybC5wYXRoID0gbnVsbFxuICAgIG9yaWdpbmFsVXJsLnBhdGhuYW1lID0gY29sbGFwc2VMZWFkaW5nU2xhc2hlcyhvcmlnaW5hbFVybC5wYXRobmFtZSArICcvJylcblxuICAgIC8vIHJlZm9ybWF0IHRoZSBVUkxcbiAgICB2YXIgbG9jID0gZW5jb2RlVXJsKHVybC5mb3JtYXQob3JpZ2luYWxVcmwpKVxuICAgIHZhciBkb2MgPSBjcmVhdGVIdG1sRG9jdW1lbnQoJ1JlZGlyZWN0aW5nJywgJ1JlZGlyZWN0aW5nIHRvIDxhIGhyZWY9XCInICsgZXNjYXBlSHRtbChsb2MpICsgJ1wiPicgK1xuICAgICAgZXNjYXBlSHRtbChsb2MpICsgJzwvYT4nKVxuXG4gICAgLy8gc2VuZCByZWRpcmVjdCByZXNwb25zZVxuICAgIHJlcy5zdGF0dXNDb2RlID0gMzAxXG4gICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcpXG4gICAgcmVzLnNldEhlYWRlcignQ29udGVudC1MZW5ndGgnLCBCdWZmZXIuYnl0ZUxlbmd0aChkb2MpKVxuICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JywgXCJkZWZhdWx0LXNyYyAnc2VsZidcIilcbiAgICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKVxuICAgIHJlcy5zZXRIZWFkZXIoJ0xvY2F0aW9uJywgbG9jKVxuICAgIHJlcy5lbmQoZG9jKVxuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvc2VydmUtc3RhdGljL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxODVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMgZXhwcmVzcyBmcm9tICdleHByZXNzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNvdXJjZSxcbiAgTWV0cmljLFxuICBBbm9tYWx5LFxuICBzYXZlQW5vbWFseSxcbiAgaW5zZXJ0QW5vbWFseSwgcmVtb3ZlQW5vbWFseSwgbG9hZEFub21hbHlCeU5hbWUsIGxvYWRBbm9tYWx5QnlJZCwgZ2V0QW5vbWFseUlkQnlOYW1lXG59IGZyb20gJy4uL3NlcnZpY2VzL2Fub21hbHlUeXBlJztcbmltcG9ydCB7IHJ1bkxlYXJuaW5nIH0gZnJvbSAnLi4vc2VydmljZXMvYW5hbHl0aWNzJ1xuaW1wb3J0IHsgc2F2ZVRhcmdldHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRyaWNzJztcblxuYXN5bmMgZnVuY3Rpb24gc2VuZEFub21hbHlUeXBlU3RhdHVzKHJlcSwgcmVzKSB7XG4gIGxldCBpZCA9IHJlcS5xdWVyeS5pZDtcbiAgbGV0IG5hbWUgPSByZXEucXVlcnkubmFtZTtcbiAgdHJ5IHtcbiAgICBsZXQgYW5vbWFseTogQW5vbWFseTtcbiAgICBpZihpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbm9tYWx5ID0gbG9hZEFub21hbHlCeUlkKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5vbWFseSA9IGxvYWRBbm9tYWx5QnlOYW1lKG5hbWUpO1xuICAgIH1cbiAgICBpZihhbm9tYWx5ID09PSBudWxsKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuc2VuZCh7XG4gICAgICAgIGNvZGU6IDQwNCxcbiAgICAgICAgbWVzc2FnZTogJ05vdCBmb3VuZCdcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZihhbm9tYWx5LnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHN0YXR1cyBmb3IgJyArIG5hbWUpO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKDIwMCkuc2VuZCh7IHN0YXR1czogYW5vbWFseS5zdGF0dXMsIGVycm9yTWVzc2FnZTogYW5vbWFseS5lcnJvciB9KTtcbiAgfSBjYXRjaChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAvLyBUT0RPOiBiZXR0ZXIgc2VuZCA0MDQgd2hlbiB3ZSBrbm93IHRoYW4gaXNuYHQgZm91bmRcbiAgICByZXMuc3RhdHVzKDUwMCkuc2VuZCh7IGVycm9yOiAnQ2FuYHQgcmV0dXJuIGFueXRoaW5nJyB9KTtcbiAgfVxuXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFub21hbHkocmVxLCByZXMpIHtcbiAgdHJ5IHtcbiAgICBsZXQgaWQgPSByZXEucXVlcnkuaWQ7XG4gICAgbGV0IG5hbWUgPSByZXEucXVlcnkubmFtZTtcblxuICAgIGxldCBhbm9tYWx5OkFub21hbHk7XG4gICAgaWYoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYW5vbWFseSA9IGxvYWRBbm9tYWx5QnlJZChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFub21hbHkgPSBsb2FkQW5vbWFseUJ5TmFtZShuYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBpZihhbm9tYWx5ID09PSBudWxsKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuc2VuZCh7XG4gICAgICAgIGNvZGU6IDQwNCxcbiAgICAgICAgbWVzc2FnZTogJ05vdCBmb3VuZCdcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgbmFtZTogYW5vbWFseS5uYW1lLFxuICAgICAgbWV0cmljOiBhbm9tYWx5Lm1ldHJpYyxcbiAgICAgIHN0YXR1czogYW5vbWFseS5zdGF0dXNcbiAgICB9KTtcbiAgICByZXMuc3RhdHVzKDIwMCkuc2VuZChwYXlsb2FkKVxuICB9IGNhdGNoKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIC8vIFRPRE86IGJldHRlciBzZW5kIDQwNCB3aGVuIHdlIGtub3cgdGhhbiBpc25gdCBmb3VuZFxuICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCdDYW5gdCBnZXQgYW55dGhpbmcnKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBbm9tYWx5KHJlcSwgcmVzKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbWV0cmljOk1ldHJpYyA9IHtcbiAgICAgIGRhdGFzb3VyY2U6IHJlcS5ib2R5Lm1ldHJpYy5kYXRhc291cmNlLFxuICAgICAgdGFyZ2V0czogc2F2ZVRhcmdldHMocmVxLmJvZHkubWV0cmljLnRhcmdldHMpXG4gICAgfTtcblxuICAgIGNvbnN0IGFub21hbHk6QW5vbWFseSA9IHtcbiAgICAgIG5hbWU6IHJlcS5ib2R5Lm5hbWUsXG4gICAgICBwYW5lbFVybDogcmVxLmJvZHkucGFuZWxVcmwsXG4gICAgICBtZXRyaWM6IG1ldHJpYyxcbiAgICAgIGRhdGFzb3VyY2U6IHJlcS5ib2R5LmRhdGFzb3VyY2UsXG4gICAgICBzdGF0dXM6ICdsZWFybmluZycsXG4gICAgICBsYXN0X3ByZWRpY3Rpb25fdGltZTogMCxcbiAgICAgIG5leHRfaWQ6IDBcbiAgICB9O1xuICAgIGxldCBhbm9tYWx5SWQgPSBpbnNlcnRBbm9tYWx5KGFub21hbHkpO1xuICAgIGlmKGFub21hbHlJZCA9PT0gbnVsbCkge1xuICAgICAgcmVzLnN0YXR1cyg0MDMpLnNlbmQoe1xuICAgICAgICBjb2RlOiA0MDMsXG4gICAgICAgIG1lc3NhZ2U6ICdBbHJlYWR5IGV4aXN0cydcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoeyBhbm9tYWx5X2lkOiBhbm9tYWx5SWQgfSlcbiAgICByZXMuc3RhdHVzKDIwMCkuc2VuZChwYXlsb2FkKTtcblxuICAgIHJ1bkxlYXJuaW5nKGFub21hbHlJZCk7XG4gIH0gY2F0Y2goZSkge1xuICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHtcbiAgICAgIGNvZGU6IDUwMCxcbiAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBlcnJvcidcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWxldGVBbm9tYWx5KHJlcSwgcmVzKSB7XG4gIHRyeSB7XG4gICAgbGV0IGlkID0gcmVxLnF1ZXJ5LmlkO1xuICAgIGxldCBuYW1lID0gcmVxLnF1ZXJ5Lm5hbWU7XG5cbiAgICBpZihpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZW1vdmVBbm9tYWx5KGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlQW5vbWFseShuYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBcbiAgICByZXMuc3RhdHVzKDIwMCkuc2VuZCh7XG4gICAgICBjb2RlOiAyMDAsXG4gICAgICBtZXNzYWdlOiAnU3VjY2VzcydcbiAgICB9KTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgY29kZTogNTAwLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIGVycm9yJ1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuXG5yb3V0ZXIuZ2V0KCcvc3RhdHVzJywgc2VuZEFub21hbHlUeXBlU3RhdHVzKTtcbnJvdXRlci5nZXQoJy8nLCBnZXRBbm9tYWx5KTtcbnJvdXRlci5wb3N0KCcvJywgY3JlYXRlQW5vbWFseSk7XG5yb3V0ZXIuZGVsZXRlKCcvJywgZGVsZXRlQW5vbWFseSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yb3V0ZXMvYW5vbWFsaWVzLnRzIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJyk7XG52YXIgJEpTT04gPSBjb3JlLkpTT04gfHwgKGNvcmUuSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuICRKU09OLnN0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJndW1lbnRzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL2pzb24vc3RyaW5naWZ5LmpzXG4vLyBtb2R1bGUgaWQgPSAxODdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4vLyBUaGlzIG1ldGhvZCBvZiBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgbmVlZHMgdG8gYmVcbi8vIGtlcHQgaWRlbnRpY2FsIHRvIHRoZSB3YXkgaXQgaXMgb2J0YWluZWQgaW4gcnVudGltZS5qc1xudmFyIGcgPSAoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzIH0pKCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXG4vLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcbi8vIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIGdsb2JhbCBgc2VsZmAgb2JqZWN0IGluIGEgd29ya2VyLiBTZWUgIzE4My5cbnZhciBoYWRSdW50aW1lID0gZy5yZWdlbmVyYXRvclJ1bnRpbWUgJiZcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG4vLyBTYXZlIHRoZSBvbGQgcmVnZW5lcmF0b3JSdW50aW1lIGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuXG52YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cbi8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cbmcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3J1bnRpbWVcIik7XG5cbmlmIChoYWRSdW50aW1lKSB7XG4gIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG4gIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbn0gZWxzZSB7XG4gIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG4gIHRyeSB7XG4gICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICB9IGNhdGNoKGUpIHtcbiAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS1tb2R1bGUuanNcbi8vIG1vZHVsZSBpZCA9IDE4OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuICAgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcbiAgICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gSW4gc2xvcHB5IG1vZGUsIHVuYm91bmQgYHRoaXNgIHJlZmVycyB0byB0aGUgZ2xvYmFsIG9iamVjdCwgZmFsbGJhY2sgdG9cbiAgLy8gRnVuY3Rpb24gY29uc3RydWN0b3IgaWYgd2UncmUgaW4gZ2xvYmFsIHN0cmljdCBtb2RlLiBUaGF0IGlzIHNhZGx5IGEgZm9ybVxuICAvLyBvZiBpbmRpcmVjdCBldmFsIHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5LlxuICAoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzIH0pKCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpXG4pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qc1xuLy8gbW9kdWxlIGlkID0gMTg5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3LnByb21pc2UudHJ5Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5Qcm9taXNlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlLmpzXG4vLyBtb2R1bGUgaWQgPSAxOTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3RyaW5nLWF0LmpzXG4vLyBtb2R1bGUgaWQgPSAxOTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanNcbi8vIG1vZHVsZSBpZCA9IDE5MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qc1xuLy8gbW9kdWxlIGlkID0gMTkzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gMTk0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gMTk1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwcy5qc1xuLy8gbW9kdWxlIGlkID0gMTk2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAxOTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAxOThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzXG4vLyBtb2R1bGUgaWQgPSAxOTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyMDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanNcbi8vIG1vZHVsZSBpZCA9IDIwMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qc1xuLy8gbW9kdWxlIGlkID0gMjAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanNcbi8vIG1vZHVsZSBpZCA9IDIwM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4IHx8ICcnO1xudmFyICRQcm9taXNlID0gZ2xvYmFsW1BST01JU0VdO1xudmFyIGlzTm9kZSA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xudmFyIGVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIEludGVybmFsLCBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHksIE93blByb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcblxudmFyIFVTRV9OQVRJVkUgPSAhIWZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgIH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZVxuICAgICAgLy8gdjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgICAvLyB3ZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgICAgJiYgdjguaW5kZXhPZignNi42JykgIT09IDBcbiAgICAgICYmIHVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUvNjYnKSA9PT0gLTE7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbiAocHJvbWlzZSwgaXNSZWplY3QpIHtcbiAgaWYgKHByb21pc2UuX24pIHJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbiAocmVhY3Rpb24pIHtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHByb21pc2UuX2ggPT0gMikgb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gbWF5IHRocm93XG4gICAgICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSBydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgdW5oYW5kbGVkID0gaXNVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZiAodW5oYW5kbGVkKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICB2YXIgJCRyZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyICRpbmRleCA9IGluZGV4Kys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qc1xuLy8gbW9kdWxlIGlkID0gMjA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNhbGwuanNcbi8vIG1vZHVsZSBpZCA9IDIwNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qc1xuLy8gbW9kdWxlIGlkID0gMjA2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW52b2tlLmpzXG4vLyBtb2R1bGUgaWQgPSAyMDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21pY3JvdGFzay5qc1xuLy8gbW9kdWxlIGlkID0gMjA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191c2VyLWFnZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAyMDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZXRlY3QuanNcbi8vIG1vZHVsZSBpZCA9IDIxMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qc1xuLy8gbW9kdWxlIGlkID0gMjExXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanNcbi8vIG1vZHVsZSBpZCA9IDIxMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiY2hpbGRfcHJvY2Vzc1wiXG4vLyBtb2R1bGUgaWQgPSAyMTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvcicpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9nZXQtaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDIxNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXQgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3IgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGl0ZXJGbiA9IGdldChpdCk7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICByZXR1cm4gYW5PYmplY3QoaXRlckZuLmNhbGwoaXQpKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDIxNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvL2ZpbHRlciB3aWxsIHJlZW1pdCB0aGUgZGF0YSBpZiBjYihlcnIscGFzcykgcGFzcyBpcyB0cnV0aHlcblxuLy8gcmVkdWNlIGlzIG1vcmUgdHJpY2t5XG4vLyBtYXliZSB3ZSB3YW50IHRvIGdyb3VwIHRoZSByZWR1Y3Rpb25zIG9yIGVtaXQgcHJvZ3Jlc3MgdXBkYXRlcyBvY2Nhc2lvbmFsbHlcbi8vIHRoZSBtb3N0IGJhc2ljIHJlZHVjZSBqdXN0IGVtaXRzIG9uZSAnZGF0YScgZXZlbnQgYWZ0ZXIgaXQgaGFzIHJlY2lldmVkICdlbmQnXG5cbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW1cbiAgLCBlcyA9IGV4cG9ydHNcbiAgLCB0aHJvdWdoID0gcmVxdWlyZSgndGhyb3VnaCcpXG4gICwgZnJvbSA9IHJlcXVpcmUoJ2Zyb20nKVxuICAsIGR1cGxleCA9IHJlcXVpcmUoJ2R1cGxleGVyJylcbiAgLCBtYXAgPSByZXF1aXJlKCdtYXAtc3RyZWFtJylcbiAgLCBwYXVzZSA9IHJlcXVpcmUoJ3BhdXNlLXN0cmVhbScpXG4gICwgc3BsaXQgPSByZXF1aXJlKCdzcGxpdCcpXG4gICwgcGlwZWxpbmUgPSByZXF1aXJlKCdzdHJlYW0tY29tYmluZXInKVxuICAsIGltbWVkaWF0ZWx5ID0gZ2xvYmFsLnNldEltbWVkaWF0ZSB8fCBwcm9jZXNzLm5leHRUaWNrO1xuXG5lcy5TdHJlYW0gPSBTdHJlYW0gLy9yZS1leHBvcnQgU3RyZWFtIGZyb20gY29yZVxuZXMudGhyb3VnaCA9IHRocm91Z2hcbmVzLmZyb20gPSBmcm9tXG5lcy5kdXBsZXggPSBkdXBsZXhcbmVzLm1hcCA9IG1hcFxuZXMucGF1c2UgPSBwYXVzZVxuZXMuc3BsaXQgPSBzcGxpdFxuZXMucGlwZWxpbmUgPSBlcy5jb25uZWN0ID0gZXMucGlwZSA9IHBpcGVsaW5lXG4vLyBtZXJnZSAvIGNvbmNhdFxuLy9cbi8vIGNvbWJpbmUgbXVsdGlwbGUgc3RyZWFtcyBpbnRvIGEgc2luZ2xlIHN0cmVhbS5cbi8vIHdpbGwgZW1pdCBlbmQgb25seSBvbmNlXG5cbmVzLmNvbmNhdCA9IC8vYWN0dWFsbHkgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGNvbmNhdFxuZXMubWVyZ2UgPSBmdW5jdGlvbiAoLypzdHJlYW1zLi4uKi8pIHtcbiAgdmFyIHRvTWVyZ2UgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgaWYgKHRvTWVyZ2UubGVuZ3RoID09PSAxICYmICh0b01lcmdlWzBdIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgdG9NZXJnZSA9IHRvTWVyZ2VbMF0gLy9oYW5kbGUgYXJyYXkgYXMgYXJndW1lbnRzIG9iamVjdFxuICB9XG4gIHZhciBzdHJlYW0gPSBuZXcgU3RyZWFtKClcbiAgc3RyZWFtLnNldE1heExpc3RlbmVycygwKSAvLyBhbGxvdyBhZGRpbmcgbW9yZSB0aGFuIDExIHN0cmVhbXNcbiAgdmFyIGVuZENvdW50ID0gMFxuICBzdHJlYW0ud3JpdGFibGUgPSBzdHJlYW0ucmVhZGFibGUgPSB0cnVlXG5cbiAgaWYgKHRvTWVyZ2UubGVuZ3RoKSB7XG4gICAgdG9NZXJnZS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLnBpcGUoc3RyZWFtLCB7ZW5kOiBmYWxzZX0pXG4gICAgICB2YXIgZW5kZWQgPSBmYWxzZVxuICAgICAgZS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZihlbmRlZCkgcmV0dXJuXG4gICAgICAgIGVuZGVkID0gdHJ1ZVxuICAgICAgICBlbmRDb3VudCArK1xuICAgICAgICBpZihlbmRDb3VudCA9PSB0b01lcmdlLmxlbmd0aClcbiAgICAgICAgICBzdHJlYW0uZW1pdCgnZW5kJylcbiAgICAgIH0pXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlbmQnKVxuICAgIH0pXG4gIH1cbiAgXG4gIHN0cmVhbS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdGhpcy5lbWl0KCdkYXRhJywgZGF0YSlcbiAgfVxuICBzdHJlYW0uZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0b01lcmdlLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmKGUuZGVzdHJveSkgZS5kZXN0cm95KClcbiAgICB9KVxuICB9XG4gIHJldHVybiBzdHJlYW1cbn1cblxuXG4vLyB3cml0YWJsZSBzdHJlYW0sIGNvbGxlY3RzIGFsbCBldmVudHMgaW50byBhbiBhcnJheVxuLy8gYW5kIGNhbGxzIGJhY2sgd2hlbiAnZW5kJyBvY2N1cnNcbi8vIG1haW5seSBJJ20gdXNpbmcgdGhpcyB0byB0ZXN0IHRoZSBvdGhlciBmdW5jdGlvbnNcblxuZXMud3JpdGVBcnJheSA9IGZ1bmN0aW9uIChkb25lKSB7XG4gIGlmICgnZnVuY3Rpb24nICE9PSB0eXBlb2YgZG9uZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Z1bmN0aW9uIHdyaXRlQXJyYXkgKGRvbmUpOiBkb25lIG11c3QgYmUgZnVuY3Rpb24nKVxuXG4gIHZhciBhID0gbmV3IFN0cmVhbSAoKVxuICAgICwgYXJyYXkgPSBbXSwgaXNEb25lID0gZmFsc2VcbiAgYS53cml0ZSA9IGZ1bmN0aW9uIChsKSB7XG4gICAgYXJyYXkucHVzaChsKVxuICB9XG4gIGEuZW5kID0gZnVuY3Rpb24gKCkge1xuICAgIGlzRG9uZSA9IHRydWVcbiAgICBkb25lKG51bGwsIGFycmF5KVxuICB9XG4gIGEud3JpdGFibGUgPSB0cnVlXG4gIGEucmVhZGFibGUgPSBmYWxzZVxuICBhLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgYS53cml0YWJsZSA9IGEucmVhZGFibGUgPSBmYWxzZVxuICAgIGlmKGlzRG9uZSkgcmV0dXJuXG4gICAgZG9uZShuZXcgRXJyb3IoJ2Rlc3Ryb3llZCBiZWZvcmUgZW5kJyksIGFycmF5KVxuICB9XG4gIHJldHVybiBhXG59XG5cbi8vcmV0dXJuIGEgU3RyZWFtIHRoYXQgcmVhZHMgdGhlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG4vL3Jlc3BlY3RpbmcgcGF1c2UoKSBhbmQgcmVzdW1lKClcblxuZXMucmVhZEFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gIHZhciBzdHJlYW0gPSBuZXcgU3RyZWFtKClcbiAgICAsIGkgPSAwXG4gICAgLCBwYXVzZWQgPSBmYWxzZVxuICAgICwgZW5kZWQgPSBmYWxzZVxuXG4gIHN0cmVhbS5yZWFkYWJsZSA9IHRydWVcbiAgc3RyZWFtLndyaXRhYmxlID0gZmFsc2VcblxuICBpZighQXJyYXkuaXNBcnJheShhcnJheSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdldmVudC1zdHJlYW0ucmVhZCBleHBlY3RzIGFuIGFycmF5JylcblxuICBzdHJlYW0ucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICAgIGlmKGVuZGVkKSByZXR1cm5cbiAgICBwYXVzZWQgPSBmYWxzZVxuICAgIHZhciBsID0gYXJyYXkubGVuZ3RoXG4gICAgd2hpbGUoaSA8IGwgJiYgIXBhdXNlZCAmJiAhZW5kZWQpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgYXJyYXlbaSsrXSlcbiAgICB9XG4gICAgaWYoaSA9PSBsICYmICFlbmRlZClcbiAgICAgIGVuZGVkID0gdHJ1ZSwgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2UsIHN0cmVhbS5lbWl0KCdlbmQnKVxuICB9XG4gIHByb2Nlc3MubmV4dFRpY2soc3RyZWFtLnJlc3VtZSlcbiAgc3RyZWFtLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICAgICBwYXVzZWQgPSB0cnVlXG4gIH1cbiAgc3RyZWFtLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgZW5kZWQgPSB0cnVlXG4gICAgc3RyZWFtLmVtaXQoJ2Nsb3NlJylcbiAgfVxuICByZXR1cm4gc3RyZWFtXG59XG5cbi8vXG4vLyByZWFkYWJsZSAoYXN5bmNGdW5jdGlvbilcbi8vIHJldHVybiBhIHN0cmVhbSB0aGF0IGNhbGxzIGFuIGFzeW5jIGZ1bmN0aW9uIHdoaWxlIHRoZSBzdHJlYW0gaXMgbm90IHBhdXNlZC5cbi8vXG4vLyB0aGUgZnVuY3Rpb24gbXVzdCB0YWtlOiAoY291bnQsIGNhbGxiYWNrKSB7Li4uXG4vL1xuXG5lcy5yZWFkYWJsZSA9XG5mdW5jdGlvbiAoZnVuYywgY29udGludWVPbkVycm9yKSB7XG4gIHZhciBzdHJlYW0gPSBuZXcgU3RyZWFtKClcbiAgICAsIGkgPSAwXG4gICAgLCBwYXVzZWQgPSBmYWxzZVxuICAgICwgZW5kZWQgPSBmYWxzZVxuICAgICwgcmVhZGluZyA9IGZhbHNlXG5cbiAgc3RyZWFtLnJlYWRhYmxlID0gdHJ1ZVxuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZVxuXG4gIGlmKCdmdW5jdGlvbicgIT09IHR5cGVvZiBmdW5jKVxuICAgIHRocm93IG5ldyBFcnJvcignZXZlbnQtc3RyZWFtLnJlYWRhYmxlIGV4cGVjdHMgYXN5bmMgZnVuY3Rpb24nKVxuXG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkgeyBlbmRlZCA9IHRydWUgfSlcblxuICBmdW5jdGlvbiBnZXQgKGVyciwgZGF0YSkge1xuXG4gICAgaWYoZXJyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICBpZighY29udGludWVPbkVycm9yKSBzdHJlYW0uZW1pdCgnZW5kJylcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKVxuICAgICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBkYXRhKVxuXG4gICAgaW1tZWRpYXRlbHkoZnVuY3Rpb24gKCkge1xuICAgICAgaWYoZW5kZWQgfHwgcGF1c2VkIHx8IHJlYWRpbmcpIHJldHVyblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVhZGluZyA9IHRydWVcbiAgICAgICAgZnVuYy5jYWxsKHN0cmVhbSwgaSsrLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmVhZGluZyA9IGZhbHNlXG4gICAgICAgICAgZ2V0LmFwcGx5KG51bGwsIGFyZ3VtZW50cylcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBzdHJlYW0ucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICAgIHBhdXNlZCA9IGZhbHNlXG4gICAgZ2V0KClcbiAgfVxuICBwcm9jZXNzLm5leHRUaWNrKGdldClcbiAgc3RyZWFtLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICAgICBwYXVzZWQgPSB0cnVlXG4gIH1cbiAgc3RyZWFtLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpXG4gICAgc3RyZWFtLmVtaXQoJ2Nsb3NlJylcbiAgICBlbmRlZCA9IHRydWVcbiAgfVxuICByZXR1cm4gc3RyZWFtXG59XG5cblxuLy9cbi8vIG1hcCBzeW5jXG4vL1xuXG5lcy5tYXBTeW5jID0gZnVuY3Rpb24gKHN5bmMpIHtcbiAgcmV0dXJuIGVzLnRocm91Z2goZnVuY3Rpb24gd3JpdGUoZGF0YSkge1xuICAgIHZhciBtYXBwZWREYXRhXG4gICAgdHJ5IHtcbiAgICAgIG1hcHBlZERhdGEgPSBzeW5jKGRhdGEpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIGVycilcbiAgICB9XG4gICAgaWYgKG1hcHBlZERhdGEgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuZW1pdCgnZGF0YScsIG1hcHBlZERhdGEpXG4gIH0pXG59XG5cbi8vXG4vLyBsb2cganVzdCBwcmludCBvdXQgd2hhdCBpcyBjb21pbmcgdGhyb3VnaCB0aGUgc3RyZWFtLCBmb3IgZGVidWdnaW5nXG4vL1xuXG5lcy5sb2cgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gZXMudGhyb3VnaChmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gICAgaWYobmFtZSkgY29uc29sZS5lcnJvcihuYW1lLCBkYXRhKVxuICAgIGVsc2UgICAgIGNvbnNvbGUuZXJyb3IoZGF0YSlcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKVxuICB9KVxufVxuXG5cbi8vXG4vLyBjaGlsZCAtLSBwaXBlIHRocm91Z2ggYSBjaGlsZCBwcm9jZXNzXG4vL1xuXG5lcy5jaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xuXG4gIHJldHVybiBlcy5kdXBsZXgoY2hpbGQuc3RkaW4sIGNoaWxkLnN0ZG91dClcblxufVxuXG4vL1xuLy8gcGFyc2Vcbi8vXG4vLyBtdXN0IGJlIHVzZWQgYWZ0ZXIgZXMuc3BsaXQoKSB0byBlbnN1cmUgdGhhdCBlYWNoIGNodW5rIHJlcHJlc2VudHMgYSBsaW5lXG4vLyBzb3VyY2UucGlwZShlcy5zcGxpdCgpKS5waXBlKGVzLnBhcnNlKCkpXG5cbmVzLnBhcnNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIGVtaXRFcnJvciA9ICEhKG9wdGlvbnMgPyBvcHRpb25zLmVycm9yIDogZmFsc2UpXG4gIHJldHVybiBlcy50aHJvdWdoKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIG9ialxuICAgIHRyeSB7XG4gICAgICBpZihkYXRhKSAvL2lnbm9yZSBlbXB0eSBsaW5lc1xuICAgICAgICBvYmogPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlbWl0RXJyb3IpXG4gICAgICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZXJyLCAnYXR0ZW1wdGluZyB0byBwYXJzZTonLCBkYXRhKVxuICAgIH1cbiAgICAvL2lnbm9yZSBsaW5lcyB0aGF0IHdoZXJlIG9ubHkgd2hpdGVzcGFjZS5cbiAgICBpZihvYmogIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuZW1pdCgnZGF0YScsIG9iailcbiAgfSlcbn1cbi8vXG4vLyBzdHJpbmdpZnlcbi8vXG5cbmVzLnN0cmluZ2lmeSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlclxuICByZXR1cm4gZXMubWFwU3luYyhmdW5jdGlvbiAoZSl7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KEJ1ZmZlci5pc0J1ZmZlcihlKSA/IGUudG9TdHJpbmcoKSA6IGUpICsgJ1xcbidcbiAgfSlcbn1cblxuLy9cbi8vIHJlcGxhY2UgYSBzdHJpbmcgd2l0aGluIGEgc3RyZWFtLlxuLy9cbi8vIHdhcm46IGp1c3QgY29uY2F0ZW5hdGVzIHRoZSBzdHJpbmcgYW5kIHRoZW4gZG9lcyBzdHIuc3BsaXQoKS5qb2luKCkuXG4vLyBwcm9iYWJseSBub3Qgb3B0aW1hbC5cbi8vIGZvciBzbWFsbGlzaCByZXNwb25zZXMsIHdobyBjYXJlcz9cbi8vIEkgbmVlZCB0aGlzIGZvciBzaGFkb3ctbnBtIHNvIGl0J3Mgb25seSByZWxhdGl2ZWx5IHNtYWxsIGpzb24gZmlsZXMuXG5cbmVzLnJlcGxhY2UgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgcmV0dXJuIGVzLnBpcGVsaW5lKGVzLnNwbGl0KGZyb20pLCBlcy5qb2luKHRvKSlcbn1cblxuLy9cbi8vIGpvaW4gY2h1bmtzIHdpdGggYSBqb2luZXIuIGp1c3QgbGlrZSBBcnJheSNqb2luXG4vLyBhbHNvIGFjY2VwdHMgYSBjYWxsYmFjayB0aGF0IGlzIHBhc3NlZCB0aGUgY2h1bmtzIGFwcGVuZGVkIHRvZ2V0aGVyXG4vLyB0aGlzIGlzIHN0aWxsIHN1cHBvcnRlZCBmb3IgbGVnYWN5IHJlYXNvbnMuXG4vL1xuXG5lcy5qb2luID0gZnVuY3Rpb24gKHN0cikge1xuXG4gIC8vbGVnYWN5IGFwaVxuICBpZignZnVuY3Rpb24nID09PSB0eXBlb2Ygc3RyKVxuICAgIHJldHVybiBlcy53YWl0KHN0cilcblxuICB2YXIgZmlyc3QgPSB0cnVlXG4gIHJldHVybiBlcy50aHJvdWdoKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgaWYoIWZpcnN0KVxuICAgICAgdGhpcy5lbWl0KCdkYXRhJywgc3RyKVxuICAgIGZpcnN0ID0gZmFsc2VcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKVxuICAgIHJldHVybiB0cnVlXG4gIH0pXG59XG5cblxuLy9cbi8vIHdhaXQuIGNhbGxiYWNrIHdoZW4gJ2VuZCcgaXMgZW1pdHRlZCwgd2l0aCBhbGwgY2h1bmtzIGFwcGVuZGVkIGFzIHN0cmluZy5cbi8vXG5cbmVzLndhaXQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdmFyIGFyciA9IFtdXG4gIHJldHVybiBlcy50aHJvdWdoKGZ1bmN0aW9uIChkYXRhKSB7IGFyci5wdXNoKGRhdGEpIH0sXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGJvZHkgPSBCdWZmZXIuaXNCdWZmZXIoYXJyWzBdKSA/IEJ1ZmZlci5jb25jYXQoYXJyKVxuICAgICAgICA6IGFyci5qb2luKCcnKVxuICAgICAgdGhpcy5lbWl0KCdkYXRhJywgYm9keSlcbiAgICAgIHRoaXMuZW1pdCgnZW5kJylcbiAgICAgIGlmKGNhbGxiYWNrKSBjYWxsYmFjayhudWxsLCBib2R5KVxuICAgIH0pXG59XG5cbmVzLnBpcGVhYmxlID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1tFVkVOVC1TVFJFQU1dIGVzLnBpcGVhYmxlIGlzIGRlcHJlY2F0ZWQnKVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2V2ZW50LXN0cmVhbS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMjE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcblxuLy8gZnJvbVxuLy9cbi8vIGEgc3RyZWFtIHRoYXQgcmVhZHMgZnJvbSBhbiBzb3VyY2UuXG4vLyBzb3VyY2UgbWF5IGJlIGFuIGFycmF5LCBvciBhIGZ1bmN0aW9uLlxuLy8gZnJvbSBoYW5kbGVzIHBhdXNlIGJlaGF2aW91ciBmb3IgeW91LlxuXG5tb2R1bGUuZXhwb3J0cyA9XG5mdW5jdGlvbiBmcm9tIChzb3VyY2UpIHtcbiAgaWYoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG5cdFx0dmFyIHNvdXJjZV9pbmRleCA9IDAsIHNvdXJjZV9sZW4gPSBzb3VyY2UubGVuZ3RoO1xuICAgIHJldHVybiBmcm9tIChmdW5jdGlvbiAoaSkge1xuICAgICAgaWYoc291cmNlX2luZGV4IDwgc291cmNlX2xlbilcbiAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgc291cmNlW3NvdXJjZV9pbmRleCsrXSlcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5lbWl0KCdlbmQnKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9KVxuICB9XG4gIHZhciBzID0gbmV3IFN0cmVhbSgpLCBpID0gMFxuICBzLmVuZGVkID0gZmFsc2VcbiAgcy5zdGFydGVkID0gZmFsc2VcbiAgcy5yZWFkYWJsZSA9IHRydWVcbiAgcy53cml0YWJsZSA9IGZhbHNlXG4gIHMucGF1c2VkID0gZmFsc2VcbiAgcy5lbmRlZCA9IGZhbHNlXG4gIHMucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcy5zdGFydGVkID0gdHJ1ZVxuICAgIHMucGF1c2VkID0gdHJ1ZVxuICB9XG4gIGZ1bmN0aW9uIG5leHQgKCkge1xuICAgIHMuc3RhcnRlZCA9IHRydWVcbiAgICBpZihzLmVuZGVkKSByZXR1cm5cbiAgICB3aGlsZSghcy5lbmRlZCAmJiAhcy5wYXVzZWQgJiYgc291cmNlLmNhbGwocywgaSsrLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZighcy5lbmRlZCAmJiAhcy5wYXVzZWQpXG4gICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhuZXh0KTtcbiAgICB9KSlcbiAgICAgIDtcbiAgfVxuICBzLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBzLnN0YXJ0ZWQgPSB0cnVlXG4gICAgcy5wYXVzZWQgPSBmYWxzZVxuICAgIG5leHQoKVxuICB9XG4gIHMub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBzLmVuZGVkID0gdHJ1ZVxuICAgIHMucmVhZGFibGUgPSBmYWxzZVxuICAgIHByb2Nlc3MubmV4dFRpY2socy5kZXN0cm95KVxuICB9KVxuICBzLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgcy5lbmRlZCA9IHRydWVcbiAgICBzLmVtaXQoJ2Nsb3NlJykgXG4gIH1cbiAgLypcbiAgICBieSBkZWZhdWx0LCB0aGUgc3RyZWFtIHdpbGwgc3RhcnQgZW1pdHRpbmcgYXQgbmV4dFRpY2tcbiAgICBpZiB5b3Ugd2FudCwgeW91IGNhbiBwYXVzZSBpdCwgYWZ0ZXIgcGlwZWluZy5cbiAgICB5b3UgY2FuIGFsc28gcmVzdW1lIGJlZm9yZSBuZXh0IHRpY2ssIGFuZCB0aGF0IHdpbGwgYWxzb1xuICAgIHdvcmsuXG4gICovXG4gIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIGlmKCFzLnN0YXJ0ZWQpIHMucmVzdW1lKClcbiAgfSlcbiAgcmV0dXJuIHNcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9mcm9tL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyMTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy9maWx0ZXIgd2lsbCByZWVtaXQgdGhlIGRhdGEgaWYgY2IoZXJyLHBhc3MpIHBhc3MgaXMgdHJ1dGh5XG5cbi8vIHJlZHVjZSBpcyBtb3JlIHRyaWNreVxuLy8gbWF5YmUgd2Ugd2FudCB0byBncm91cCB0aGUgcmVkdWN0aW9ucyBvciBlbWl0IHByb2dyZXNzIHVwZGF0ZXMgb2NjYXNpb25hbGx5XG4vLyB0aGUgbW9zdCBiYXNpYyByZWR1Y2UganVzdCBlbWl0cyBvbmUgJ2RhdGEnIGV2ZW50IGFmdGVyIGl0IGhhcyByZWNpZXZlZCAnZW5kJ1xuXG5cbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW1cblxuXG4vL2NyZWF0ZSBhbiBldmVudCBzdHJlYW0gYW5kIGFwcGx5IGZ1bmN0aW9uIHRvIGVhY2ggLndyaXRlXG4vL2VtaXR0aW5nIGVhY2ggcmVzcG9uc2UgYXMgZGF0YVxuLy91bmxlc3MgaXQncyBhbiBlbXB0eSBjYWxsYmFja1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtYXBwZXIsIG9wdHMpIHtcblxuICB2YXIgc3RyZWFtID0gbmV3IFN0cmVhbSgpXG4gICAgLCBzZWxmID0gdGhpc1xuICAgICwgaW5wdXRzID0gMFxuICAgICwgb3V0cHV0cyA9IDBcbiAgICAsIGVuZGVkID0gZmFsc2VcbiAgICAsIHBhdXNlZCA9IGZhbHNlXG4gICAgLCBkZXN0cm95ZWQgPSBmYWxzZVxuICAgICwgbGFzdFdyaXR0ZW4gPSAwXG4gICAgLCBpbk5leHQgPSBmYWxzZVxuXG4gIHRoaXMub3B0cyA9IG9wdHMgfHwge307XG4gIHZhciBlcnJvckV2ZW50TmFtZSA9IHRoaXMub3B0cy5mYWlsdXJlcyA/ICdmYWlsdXJlJyA6ICdlcnJvcic7XG5cbiAgLy8gSXRlbXMgdGhhdCBhcmUgbm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4geWV0IChiZWNhdXNlIHRoZXkgd291bGQgY29tZSBvdXQgb2ZcbiAgLy8gb3JkZXIpIGdldCBzdHVjayBpbiBhIHF1ZXVlIGZvciBsYXRlci5cbiAgdmFyIHdyaXRlUXVldWUgPSB7fVxuXG4gIHN0cmVhbS53cml0YWJsZSA9IHRydWVcbiAgc3RyZWFtLnJlYWRhYmxlID0gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHF1ZXVlRGF0YSAoZGF0YSwgbnVtYmVyKSB7XG4gICAgdmFyIG5leHRUb1dyaXRlID0gbGFzdFdyaXR0ZW4gKyAxXG5cbiAgICBpZiAobnVtYmVyID09PSBuZXh0VG9Xcml0ZSkge1xuICAgICAgLy8gSWYgaXQncyBuZXh0LCBhbmQgaXRzIG5vdCB1bmRlZmluZWQgd3JpdGUgaXRcbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RyZWFtLmVtaXQuYXBwbHkoc3RyZWFtLCBbJ2RhdGEnLCBkYXRhXSlcbiAgICAgIH1cbiAgICAgIGxhc3RXcml0dGVuICsrXG4gICAgICBuZXh0VG9Xcml0ZSArK1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgcXVldWUgaXQgZm9yIGxhdGVyLlxuICAgICAgd3JpdGVRdWV1ZVtudW1iZXJdID0gZGF0YVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBuZXh0IHZhbHVlIGlzIGluIHRoZSBxdWV1ZSwgd3JpdGUgaXRcbiAgICBpZiAod3JpdGVRdWV1ZS5oYXNPd25Qcm9wZXJ0eShuZXh0VG9Xcml0ZSkpIHtcbiAgICAgIHZhciBkYXRhVG9Xcml0ZSA9IHdyaXRlUXVldWVbbmV4dFRvV3JpdGVdXG4gICAgICBkZWxldGUgd3JpdGVRdWV1ZVtuZXh0VG9Xcml0ZV1cbiAgICAgIHJldHVybiBxdWV1ZURhdGEoZGF0YVRvV3JpdGUsIG5leHRUb1dyaXRlKVxuICAgIH1cblxuICAgIG91dHB1dHMgKytcbiAgICBpZihpbnB1dHMgPT09IG91dHB1dHMpIHtcbiAgICAgIGlmKHBhdXNlZCkgcGF1c2VkID0gZmFsc2UsIHN0cmVhbS5lbWl0KCdkcmFpbicpIC8vd3JpdHRlbiBhbGwgdGhlIGluY29taW5nIGV2ZW50c1xuICAgICAgaWYoZW5kZWQpIGVuZCgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbmV4dCAoZXJyLCBkYXRhLCBudW1iZXIpIHtcbiAgICBpZihkZXN0cm95ZWQpIHJldHVyblxuICAgIGluTmV4dCA9IHRydWVcblxuICAgIGlmICghZXJyIHx8IHNlbGYub3B0cy5mYWlsdXJlcykge1xuICAgICAgcXVldWVEYXRhKGRhdGEsIG51bWJlcilcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBzdHJlYW0uZW1pdC5hcHBseShzdHJlYW0sIFsgZXJyb3JFdmVudE5hbWUsIGVyciBdKTtcbiAgICB9XG5cbiAgICBpbk5leHQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFdyYXAgdGhlIG1hcHBlciBmdW5jdGlvbiBieSBjYWxsaW5nIGl0cyBjYWxsYmFjayB3aXRoIHRoZSBvcmRlciBudW1iZXIgb2ZcbiAgLy8gdGhlIGl0ZW0gaW4gdGhlIHN0cmVhbS5cbiAgZnVuY3Rpb24gd3JhcHBlZE1hcHBlciAoaW5wdXQsIG51bWJlciwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbWFwcGVyLmNhbGwobnVsbCwgaW5wdXQsIGZ1bmN0aW9uKGVyciwgZGF0YSl7XG4gICAgICBjYWxsYmFjayhlcnIsIGRhdGEsIG51bWJlcilcbiAgICB9KVxuICB9XG5cbiAgc3RyZWFtLndyaXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZihlbmRlZCkgdGhyb3cgbmV3IEVycm9yKCdtYXAgc3RyZWFtIGlzIG5vdCB3cml0YWJsZScpXG4gICAgaW5OZXh0ID0gZmFsc2VcbiAgICBpbnB1dHMgKytcblxuICAgIHRyeSB7XG4gICAgICAvL2NhdGNoIHN5bmMgZXJyb3JzIGFuZCBoYW5kbGUgdGhlbSBsaWtlIGFzeW5jIGVycm9yc1xuICAgICAgdmFyIHdyaXR0ZW4gPSB3cmFwcGVkTWFwcGVyKGRhdGEsIGlucHV0cywgbmV4dClcbiAgICAgIHBhdXNlZCA9ICh3cml0dGVuID09PSBmYWxzZSlcbiAgICAgIHJldHVybiAhcGF1c2VkXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvL2lmIHRoZSBjYWxsYmFjayBoYXMgYmVlbiBjYWxsZWQgc3luY3Jvbm91c2x5LCBhbmQgdGhlIGVycm9yXG4gICAgICAvL2hhcyBvY2N1cmVkIGluIGFuIGxpc3RlbmVyLCB0aHJvdyBpdCBhZ2Fpbi5cbiAgICAgIGlmKGluTmV4dClcbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICBuZXh0KGVycilcbiAgICAgIHJldHVybiAhcGF1c2VkXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kIChkYXRhKSB7XG4gICAgLy9pZiBlbmQgd2FzIGNhbGxlZCB3aXRoIGFyZ3MsIHdyaXRlIGl0LCBcbiAgICBlbmRlZCA9IHRydWUgLy93cml0ZSB3aWxsIGVtaXQgJ2VuZCcgaWYgZW5kZWQgaXMgdHJ1ZVxuICAgIHN0cmVhbS53cml0YWJsZSA9IGZhbHNlXG4gICAgaWYoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcXVldWVEYXRhKGRhdGEsIGlucHV0cylcbiAgICB9IGVsc2UgaWYgKGlucHV0cyA9PSBvdXRwdXRzKSB7IC8vd2FpdCBmb3IgcHJvY2Vzc2luZyBcbiAgICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlLCBzdHJlYW0uZW1pdCgnZW5kJyksIHN0cmVhbS5kZXN0cm95KCkgXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtLmVuZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgaWYoZW5kZWQpIHJldHVyblxuICAgIGVuZCgpXG4gIH1cblxuICBzdHJlYW0uZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBlbmRlZCA9IGRlc3Ryb3llZCA9IHRydWVcbiAgICBzdHJlYW0ud3JpdGFibGUgPSBzdHJlYW0ucmVhZGFibGUgPSBwYXVzZWQgPSBmYWxzZVxuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgc3RyZWFtLmVtaXQoJ2Nsb3NlJylcbiAgICB9KVxuICB9XG4gIHN0cmVhbS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBwYXVzZWQgPSB0cnVlXG4gIH1cblxuICBzdHJlYW0ucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICAgIHBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICByZXR1cm4gc3RyZWFtXG59XG5cblxuXG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9tYXAtc3RyZWFtL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy90aHJvdWdoQDIgaGFuZGxlcyB0aGlzIGJ5IGRlZmF1bHQhXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ3Rocm91Z2gnKVxuXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvcGF1c2Utc3RyZWFtL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyMTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy9maWx0ZXIgd2lsbCByZWVtaXQgdGhlIGRhdGEgaWYgY2IoZXJyLHBhc3MpIHBhc3MgaXMgdHJ1dGh5XG5cbi8vIHJlZHVjZSBpcyBtb3JlIHRyaWNreVxuLy8gbWF5YmUgd2Ugd2FudCB0byBncm91cCB0aGUgcmVkdWN0aW9ucyBvciBlbWl0IHByb2dyZXNzIHVwZGF0ZXMgb2NjYXNpb25hbGx5XG4vLyB0aGUgbW9zdCBiYXNpYyByZWR1Y2UganVzdCBlbWl0cyBvbmUgJ2RhdGEnIGV2ZW50IGFmdGVyIGl0IGhhcyByZWNpZXZlZCAnZW5kJ1xuXG5cbnZhciB0aHJvdWdoID0gcmVxdWlyZSgndGhyb3VnaCcpXG52YXIgRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJykuU3RyaW5nRGVjb2RlclxuXG5tb2R1bGUuZXhwb3J0cyA9IHNwbGl0XG5cbi8vVE9ETyBwYXNzIGluIGEgZnVuY3Rpb24gdG8gbWFwIGFjcm9zcyB0aGUgbGluZXMuXG5cbmZ1bmN0aW9uIHNwbGl0IChtYXRjaGVyLCBtYXBwZXIsIG9wdGlvbnMpIHtcbiAgdmFyIGRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHZhciBzb0ZhciA9ICcnXG4gIHZhciBtYXhMZW5ndGggPSBvcHRpb25zICYmIG9wdGlvbnMubWF4TGVuZ3RoO1xuICBpZignZnVuY3Rpb24nID09PSB0eXBlb2YgbWF0Y2hlcilcbiAgICBtYXBwZXIgPSBtYXRjaGVyLCBtYXRjaGVyID0gbnVsbFxuICBpZiAoIW1hdGNoZXIpXG4gICAgbWF0Y2hlciA9IC9cXHI/XFxuL1xuXG4gIGZ1bmN0aW9uIGVtaXQoc3RyZWFtLCBwaWVjZSkge1xuICAgIGlmKG1hcHBlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGllY2UgPSBtYXBwZXIocGllY2UpXG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9XG4gICAgICBpZigndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHBpZWNlKVxuICAgICAgICBzdHJlYW0ucXVldWUocGllY2UpXG4gICAgfVxuICAgIGVsc2VcbiAgICAgIHN0cmVhbS5xdWV1ZShwaWVjZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHQgKHN0cmVhbSwgYnVmZmVyKSB7XG4gICAgdmFyIHBpZWNlcyA9ICgoc29GYXIgIT0gbnVsbCA/IHNvRmFyIDogJycpICsgYnVmZmVyKS5zcGxpdChtYXRjaGVyKVxuICAgIHNvRmFyID0gcGllY2VzLnBvcCgpXG5cbiAgICBpZiAobWF4TGVuZ3RoICYmIHNvRmFyLmxlbmd0aCA+IG1heExlbmd0aClcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignbWF4aW11bSBidWZmZXIgcmVhY2hlZCcpKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwaWVjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwaWVjZSA9IHBpZWNlc1tpXVxuICAgICAgZW1pdChzdHJlYW0sIHBpZWNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aHJvdWdoKGZ1bmN0aW9uIChiKSB7XG4gICAgbmV4dCh0aGlzLCBkZWNvZGVyLndyaXRlKGIpKVxuICB9LFxuICBmdW5jdGlvbiAoKSB7XG4gICAgaWYoZGVjb2Rlci5lbmQpXG4gICAgICBuZXh0KHRoaXMsIGRlY29kZXIuZW5kKCkpXG4gICAgaWYoc29GYXIgIT0gbnVsbClcbiAgICAgIGVtaXQodGhpcywgc29GYXIpXG4gICAgdGhpcy5xdWV1ZShudWxsKVxuICB9KVxufVxuXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvc3BsaXQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDIyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZHVwbGV4ZXIgPSByZXF1aXJlKCdkdXBsZXhlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXG4gIHZhciBzdHJlYW1zID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gICAgLCBmaXJzdCA9IHN0cmVhbXNbMF1cbiAgICAsIGxhc3QgPSBzdHJlYW1zW3N0cmVhbXMubGVuZ3RoIC0gMV1cbiAgICAsIHRoZXBpcGUgPSBkdXBsZXhlcihmaXJzdCwgbGFzdClcblxuICBpZihzdHJlYW1zLmxlbmd0aCA9PSAxKVxuICAgIHJldHVybiBzdHJlYW1zWzBdXG4gIGVsc2UgaWYgKCFzdHJlYW1zLmxlbmd0aClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nvbm5lY3QgY2FsbGVkIHdpdGggZW1wdHkgYXJncycpXG5cbiAgLy9waXBlIGFsbCB0aGUgc3RyZWFtcyB0b2dldGhlclxuXG4gIGZ1bmN0aW9uIHJlY3Vyc2UgKHN0cmVhbXMpIHtcbiAgICBpZihzdHJlYW1zLmxlbmd0aCA8IDIpXG4gICAgICByZXR1cm5cbiAgICBzdHJlYW1zWzBdLnBpcGUoc3RyZWFtc1sxXSlcbiAgICByZWN1cnNlKHN0cmVhbXMuc2xpY2UoMSkpICBcbiAgfVxuICBcbiAgcmVjdXJzZShzdHJlYW1zKVxuIFxuICBmdW5jdGlvbiBvbmVycm9yICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgIGFyZ3MudW5zaGlmdCgnZXJyb3InKVxuICAgIHRoZXBpcGUuZW1pdC5hcHBseSh0aGVwaXBlLCBhcmdzKVxuICB9XG4gIFxuICAvL2VzLmR1cGxleCBhbHJlYWR5IHJlZW1pdHMgdGhlIGVycm9yIGZyb20gdGhlIGZpcnN0IGFuZCBsYXN0IHN0cmVhbS5cbiAgLy9hZGQgYSBsaXN0ZW5lciBmb3IgdGhlIGlubmVyIHN0cmVhbXMgaW4gdGhlIHBpcGVsaW5lLlxuICBmb3IodmFyIGkgPSAxOyBpIDwgc3RyZWFtcy5sZW5ndGggLSAxOyBpICsrKVxuICAgIHN0cmVhbXNbaV0ub24oJ2Vycm9yJywgb25lcnJvcilcblxuICByZXR1cm4gdGhlcGlwZVxufVxuXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvc3RyZWFtLWNvbWJpbmVyL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCB7XG4gIGdldExhYmVsZWRTZWdtZW50cyxcbiAgaW5zZXJ0U2VnbWVudHMsXG4gIHJlbW92ZVNlZ21lbnRzLFxufSBmcm9tICcuLi9zZXJ2aWNlcy9zZWdtZW50cyc7XG5pbXBvcnQge3J1bkxlYXJuaW5nfSBmcm9tICcuLi9zZXJ2aWNlcy9hbmFseXRpY3MnO1xuaW1wb3J0IHtBbm9tYWx5LCBBbm9tYWx5SWQsIGdldEFub21hbHlJZEJ5TmFtZSwgbG9hZEFub21hbHlCeUlkfSBmcm9tICcuLi9zZXJ2aWNlcy9hbm9tYWx5VHlwZSc7XG5cblxuYXN5bmMgZnVuY3Rpb24gc2VuZFNlZ21lbnRzKHJlcSwgcmVzKSB7XG4gIHRyeSB7XG4gICAgbGV0IGFub21hbHlJZDogQW5vbWFseUlkID0gcmVxLnF1ZXJ5LmFub21hbHlfaWQ7XG4gICAgbGV0IGFub21hbHk6QW5vbWFseSA9IGxvYWRBbm9tYWx5QnlJZChhbm9tYWx5SWQpO1xuICAgIGlmKGFub21hbHkgPT09IG51bGwpIHtcbiAgICAgIGFub21hbHlJZCA9IGdldEFub21hbHlJZEJ5TmFtZShhbm9tYWx5SWQpO1xuICAgIH1cblxuICAgIGxldCBsYXN0U2VnbWVudElkID0gcmVxLnF1ZXJ5Lmxhc3Rfc2VnbWVudDtcbiAgICBsZXQgdGltZUZyb20gPSByZXEucXVlcnkuZnJvbTtcbiAgICBsZXQgdGltZVRvID0gcmVxLnF1ZXJ5LnRvO1xuXG4gICAgbGV0IHNlZ21lbnRzID0gZ2V0TGFiZWxlZFNlZ21lbnRzKGFub21hbHlJZCk7XG5cbiAgICAvLyBJZCBmaWx0ZXJpbmdcbiAgICBpZihsYXN0U2VnbWVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlZ21lbnRzID0gc2VnbWVudHMuZmlsdGVyKGVsID0+IGVsLmlkID4gbGFzdFNlZ21lbnRJZCk7XG4gICAgfVxuXG4gICAgLy8gVGltZSBmaWx0ZXJpbmdcbiAgICBpZih0aW1lRnJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZWdtZW50cyA9IHNlZ21lbnRzLmZpbHRlcihlbCA9PiBlbC5maW5pc2ggPiB0aW1lRnJvbSk7XG4gICAgfVxuXG4gICAgaWYodGltZVRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlZ21lbnRzID0gc2VnbWVudHMuZmlsdGVyKGVsID0+IGVsLnN0YXJ0IDwgdGltZVRvKTtcbiAgICB9XG5cbiAgICBsZXQgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHNlZ21lbnRzXG4gICAgfSk7XG4gICAgcmVzLnN0YXR1cygyMDApLnNlbmQocGF5bG9hZCk7XG4gIH0gY2F0Y2goZSkge1xuICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKHtcbiAgICAgIGNvZGU6IDUwMCxcbiAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBlcnJvcidcbiAgICB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVTZWdtZW50cyhyZXEsIHJlcykge1xuICB0cnkge1xuICAgIGxldCBzZWdtZW50c1VwZGF0ZSA9IHJlcS5ib2R5O1xuXG4gICAgbGV0IGFub21hbHlJZCA9IHNlZ21lbnRzVXBkYXRlLmFub21hbHlfaWQ7XG4gICAgbGV0IGFub21hbHlOYW1lID0gc2VnbWVudHNVcGRhdGUubmFtZTtcblxuICAgIGlmKGFub21hbHlJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbm9tYWx5SWQgPSBnZXRBbm9tYWx5SWRCeU5hbWUoYW5vbWFseU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgbGV0IGFkZGVkSWRzID0gaW5zZXJ0U2VnbWVudHMoYW5vbWFseUlkLCBzZWdtZW50c1VwZGF0ZS5hZGRlZF9zZWdtZW50cywgdHJ1ZSk7XG4gICAgcmVtb3ZlU2VnbWVudHMoYW5vbWFseUlkLCBzZWdtZW50c1VwZGF0ZS5yZW1vdmVkX3NlZ21lbnRzKTtcblxuICAgIGxldCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoeyBhZGRlZF9pZHM6IGFkZGVkSWRzIH0pO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHBheWxvYWQpO1xuXG4gICAgcnVuTGVhcm5pbmcoYW5vbWFseUlkKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgY29kZTogNTAwLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIGVycm9yJ1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuXG5yb3V0ZXIuZ2V0KCcvJywgc2VuZFNlZ21lbnRzKTtcbnJvdXRlci5wYXRjaCgnLycsIHVwZGF0ZVNlZ21lbnRzKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3JvdXRlcy9zZWdtZW50cy50cyIsImltcG9ydCAqIGFzIGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge0Fub21hbHlJZCwgZ2V0QW5vbWFseUlkQnlOYW1lLCBsb2FkQW5vbWFseUJ5SWR9IGZyb20gJy4uL3NlcnZpY2VzL2Fub21hbHlUeXBlJztcbmltcG9ydCB7IGdldEFsZXJ0c0Fub21hbGllcywgc2F2ZUFsZXJ0c0Fub21hbGllcyB9IGZyb20gJy4uL3NlcnZpY2VzL2FsZXJ0cyc7XG5cbmZ1bmN0aW9uIGdldEFsZXJ0KHJlcSwgcmVzKSB7XG4gIHRyeSB7XG4gICAgbGV0IGFub21hbHlJZDogQW5vbWFseUlkID0gcmVxLnF1ZXJ5LmFub21hbHlfaWQ7XG4gICAgbGV0IGFub21hbHkgPSBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkKVxuICAgIGlmIChhbm9tYWx5ID09IG51bGwpIHtcbiAgICAgIGFub21hbHlJZCA9IGdldEFub21hbHlJZEJ5TmFtZShhbm9tYWx5SWQudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgbGV0IGFsZXJ0c0Fub21hbGllcyA9IGdldEFsZXJ0c0Fub21hbGllcygpO1xuICAgIGxldCBwb3MgPSBhbGVydHNBbm9tYWxpZXMuaW5kZXhPZihhbm9tYWx5SWQpO1xuXG4gICAgbGV0IGVuYWJsZTogYm9vbGVhbiA9IChwb3MgIT09IC0xKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuc2VuZCh7XG4gICAgICBlbmFibGVcbiAgICB9KTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgY29kZTogNTAwLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIGVycm9yJ1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUFsZXJ0KHJlcSwgcmVzKSB7XG4gIHRyeSB7XG4gICAgbGV0IGFub21hbHlJZDogQW5vbWFseUlkID0gcmVxLmJvZHkuYW5vbWFseV9pZDtcbiAgICBsZXQgZW5hYmxlOiBib29sZWFuID0gcmVxLmJvZHkuZW5hYmxlO1xuXG4gICAgbGV0IGFub21hbHkgPSBsb2FkQW5vbWFseUJ5SWQoYW5vbWFseUlkKVxuICAgIGlmIChhbm9tYWx5ID09IG51bGwpIHtcbiAgICAgIGFub21hbHlJZCA9IGdldEFub21hbHlJZEJ5TmFtZShhbm9tYWx5SWQudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgbGV0IGFsZXJ0c0Fub21hbGllcyA9IGdldEFsZXJ0c0Fub21hbGllcygpO1xuICAgIGxldCBwb3M6IG51bWJlciA9IGFsZXJ0c0Fub21hbGllcy5pbmRleE9mKGFub21hbHlJZCk7XG4gICAgaWYoZW5hYmxlICYmIHBvcyA9PSAtMSkge1xuICAgICAgYWxlcnRzQW5vbWFsaWVzLnB1c2goYW5vbWFseUlkKTtcbiAgICAgIHNhdmVBbGVydHNBbm9tYWxpZXMoYWxlcnRzQW5vbWFsaWVzKTtcbiAgICB9IGVsc2UgaWYoIWVuYWJsZSAmJiBwb3MgPiAtMSkge1xuICAgICAgYWxlcnRzQW5vbWFsaWVzLnNwbGljZShwb3MsIDEpO1xuICAgICAgc2F2ZUFsZXJ0c0Fub21hbGllcyhhbGVydHNBbm9tYWxpZXMpO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKDIwMCkuc2VuZCh7XG4gICAgICBzdGF0dXM6ICdPaydcbiAgICB9KTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgY29kZTogNTAwLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIGVycm9yJ1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuXG5yb3V0ZXIuZ2V0KCcvJywgZ2V0QWxlcnQpO1xucm91dGVyLnBvc3QoJy8nLCBjaGFuZ2VBbGVydCk7XG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3JvdXRlcy9hbGVydHMudHMiLCJpbXBvcnQgeyBnZXRKc29uRGF0YVN5bmMsIHdyaXRlSnNvbkRhdGFTeW5jIH0gZnJvbSAnLi9qc29uJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBBbm9tYWx5SWQgfSBmcm9tICcuL2Fub21hbHlUeXBlJztcbmltcG9ydCB7IEFOT01BTElFU19QQVRIIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IHJ1blByZWRpY3QgfSBmcm9tICcuL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBzZW5kTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9ub3RpZmljYXRpb24nO1xuaW1wb3J0IHsgZ2V0TGFiZWxlZFNlZ21lbnRzIH0gZnJvbSAnLi9zZWdtZW50cyc7XG5cbmZ1bmN0aW9uIGdldEFsZXJ0c0Fub21hbGllcygpIDogQW5vbWFseUlkW10ge1xuICBsZXQgZmlsZW5hbWUgPSBwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGBhbGVydHNfYW5vbWFsaWVzLmpzb25gKTtcbiAgaWYoIWZzLmV4aXN0c1N5bmMoZmlsZW5hbWUpKSB7XG4gICAgc2F2ZUFsZXJ0c0Fub21hbGllcyhbXSk7XG4gIH1cbiAgcmV0dXJuIGdldEpzb25EYXRhU3luYyhwYXRoLmpvaW4oQU5PTUFMSUVTX1BBVEgsIGBhbGVydHNfYW5vbWFsaWVzLmpzb25gKSk7XG59XG5cbmZ1bmN0aW9uIHNhdmVBbGVydHNBbm9tYWxpZXMoYW5vbWFsaWVzOiBBbm9tYWx5SWRbXSkge1xuICByZXR1cm4gd3JpdGVKc29uRGF0YVN5bmMocGF0aC5qb2luKEFOT01BTElFU19QQVRILCBgYWxlcnRzX2Fub21hbGllcy5qc29uYCksIGFub21hbGllcyk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBbGVydHMoYW5vbWFseUlkKSB7XG4gIGxldCBzZWdtZW50cyA9IGdldExhYmVsZWRTZWdtZW50cyhhbm9tYWx5SWQpO1xuXG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIGNvbnN0IGFjdGl2ZUFsZXJ0ID0gYWN0aXZlQWxlcnRzLmhhcyhhbm9tYWx5SWQpO1xuICBsZXQgbmV3QWN0aXZlQWxlcnQgPSBmYWxzZTtcblxuICBpZihzZWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IGxhc3RTZWdtZW50ID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgaWYobGFzdFNlZ21lbnQuZmluaXNoID49IGN1cnJlbnRUaW1lIC0gYWxlcnRUaW1lb3V0KSB7XG4gICAgICBuZXdBY3RpdmVBbGVydCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYoIWFjdGl2ZUFsZXJ0ICYmIG5ld0FjdGl2ZUFsZXJ0KSB7XG4gICAgYWN0aXZlQWxlcnRzLmFkZChhbm9tYWx5SWQpO1xuICAgIHNlbmROb3RpZmljYXRpb24oYW5vbWFseUlkLCB0cnVlKTtcbiAgfSBlbHNlIGlmKGFjdGl2ZUFsZXJ0ICYmICFuZXdBY3RpdmVBbGVydCkge1xuICAgIGFjdGl2ZUFsZXJ0cy5kZWxldGUoYW5vbWFseUlkKTtcbiAgICBzZW5kTm90aWZpY2F0aW9uKGFub21hbHlJZCwgZmFsc2UpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFsZXJ0c1RpY2soKSB7XG4gIGxldCBhbGVydHNBbm9tYWxpZXMgPSBnZXRBbGVydHNBbm9tYWxpZXMoKTtcbiAgZm9yIChsZXQgYW5vbWFseUlkIG9mIGFsZXJ0c0Fub21hbGllcykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW5QcmVkaWN0KGFub21hbHlJZCk7XG4gICAgICBwcm9jZXNzQWxlcnRzKGFub21hbHlJZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cbiAgc2V0VGltZW91dChhbGVydHNUaWNrLCA1MDAwKTtcbn1cblxuY29uc3QgYWxlcnRUaW1lb3V0ID0gNjAwMDA7IC8vIG1zXG5jb25zdCBhY3RpdmVBbGVydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbnNldFRpbWVvdXQoYWxlcnRzVGljaywgNTAwMCk7XG5cblxuZXhwb3J0IHsgZ2V0QWxlcnRzQW5vbWFsaWVzLCBzYXZlQWxlcnRzQW5vbWFsaWVzIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZpY2VzL2FsZXJ0cy50cyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zZXRcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3NldC5qc1xuLy8gbW9kdWxlIGlkID0gMjI1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3LnNldC5mcm9tJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5TZXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3NldC5qc1xuLy8gbW9kdWxlIGlkID0gMjI2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc2V0LmpzXG4vLyBtb2R1bGUgaWQgPSAyMjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qc1xuLy8gbW9kdWxlIGlkID0gMjI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSykge1xuICB2YXIgQmFzZSA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIEMgPSBCYXNlO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlO1xuICB2YXIgTyA9IHt9O1xuICBpZiAoIURFU0NSSVBUT1JTIHx8IHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUsICdfYycpO1xuICAgICAgdGFyZ2V0Ll9jID0gbmV3IEJhc2UoKTtcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRhcmdldFtBRERFUl0sIHRhcmdldCk7XG4gICAgfSk7XG4gICAgZWFjaCgnYWRkLGNsZWFyLGRlbGV0ZSxmb3JFYWNoLGdldCxoYXMsc2V0LGtleXMsdmFsdWVzLGVudHJpZXMsdG9KU09OJy5zcGxpdCgnLCcpLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT0gJ2FkZCcgfHwgS0VZID09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBwcm90byAmJiAhKElTX1dFQUsgJiYgS0VZID09ICdjbGVhcicpKSBoaWRlKEMucHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhpcywgQywgS0VZKTtcbiAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGZhbHNlO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY1tLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBJU19XRUFLIHx8IGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYy5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvbGxlY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDIyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qc1xuLy8gbW9kdWxlIGlkID0gMjMwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAyMzFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDIzMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDIzM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzXG4vLyBtb2R1bGUgaWQgPSAyMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzXG4vLyBtb2R1bGUgaWQgPSAyMzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanNcbi8vIG1vZHVsZSBpZCA9IDIzNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1NldCcpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zZXQub2YuanNcbi8vIG1vZHVsZSBpZCA9IDIzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanNcbi8vIG1vZHVsZSBpZCA9IDIzOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc2V0LmZyb20uanNcbi8vIG1vZHVsZSBpZCA9IDIzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qc1xuLy8gbW9kdWxlIGlkID0gMjQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file