From 78b7a806b74ebf59fd76a873e2291b637a4f0ae4 Mon Sep 17 00:00:00 2001 From: Daniel Freedman Date: Tue, 9 Jun 2015 11:12:40 -0700 Subject: [PATCH] Handle spaces in paths in fs-resolver Fixes PolymerElements/polymer-starter-kit#62 --- hydrolysis.js | 47 +++++++++++++++++++++---------- lib/loader/fs-resolver.js | 5 +++- package.json | 2 +- test/static/spaces in request.txt | 1 + test/test.js | 21 ++++++++++++++ 5 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 test/static/spaces in request.txt diff --git a/hydrolysis.js b/hydrolysis.js index c5988f6c..884bc085 100644 --- a/hydrolysis.js +++ b/hydrolysis.js @@ -2253,7 +2253,7 @@ FSResolver.prototype = { accept: function(uri, deferred) { var parsed = url.parse(uri); var host = this.config.host; - var base = this.config.basePath; + var base = this.config.basePath && decodeURIComponent(this.config.basePath); var root = this.config.root && path.normalize(this.config.root); var redirect = this.config.redirect; @@ -2264,6 +2264,9 @@ FSResolver.prototype = { } if (local) { + // un-escape HTML escapes + local = decodeURIComponent(local); + if (base) { local = path.relative(base, local); } @@ -12505,7 +12508,7 @@ function endTagInForeignContent(p, token) { * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) * @license Licensed under MIT license * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE - * @version 2.1.1 + * @version 2.2.0 */ (function() { @@ -12535,6 +12538,8 @@ function endTagInForeignContent(p, token) { var lib$es6$promise$asap$$len = 0; var lib$es6$promise$asap$$toString = {}.toString; var lib$es6$promise$asap$$vertxNext; + var lib$es6$promise$asap$$customSchedulerFn; + function lib$es6$promise$asap$$asap(callback, arg) { lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback; lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg; @@ -12543,11 +12548,18 @@ function endTagInForeignContent(p, token) { // If len is 2, that means that we need to schedule an async flush. // If additional callbacks are queued before the queue is flushed, they // will be processed by this flush that we are scheduling. - lib$es6$promise$asap$$scheduleFlush(); + if (lib$es6$promise$asap$$customSchedulerFn) { + lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush); + } else { + lib$es6$promise$asap$$scheduleFlush(); + } } } var lib$es6$promise$asap$$default = lib$es6$promise$asap$$asap; + function lib$es6$promise$asap$$setScheduler(scheduleFn) { + lib$es6$promise$asap$$customSchedulerFn = scheduleFn; + } var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined; var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {}; @@ -13041,7 +13053,7 @@ function endTagInForeignContent(p, token) { /** Promise objects represent the eventual result of an asynchronous operation. The primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise’s eventual value or the reason + registers callbacks to receive either a promise's eventual value or the reason why the promise cannot be fulfilled. Terminology @@ -13164,6 +13176,8 @@ function endTagInForeignContent(p, token) { lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default; lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default; lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default; + lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler; + lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$default; lib$es6$promise$promise$$Promise.prototype = { constructor: lib$es6$promise$promise$$Promise, @@ -17531,6 +17545,9 @@ function parseSwitchCase() { break; } statement = parseSourceElement(); + if (typeof statement === "undefined") { + break; + } consequent.push(statement); } @@ -21021,7 +21038,7 @@ module.exports={ "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" }, - "version": "2.0.2", + "version": "2.0.3", "files": [ "bin", "lib", @@ -21037,7 +21054,7 @@ module.exports={ }, "repository": { "type": "git", - "url": "http://github.com/eslint/espree.git" + "url": "git+ssh://git@github.com/eslint/espree.git" }, "bugs": { "url": "http://github.com/eslint/espree.git" @@ -21054,7 +21071,7 @@ module.exports={ "complexity-report": "~0.6.1", "dateformat": "^1.0.11", "eslint": "^0.9.2", - "esprima": "git://github.com/jquery/esprima", + "esprima": "git://github.com/jquery/esprima.git", "esprima-fb": "^8001.2001.0-dev-harmony-fb", "istanbul": "~0.2.6", "json-diff": "~0.3.1", @@ -21093,9 +21110,9 @@ module.exports={ "benchmark-quick": "node test/benchmarks.js quick" }, "dependencies": {}, - "gitHead": "71b433bf1b3f570452b987a06c5db615d11225e6", - "_id": "espree@2.0.2", - "_shasum": "adaefd803ad501779e2063b357549ae3366fd14c", + "gitHead": "b60b597cfe4834aacd16c90179ce73e22705c132", + "_id": "espree@2.0.3", + "_shasum": "1fbdff60a410bd0d416b1ab3d6230d34b7a450e1", "_from": "espree@>=2.0.1 <3.0.0", "_npmVersion": "1.4.28", "_npmUser": { @@ -21109,11 +21126,11 @@ module.exports={ } ], "dist": { - "shasum": "adaefd803ad501779e2063b357549ae3366fd14c", - "tarball": "http://registry.npmjs.org/espree/-/espree-2.0.2.tgz" + "shasum": "1fbdff60a410bd0d416b1ab3d6230d34b7a450e1", + "tarball": "http://registry.npmjs.org/espree/-/espree-2.0.3.tgz" }, "directories": {}, - "_resolved": "https://registry.npmjs.org/espree/-/espree-2.0.2.tgz", + "_resolved": "https://registry.npmjs.org/espree/-/espree-2.0.3.tgz", "readme": "ERROR: No README data found!" } @@ -21982,7 +21999,7 @@ module.exports={ ], "repository": { "type": "git", - "url": "http://github.com/estools/estraverse.git" + "url": "git+ssh://git@github.com/estools/estraverse.git" }, "devDependencies": { "chai": "^2.1.1", @@ -22238,4 +22255,4 @@ module.exports = { }; },{"./lib/analyzer":1,"./lib/ast-utils/docs":5,"./lib/ast-utils/import-parse":10,"./lib/ast-utils/js-parse":11,"./lib/ast-utils/jsdoc":12,"./lib/loader/file-loader":13,"./lib/loader/fs-resolver":14,"./lib/loader/noop-resolver":15,"./lib/loader/xhr-resolver":16}]},{},[]) -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvYW5hbHl6ZXIuanMiLCJsaWIvYXN0LXV0aWxzL2FuYWx5emUtcHJvcGVydGllcy5qcyIsImxpYi9hc3QtdXRpbHMvYXN0LXZhbHVlLmpzIiwibGliL2FzdC11dGlscy9iZWhhdmlvci1maW5kZXIuanMiLCJsaWIvYXN0LXV0aWxzL2RvY3MuanMiLCJsaWIvYXN0LXV0aWxzL2VsZW1lbnQtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9lc3V0aWwuanMiLCJsaWIvYXN0LXV0aWxzL2ZlYXR1cmUtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9maW5kLWFsaWFzLmpzIiwibGliL2FzdC11dGlscy9pbXBvcnQtcGFyc2UuanMiLCJsaWIvYXN0LXV0aWxzL2pzLXBhcnNlLmpzIiwibGliL2FzdC11dGlscy9qc2RvYy5qcyIsImxpYi9sb2FkZXIvZmlsZS1sb2FkZXIuanMiLCJsaWIvbG9hZGVyL2ZzLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci9ub29wLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci94aHItcmVzb2x2ZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3BhdGgtYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHVueWNvZGUvcHVueWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2RlY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy91cmwvdXJsLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvZG9tNS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vZG9jdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9mb3JlaWduX2NvbnRlbnQuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vaHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi91bmljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvanNkb20vanNkb21fcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvanNkb20vcGFyc2luZ191bml0LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvc2VyaWFsaXphdGlvbi9zZXJpYWxpemVyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvc2ltcGxlX2FwaS9zaW1wbGVfYXBpX3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3NpbXBsZV9hcGkvdG9rZW5pemVyX3Byb3h5LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdG9rZW5pemF0aW9uL2xvY2F0aW9uX2luZm9fbWl4aW4uanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vbmFtZWRfZW50aXR5X3RyaWUuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vcHJlcHJvY2Vzc29yLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdG9rZW5pemF0aW9uL3Rva2VuaXplci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfYWRhcHRlcnMvZGVmYXVsdC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfYWRhcHRlcnMvaHRtbHBhcnNlcjIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2NvbnN0cnVjdGlvbi9mb3JtYXR0aW5nX2VsZW1lbnRfbGlzdC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL2xvY2F0aW9uX2luZm9fbWl4aW4uanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2NvbnN0cnVjdGlvbi9vcGVuX2VsZW1lbnRfc3RhY2suanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2NvbnN0cnVjdGlvbi9wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZXM2LXByb21pc2UvZGlzdC9lczYtcHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvZXNwcmVlLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvYXN0LW5vZGUtZmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL2FzdC1ub2RlLXR5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvY29tbWVudC1hdHRhY2htZW50LmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvZmVhdHVyZXMuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9tZXNzYWdlcy5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL3N0cmluZy1tYXAuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9zeW50YXguanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi90b2tlbi1pbmZvLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIveGh0bWwtZW50aXRpZXMuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9lc3RyYXZlcnNlL2VzdHJhdmVyc2UuanMiLCJub2RlX21vZHVsZXMvZXN0cmF2ZXJzZS9wYWNrYWdlLmpzb24iLCJub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3hlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcllBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3d0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM3dGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzc3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqMktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDejBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMvS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuLy8ganNoaW50IC1XMDc5XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlIHx8IHJlcXVpcmUoJ2VzNi1wcm9taXNlJykuUHJvbWlzZTtcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBqc2hpbnQgK1cwNzlcblxudmFyIGRvbTUgPSByZXF1aXJlKCdkb201Jyk7XG52YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbnZhciBkb2NzID0gcmVxdWlyZSgnLi9hc3QtdXRpbHMvZG9jcycpO1xudmFyIEZpbGVMb2FkZXIgPSByZXF1aXJlKCcuL2xvYWRlci9maWxlLWxvYWRlcicpO1xudmFyIGltcG9ydFBhcnNlID0gcmVxdWlyZSgnLi9hc3QtdXRpbHMvaW1wb3J0LXBhcnNlJyk7XG52YXIganNQYXJzZSA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2pzLXBhcnNlJyk7XG52YXIgTm9vcFJlc29sdmVyID0gcmVxdWlyZSgnLi9sb2FkZXIvbm9vcC1yZXNvbHZlcicpO1xuXG5mdW5jdGlvbiByZWR1Y2VNZXRhZGF0YShtMSwgbTIpIHtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogIG0xLmVsZW1lbnRzLmNvbmNhdChtMi5lbGVtZW50cyksXG4gICAgZmVhdHVyZXM6ICBtMS5mZWF0dXJlcy5jb25jYXQobTIuZmVhdHVyZXMpLFxuICAgIGJlaGF2aW9yczogbTEuYmVoYXZpb3JzLmNvbmNhdChtMi5iZWhhdmlvcnMpLFxuICB9O1xufVxuXG52YXIgRU1QVFlfTUVUQURBVEEgPSB7ZWxlbWVudHM6IFtdLCBmZWF0dXJlczogW10sIGJlaGF2aW9yczogW119O1xuXG4vKipcbiAqIFBhcnNlNSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvY3VtZW50QVNUXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIGZvciBhIHNpbmdsZSBwb2x5bWVyIGVsZW1lbnRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVsZW1lbnREZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIGZvciBhIFBvbHltZXIgZmVhdHVyZS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEZlYXR1cmVEZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIGZvciBhIFBvbHltZXIgYmVoYXZpb3IgbWl4aW4uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBCZWhhdmlvckRlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGFsbCBmZWF0dXJlcyBhbmQgZWxlbWVudHMgZGVmaW5lZCBpbiBvbmUgZG9jdW1lbnRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvY3VtZW50RGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RWxlbWVudERlc2NyaXB0b3I+fSBlbGVtZW50cyBUaGUgZWxlbWVudHMgZnJvbSB0aGUgZG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSAgZmVhdHVyZXMgVGhlIGZlYXR1cmVzIGZyb20gdGhlIGRvY3VtZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn0gIGJlaGF2aW9ycyBUaGUgYmVoYXZpb3JzIGZyb20gdGhlIGRvY3VtZW50XG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgb2YgYW4gZW50aXJlIEhUTUwgZG9jdW1lbnQsIGluIHByb21pc2VzLlxuICogQHR5cGVkZWYge09iamVjdH0gQW5hbHl6ZWREb2N1bWVudFxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmIFRoZSB1cmwgb2YgdGhlIGRvY3VtZW50LlxuICogQHByb3BlcnR5IHtQcm9taXNlPFBhcnNlZEltcG9ydD59ICBodG1sTG9hZGVkIFRoZSBwYXJzZWQgcmVwcmVzZW50YXRpb24gb2ZcbiAqICAgICB0aGUgZG9jLiBVc2UgdGhlIGBhc3RgIHByb3BlcnR5IHRvIGdldCB0aGUgZnVsbCBgcGFyc2U1YCBhc3RcbiAqXG4gKiBAcHJvcGVydHkge1Byb21pc2U8QXJyYXk8c3RyaW5nPj59IGRlcHNMb2FkZWQgUmVzb2x2ZXMgdG8gdGhlIGxpc3Qgb2YgdGhpc1xuICogICAgIERvY3VtZW50J3MgdHJhbnNpdGl2ZSBpbXBvcnQgZGVwZW5kZW5jaWVzXG4gKlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSBkZXBIcmVmcyBUaGUgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiB0aGUgZG9jdW1lbnQuXG4gKlxuICogQHByb3BlcnR5IHtQcm9taXNlPERvY3VtZW50RGVzY3JpcHRvcj59IG1ldGFkYXRhTG9hZGVkIFJlc29sdmVzIHRvIHRoZSBsaXN0IG9mXG4gKiAgICAgdGhpcyBEb2N1bWVudCdzIGltcG9ydCBkZXBlbmRlbmNpZXNcbiAqL1xuXG4vKipcbiAqIEEgZGF0YWJhc2Ugb2YgUG9seW1lciBtZXRhZGF0YSBkZWZpbmVkIGluIEhUTUxcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJPZiBoeWRyb2x5c2lzXG4gKiBAcGFyYW0gIHtib29sZWFufSBhdHRhY2hBU1QgIElmIHRydWUsIGF0dGFjaCBhIHBhcnNlNSBjb21wbGlhbnQgQVNUXG4gKiBAcGFyYW0gIHtGaWxlTG9hZGVyPX0gbG9hZGVyIEFuIG9wdGlvbmFsIGBGaWxlTG9hZGVyYCB1c2VkIHRvIGxvYWQgZXh0ZXJuYWxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzXG4gKi9cbnZhciBBbmFseXplciA9IGZ1bmN0aW9uIEFuYWx5emVyKGF0dGFjaEFTVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcikge1xuICB0aGlzLmxvYWRlciA9IGxvYWRlcjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGFsbCBlbGVtZW50cyB0aGUgYEFuYWx5emVyYCBoYXMgbWV0YWRhdGEgZm9yLlxuICAgKiBAbWVtYmVyIHtBcnJheS48RWxlbWVudERlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5lbGVtZW50cyA9IFtdO1xuXG4gIC8qKlxuICAgKiBBIHZpZXcgaW50byBgZWxlbWVudHNgLCBrZXllZCBieSB0YWcgbmFtZS5cbiAgICogQG1lbWJlciB7T2JqZWN0LjxzdHJpbmcsRWxlbWVudERlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZSA9IHt9O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgQVBJIGZlYXR1cmVzIGFkZGVkIHRvIGBQb2x5bWVyLkJhc2VgIGVuY291bnRlcmVkIGJ5IHRoZVxuICAgKiBhbmFseXplci5cbiAgICogQG1lbWJlciB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5mZWF0dXJlcyA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgYmVoYXZpb3JzIGNvbGxlY3RlZCBieSB0aGUgYW5hbHlzaXMgcGFzcy5cbiAgICpcbiAgICogQG1lbWJlciB7QXJyYXk8QmVoYXZpb3JEZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuYmVoYXZpb3JzID0gW107XG5cbiAgLyoqXG4gICAqIEEgbWFwLCBrZXllZCBieSBhYnNvbHV0ZSBwYXRoLCBvZiBEb2N1bWVudCBtZXRhZGF0YS5cbiAgICogQG1lbWJlciB7T2JqZWN0PHN0cmluZyxBbmFseXplZERvY3VtZW50Pn1cbiAgICovXG4gIHRoaXMuaHRtbCA9IHt9O1xuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgcGF0aCwgb2YgSFRNTCBkb2N1bWVudCBBU1RzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5wYXJzZWREb2N1bWVudHMgPSB7fTtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEFuYWx5emVyLmFuYWx6eWVgXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2FkT3B0aW9uc1xuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbm9Bbm5vdGF0aW9ucyBXaGV0aGVyIGBhbm5vdGF0ZSgpYCBzaG91bGQgYmUgc2tpcHBlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2xlYW4gV2hldGhlciB0aGUgZ2VuZXJhdGVkIGRlc2NyaXB0b3JzIHNob3VsZCBiZSBjbGVhbmVkXG4gKiAgICAgb2YgcmVkdW5kYW50IGRhdGEuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59IGZpbHRlciBBIHByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0XG4gKiAgICAgaW5kaWNhdGVzIHdoaWNoIGZpbGVzIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBsb2FkZXIuIEJ5IGRlZmF1bHQgYWxsXG4gKiAgICAgZmlsZXMgbm90IGxvY2F0ZWQgdW5kZXIgdGhlIGRpcm5hbWUgb2YgYGhyZWZgIHdpbGwgYmUgaWdub3JlZC5cbiAqL1xuXG4vKipcbiAqIFNob3J0aGFuZCBmb3IgdHJhbnNpdGl2ZWx5IGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcgYWxsIGltcG9ydHMgYmVnaW5uaW5nIGF0XG4gKiBgaHJlZmAuXG4gKlxuICogSW4gb3JkZXIgdG8gcHJvcGVybHkgZmlsdGVyIHBhdGhzLCBgaHJlZmAgX211c3RfIGJlIGFuIGFic29sdXRlIFVSSS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHJlZiBUaGUgcm9vdCBpbXBvcnQgdG8gYmVnaW4gbG9hZGluZyBmcm9tLlxuICogQHBhcmFtIHtMb2FkT3B0aW9ucz19IG9wdGlvbnMgQW55IGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlPEFuYWx5emVyPn0gQSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgYGhyZWZgIGFuZCBpdHNcbiAqICAgICBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIGxvYWRlZCBhbmQgYW5hbHl6ZWQuXG4gKi9cbkFuYWx5emVyLmFuYWx5emUgPSBmdW5jdGlvbiBhbmFseXplKGhyZWYsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXIgfHwgX2RlZmF1bHRGaWx0ZXIoaHJlZik7XG5cbiAgdmFyIGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCk7XG4gIHZhciBQcmltYXJ5UmVzb2x2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlci9mcy1yZXNvbHZlcicpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyL3hoci1yZXNvbHZlcicpO1xuICBsb2FkZXIuYWRkUmVzb2x2ZXIobmV3IFByaW1hcnlSZXNvbHZlcihvcHRpb25zKSk7XG4gIGxvYWRlci5hZGRSZXNvbHZlcihuZXcgTm9vcFJlc29sdmVyKHt0ZXN0OiBvcHRpb25zLmZpbHRlcn0pKTtcblxuICB2YXIgYW5hbHl6ZXIgPSBuZXcgdGhpcyhudWxsLCBsb2FkZXIpO1xuICByZXR1cm4gYW5hbHl6ZXIubWV0YWRhdGFUcmVlKGhyZWYpLnRoZW4oZnVuY3Rpb24ocm9vdCkge1xuICAgIGlmICghb3B0aW9ucy5ub0Fubm90YXRpb25zKSB7XG4gICAgICBhbmFseXplci5hbm5vdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jbGVhbikge1xuICAgICAgYW5hbHl6ZXIuY2xlYW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhbmFseXplcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWZcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIF9kZWZhdWx0RmlsdGVyKGhyZWYpIHtcbiAgLy8gRXZlcnl0aGluZyB1cCB0byB0aGUgbGFzdCBgL2Agb3IgYFxcYC5cbiAgdmFyIGJhc2UgPSBocmVmLm1hdGNoKC9eKC4qPylbXlxcL1xcXFxdKiQvKVsxXTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHVyaSkge1xuICAgIHJldHVybiB1cmkuaW5kZXhPZihiYXNlKSAhPT0gMDtcbiAgfTtcbn1cblxuQW5hbHl6ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiBsb2FkKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMubG9hZGVyLnJlcXVlc3QoaHJlZikudGhlbihmdW5jdGlvbihjb250ZW50KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHRoaXMuX3BhcnNlSFRNTChjb250ZW50LCBocmVmKSk7XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYEFuYWx5emVkRG9jdW1lbnRgIHJlcHJlc2VudGluZyB0aGUgcHJvdmlkZWQgZG9jdW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGh0bWxJbXBvcnQgUmF3IHRleHQgb2YgYW4gSFRNTCBkb2N1bWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBocmVmICAgICAgIFRoZSBkb2N1bWVudCdzIFVSTC5cbiAqIEByZXR1cm4ge0FuYWx5emVkRG9jdW1lbnR9ICAgICAgIEFuICBgQW5hbHl6ZWREb2N1bWVudGBcbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLl9wYXJzZUhUTUwgPSBmdW5jdGlvbiBfcGFyc2VIVE1MKGh0bWxJbXBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYpIHtcbiAgaWYgKGhyZWYgaW4gdGhpcy5odG1sKSB7XG4gICAgcmV0dXJuIHRoaXMuaHRtbFtocmVmXTtcbiAgfVxuICB2YXIgZGVwc0xvYWRlZCA9IFtdO1xuICB2YXIgZGVwSHJlZnMgPSBbXTtcbiAgdmFyIG1ldGFkYXRhTG9hZGVkID0gUHJvbWlzZS5yZXNvbHZlKEVNUFRZX01FVEFEQVRBKTtcbiAgdmFyIHBhcnNlZDtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBpbXBvcnRQYXJzZShodG1sSW1wb3J0LCBocmVmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyEnKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgdmFyIGh0bWxMb2FkZWQgPSBQcm9taXNlLnJlc29sdmUocGFyc2VkKTtcbiAgaWYgKHBhcnNlZC5zY3JpcHQpIHtcbiAgICBtZXRhZGF0YUxvYWRlZCA9IHRoaXMuX3Byb2Nlc3NTY3JpcHRzKHBhcnNlZC5zY3JpcHQsIGhyZWYpO1xuICAgIGRlcHNMb2FkZWQucHVzaChtZXRhZGF0YUxvYWRlZCk7XG4gIH1cblxuICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICB2YXIgYmFzZVVyaSA9IGhyZWY7XG4gICAgaWYgKHBhcnNlZC5iYXNlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPbmx5IG9uZSBiYXNlIHRhZyBwZXIgZG9jdW1lbnQhXCIpO1xuICAgICAgdGhyb3cgXCJNdWx0aXBsZSBiYXNlIHRhZ3MgaW4gXCIgKyBocmVmO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLmJhc2UubGVuZ3RoID09IDEpIHtcbiAgICAgIHZhciBiYXNlSHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKHBhcnNlZC5iYXNlWzBdLCBcImhyZWZcIik7XG4gICAgICBpZiAoYmFzZUhyZWYpIHtcbiAgICAgICAgYmFzZUhyZWYgPSBiYXNlSHJlZiArIFwiL1wiO1xuICAgICAgICBiYXNlVXJpID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgYmFzZUhyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZWQuaW1wb3J0LmZvckVhY2goZnVuY3Rpb24obGluaykge1xuICAgICAgdmFyIGxpbmt1cmwgPSBkb201LmdldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicpO1xuICAgICAgaWYgKGxpbmt1cmwpIHtcbiAgICAgICAgdmFyIHJlc29sdmVkVXJsID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgbGlua3VybCk7XG4gICAgICAgIGRlcEhyZWZzLnB1c2gocmVzb2x2ZWRVcmwpO1xuICAgICAgICBkZXBzTG9hZGVkLnB1c2godGhpcy5fZGVwZW5kZW5jaWVzTG9hZGVkRm9yKHJlc29sdmVkVXJsLCBocmVmKSk7XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfVxuICBkZXBzTG9hZGVkID0gUHJvbWlzZS5hbGwoZGVwc0xvYWRlZClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7cmV0dXJuIGRlcEhyZWZzO30pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHt0aHJvdyBlcnI7fSk7XG4gIHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdID0gcGFyc2VkLmFzdDtcbiAgdGhpcy5odG1sW2hyZWZdID0ge1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIGh0bWxMb2FkZWQ6IGh0bWxMb2FkZWQsXG4gICAgICBtZXRhZGF0YUxvYWRlZDogbWV0YWRhdGFMb2FkZWQsXG4gICAgICBkZXBIcmVmczogZGVwSHJlZnMsXG4gICAgICBkZXBzTG9hZGVkOiBkZXBzTG9hZGVkXG4gIH07XG4gIHJldHVybiB0aGlzLmh0bWxbaHJlZl07XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX3Byb2Nlc3NTY3JpcHRzID0gZnVuY3Rpb24gX3Byb2Nlc3NTY3JpcHRzKHNjcmlwdHMsIGhyZWYpIHtcbiAgdmFyIHNjcmlwdFByb21pc2VzID0gW107XG4gIHNjcmlwdHMuZm9yRWFjaChmdW5jdGlvbihzY3JpcHQpIHtcbiAgICBzY3JpcHRQcm9taXNlcy5wdXNoKHRoaXMuX3Byb2Nlc3NTY3JpcHQoc2NyaXB0LCBocmVmKSk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChzY3JpcHRQcm9taXNlcykudGhlbihmdW5jdGlvbihtZXRhZGF0YUxpc3QpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0LnJlZHVjZShyZWR1Y2VNZXRhZGF0YSwgRU1QVFlfTUVUQURBVEEpO1xuICB9KTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fcHJvY2Vzc1NjcmlwdCA9IGZ1bmN0aW9uIF9wcm9jZXNzU2NyaXB0KHNjcmlwdCwgaHJlZikge1xuICB2YXIgc3JjID0gZG9tNS5nZXRBdHRyaWJ1dGUoc2NyaXB0LCAnc3JjJyk7XG4gIHZhciBwYXJzZWRKcztcbiAgaWYgKCFzcmMpIHtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkSnMgPSBqc1BhcnNlKHNjcmlwdC5jaGlsZE5vZGVzWzBdLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgbGluZSBudW1iZXIgZm9yIHRoZSBlcnJvci5cbiAgICAgIHZhciBsaW5lID0gMDtcbiAgICAgIHZhciBjb2wgPSAwO1xuICAgICAgaWYgKHNjcmlwdC5fX293bmVyRG9jdW1lbnQgJiYgc2NyaXB0Ll9fb3duZXJEb2N1bWVudCA9PSBocmVmKSB7XG4gICAgICAgIGxpbmUgPSBzY3JpcHQuX19sb2NhdGlvbkRldGFpbC5saW5lIC0gMTtcbiAgICAgICAgY29sID0gc2NyaXB0Ll9fbG9jYXRpb25EZXRhaWwubGluZSAtIDE7XG4gICAgICB9XG4gICAgICBsaW5lICs9IGVyci5saW5lTnVtYmVyO1xuICAgICAgY29sICs9IGVyci5jb2x1bW47XG4gICAgICB2YXIgbWVzc2FnZSA9IFwiRXJyb3IgcGFyc2luZyBzY3JpcHQgaW4gXCIgKyBocmVmICsgXCIgYXQgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2w7XG4gICAgICBtZXNzYWdlICs9IFwiXFxuXCIgKyBlcnIuZGVzY3JpcHRpb247XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5lbGVtZW50cykge1xuICAgICAgcGFyc2VkSnMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudC5pcyBpbiB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJZ25vcmluZyBkdXBsaWNhdGUgZWxlbWVudCBkZWZpbml0aW9uOiAnICsgZWxlbWVudC5pcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZVtlbGVtZW50LmlzXSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5mZWF0dXJlcykge1xuICAgICAgdGhpcy5mZWF0dXJlcyA9IHRoaXMuZmVhdHVyZXMuY29uY2F0KHBhcnNlZEpzLmZlYXR1cmVzKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEpzLmJlaGF2aW9ycykge1xuICAgICAgdGhpcy5iZWhhdmlvcnMgPSB0aGlzLmJlaGF2aW9ycy5jb25jYXQocGFyc2VkSnMuYmVoYXZpb3JzKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZEpzO1xuICB9XG4gIGlmICh0aGlzLmxvYWRlcikge1xuICAgIHZhciByZXNvbHZlZFNyYyA9IHVybC5yZXNvbHZlKGhyZWYsIHNyYyk7XG4gICAgcmV0dXJuIHRoaXMubG9hZGVyLnJlcXVlc3QocmVzb2x2ZWRTcmMpLnRoZW4oZnVuY3Rpb24oY29udGVudCkge1xuICAgICAgdmFyIHJlc29sdmVkU2NyaXB0ID0gT2JqZWN0LmNyZWF0ZShzY3JpcHQpO1xuICAgICAgcmVzb2x2ZWRTY3JpcHQuY2hpbGROb2RlcyA9IFt7dmFsdWU6IGNvbnRlbnR9XTtcbiAgICAgIHJlc29sdmVkU2NyaXB0LmF0dHJzID0gcmVzb2x2ZWRTY3JpcHQuYXR0cnMuc2xpY2UoKTtcbiAgICAgIGRvbTUucmVtb3ZlQXR0cmlidXRlKHJlc29sdmVkU2NyaXB0LCAnc3JjJyk7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1NjcmlwdChyZXNvbHZlZFNjcmlwdCwgaHJlZik7XG4gICAgfS5iaW5kKHRoaXMpKS5jYXRjaChmdW5jdGlvbihlcnIpIHt0aHJvdyBlcnI7fSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShFTVBUWV9NRVRBREFUQSk7XG4gIH1cbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fZGVwZW5kZW5jaWVzTG9hZGVkRm9yID0gZnVuY3Rpb24gX2RlcGVuZGVuY2llc0xvYWRlZEZvcihocmVmLCByb290KSB7XG4gIHZhciBmb3VuZCA9IHt9O1xuICBpZiAocm9vdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZm91bmRbcm9vdF0gPSB0cnVlO1xuICB9XG4gIHJldHVybiB0aGlzLl9nZXREZXBlbmRlbmNpZXMoaHJlZiwgZm91bmQpLnRoZW4oZnVuY3Rpb24oZGVwcykge1xuICAgIHZhciBkZXBNZXRhZGF0YUxvYWRlZCA9IFtdO1xuICAgIHZhciBkZXBQcm9taXNlcyA9IGRlcHMubWFwKGZ1bmN0aW9uKGRlcEhyZWYpe1xuICAgICAgcmV0dXJuIHRoaXMubG9hZChkZXBIcmVmKS50aGVuKGZ1bmN0aW9uKGh0bWxNb25vbWVyKSB7XG4gICAgICAgIHJldHVybiBodG1sTW9ub21lci5tZXRhZGF0YUxvYWRlZDtcbiAgICAgIH0pO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRlcFByb21pc2VzKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogTGlzdCBhbGwgdGhlIGh0bWwgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9jdW1lbnQgYXQgYGhyZWZgLlxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICBocmVmICAgICAgVGhlIGhyZWYgdG8gZ2V0IGRlcGVuZGVuY2llcyBmb3IuXG4gKiBAcGFyYW0gIHtPYmplY3QuPHN0cmluZyxib29sZWFuPj19IGZvdW5kICAgICBBbiBvYmplY3Qga2V5ZWQgYnkgVVJMIG9mIHRoZVxuICogICAgIGFscmVhZHkgcmVzb2x2ZWQgZGVwZW5kZW5jaWVzLlxuICogQHBhcmFtICB7Ym9vbGVhbj19ICAgICAgICAgICAgICAgIHRyYW5zaXRpdmUgV2hldGhlciB0byBsb2FkIHRyYW5zaXRpdmVcbiAqICAgICBkZXBlbmRlbmNpZXMuIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0gIEEgbGlzdCBvZiBhbGwgdGhlIGh0bWwgZGVwZW5kZW5jaWVzLlxuICovXG5BbmFseXplci5wcm90b3R5cGUuX2dldERlcGVuZGVuY2llcyA9IGZ1bmN0aW9uIF9nZXREZXBlbmRlbmNpZXMoaHJlZiwgZm91bmQsIHRyYW5zaXRpdmUpIHtcbiAgaWYgKGZvdW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3VuZCA9IHt9O1xuICAgIGZvdW5kW2hyZWZdID0gdHJ1ZTtcbiAgfVxuICBpZiAodHJhbnNpdGl2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJhbnNpdGl2ZSA9IHRydWU7XG4gIH1cbiAgdmFyIGRlcHMgPSBbXTtcbiAgcmV0dXJuIHRoaXMubG9hZChocmVmKS50aGVuKGZ1bmN0aW9uKGh0bWxNb25vbWVyKSB7XG4gICAgdmFyIHRyYW5zaXRpdmVEZXBzID0gW107XG4gICAgaHRtbE1vbm9tZXIuZGVwSHJlZnMuZm9yRWFjaChmdW5jdGlvbihkZXBIcmVmKXtcbiAgICAgIGlmIChmb3VuZFtkZXBIcmVmXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkZXBzLnB1c2goZGVwSHJlZik7XG4gICAgICBmb3VuZFtkZXBIcmVmXSA9IHRydWU7XG4gICAgICBpZiAodHJhbnNpdGl2ZSkge1xuICAgICAgICB0cmFuc2l0aXZlRGVwcy5wdXNoKHRoaXMuX2dldERlcGVuZGVuY2llcyhkZXBIcmVmLCBmb3VuZCkpO1xuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRyYW5zaXRpdmVEZXBzKTtcbiAgfS5iaW5kKHRoaXMpKS50aGVuKGZ1bmN0aW9uKHRyYW5zaXRpdmVEZXBzKSB7XG4gICAgdmFyIGFsbGRlcHMgPSB0cmFuc2l0aXZlRGVwcy5yZWR1Y2UoZnVuY3Rpb24oYSwgYikge1xuICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgIH0sIFtdKS5jb25jYXQoZGVwcyk7XG4gICAgcmV0dXJuIGFsbGRlcHM7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgUE9KTyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW1wb3J0XG4gKiB0cmVlLCBpbiBhIGZvcm1hdCB0aGF0IG1haW50YWlucyB0aGUgb3JkZXJpbmcgb2YgdGhlIEhUTUwgaW1wb3J0cyBzcGVjLlxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgdGhlIGltcG9ydCB0byBnZXQgbWV0YWRhdGEgZm9yLlxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLm1ldGFkYXRhVHJlZSA9IGZ1bmN0aW9uIG1ldGFkYXRhVHJlZShocmVmKSB7XG4gIHJldHVybiB0aGlzLmxvYWQoaHJlZikudGhlbihmdW5jdGlvbihtb25vbWVyKXtcbiAgICB2YXIgbG9hZGVkSHJlZnMgPSB7fTtcbiAgICBsb2FkZWRIcmVmc1tocmVmXSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVHJlZShtb25vbWVyLCBsb2FkZWRIcmVmcyk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX21ldGFkYXRhVHJlZSA9IGZ1bmN0aW9uIF9tZXRhZGF0YVRyZWUoaHRtbE1vbm9tZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkSHJlZnMpIHtcbiAgaWYgKGxvYWRlZEhyZWZzID09PSB1bmRlZmluZWQpIHtcbiAgICBsb2FkZWRIcmVmcyA9IHt9O1xuICB9XG4gIHJldHVybiBodG1sTW9ub21lci5tZXRhZGF0YUxvYWRlZC50aGVuKGZ1bmN0aW9uKG1ldGFkYXRhKSB7XG4gICAgbWV0YWRhdGEgPSB7XG4gICAgICBlbGVtZW50czogbWV0YWRhdGEuZWxlbWVudHMsXG4gICAgICBmZWF0dXJlczogbWV0YWRhdGEuZmVhdHVyZXMsXG4gICAgICBocmVmOiBodG1sTW9ub21lci5ocmVmXG4gICAgfTtcbiAgICByZXR1cm4gaHRtbE1vbm9tZXIuZGVwc0xvYWRlZC50aGVuKGZ1bmN0aW9uKGhyZWZzKSB7XG4gICAgICB2YXIgZGVwTWV0YWRhdGEgPSBbXTtcbiAgICAgIGhyZWZzLmZvckVhY2goZnVuY3Rpb24oaHJlZikge1xuICAgICAgICB2YXIgbWV0YWRhdGFQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgICAgICBpZiAoZGVwTWV0YWRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG1ldGFkYXRhUHJvbWlzZSA9IGRlcE1ldGFkYXRhW2RlcE1ldGFkYXRhLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIG1ldGFkYXRhUHJvbWlzZSA9IG1ldGFkYXRhUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghbG9hZGVkSHJlZnNbaHJlZl0pIHtcbiAgICAgICAgICAgIGxvYWRlZEhyZWZzW2hyZWZdID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVRyZWUodGhpcy5odG1sW2hyZWZdLCBsb2FkZWRIcmVmcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgZGVwTWV0YWRhdGEucHVzaChtZXRhZGF0YVByb21pc2UpO1xuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChkZXBNZXRhZGF0YSkudGhlbihmdW5jdGlvbihpbXBvcnRNZXRhZGF0YSkge1xuICAgICAgICBtZXRhZGF0YS5pbXBvcnRzID0gaW1wb3J0TWV0YWRhdGE7XG4gICAgICAgIHJldHVybiBodG1sTW9ub21lci5odG1sTG9hZGVkLnRoZW4oZnVuY3Rpb24ocGFyc2VkSHRtbCkge1xuICAgICAgICAgIG1ldGFkYXRhLmh0bWwgPSBwYXJzZWRIdG1sO1xuICAgICAgICAgIGlmIChtZXRhZGF0YS5lbGVtZW50cykge1xuICAgICAgICAgICAgbWV0YWRhdGEuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICAgIGF0dGFjaERvbU1vZHVsZShwYXJzZWRIdG1sLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogQ2FsbHMgYGRvbTUubm9kZVdhbGtgIG9uIGVhY2ggZG9jdW1lbnQgdGhhdCBgQW5heXpsZXJgIGhhcyBsYW9kZWQuXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByZWRpY2F0ZSBBIGRvbTUgcHJlZGljYXRlLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5BbmFseXplci5wcm90b3R5cGUubm9kZVdhbGtEb2N1bWVudHMgPSBmdW5jdGlvbiBub2RlV2Fsa0RvY3VtZW50cyhwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgZm9yICh2YXIgaHJlZiBpbiB0aGlzLnBhcnNlZERvY3VtZW50cykge1xuICAgIHZhciBuZXdOb2RlcyA9IGRvbTUubm9kZVdhbGtBbGwodGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl0sIHByZWRpY2F0ZSk7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KG5ld05vZGVzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKiBBbm5vdGF0ZXMgYWxsIGxvYWRlZCBtZXRhZGF0YSB3aXRoIGl0cyBkb2N1bWVudGF0aW9uLiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLmFubm90YXRlID0gZnVuY3Rpb24gYW5ub3RhdGUoKSB7XG4gIGlmICh0aGlzLmZlYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZmVhdHVyZUVsID0gZG9jcy5mZWF0dXJlRWxlbWVudCh0aGlzLmZlYXR1cmVzKTtcbiAgICB0aGlzLmVsZW1lbnRzLnVuc2hpZnQoZmVhdHVyZUVsKTtcbiAgICB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lW2ZlYXR1cmVFbC5pc10gPSBmZWF0dXJlRWw7XG4gIH1cblxuICB0aGlzLmVsZW1lbnRzLmZvckVhY2goZG9jcy5hbm5vdGF0ZUVsZW1lbnQpO1xuICB0aGlzLmJlaGF2aW9ycy5mb3JFYWNoKGRvY3MuYW5ub3RhdGVFbGVtZW50KTsgLy8gU2FtZSBzaGFwZS5cbn07XG5cbmZ1bmN0aW9uIGF0dGFjaERvbU1vZHVsZShwYXJzZWRJbXBvcnQsIGVsZW1lbnQpIHtcbiAgdmFyIGRvbU1vZHVsZXMgPSBwYXJzZWRJbXBvcnRbJ2RvbS1tb2R1bGUnXTtcbiAgZm9yICh2YXIgaSA9IDAsIGRvbU1vZHVsZTsgaSA8IGRvbU1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBkb21Nb2R1bGUgPSBkb21Nb2R1bGVzW2ldO1xuICAgIGlmIChkb201LmdldEF0dHJpYnV0ZShkb21Nb2R1bGUsICdpZCcpID09PSBlbGVtZW50LmlzKSB7XG4gICAgICBlbGVtZW50LmRvbU1vZHVsZSA9IGRvbU1vZHVsZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJlbW92ZXMgcmVkdW5kYW50IHByb3BlcnRpZXMgZnJvbSB0aGUgY29sbGVjdGVkIGRlc2NyaXB0b3JzLiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLmNsZWFuID0gZnVuY3Rpb24gY2xlYW4oKSB7XG4gIHRoaXMuZWxlbWVudHMuZm9yRWFjaChkb2NzLmNsZWFuRWxlbWVudCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFuYWx5emVyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXN1dGlsICAgID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcbnZhciBhc3RWYWx1ZSA9IHJlcXVpcmUoJy4vYXN0LXZhbHVlJyk7XG5cbnZhciBhbmFseXplUHJvcGVydGllcyA9IGZ1bmN0aW9uKG5vZGUpIHtcblxuICB2YXIgYW5hbHl6ZWRQcm9wcyA9IFtdO1xuXG4gIGlmIChub2RlLnR5cGUgIT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcm9wZXJ0eSA9IG5vZGUucHJvcGVydGllc1tpXTtcbiAgICB2YXIgcHJvcCA9IGVzdXRpbC50b1Byb3BlcnR5RGVzY3JpcHRvcihwcm9wZXJ0eSk7XG4gICAgcHJvcC5wdWJsaXNoZWQgPSB0cnVlO1xuXG4gICAgaWYgKHByb3BlcnR5LnZhbHVlLnR5cGUgPT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAvKipcbiAgICAgICAqIFBhcnNlIHRoZSBleHByZXNzaW9uIGluc2lkZSBhIHByb3BlcnR5IG9iamVjdCBibG9jay5cbiAgICAgICAqIHByb3BlcnR5OiB7XG4gICAgICAgKiAgIGtleToge1xuICAgICAgICogICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAqICAgICBub3RpZnk6IHRydWUsXG4gICAgICAgKiAgICAgdmFsdWU6IC0xLFxuICAgICAgICogICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICogICAgIHJlZmxlY3RUb0F0dHJpYnV0ZTogdHJ1ZVxuICAgICAgICogICB9XG4gICAgICAgKiB9XG4gICAgICAgKi9cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJvcGVydHkudmFsdWUucHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcHJvcGVydHlBcmcgPSBwcm9wZXJ0eS52YWx1ZS5wcm9wZXJ0aWVzW2pdO1xuICAgICAgICB2YXIgcHJvcGVydHlLZXkgPSBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcocHJvcGVydHlBcmcua2V5KTtcblxuICAgICAgICBzd2l0Y2gocHJvcGVydHlLZXkpIHtcbiAgICAgICAgICBjYXNlICd0eXBlJzoge1xuICAgICAgICAgICAgcHJvcC50eXBlID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgdHlwZSBpbiBwcm9wZXJ0eSBvYmplY3QuJyxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogcHJvcGVydHlBcmcubG9jLnN0YXJ0XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ25vdGlmeSc6IHtcbiAgICAgICAgICAgIHByb3Aubm90aWZ5ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByb3Aubm90aWZ5ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3Aubm90aWZ5ID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZWFkT25seSc6IHtcbiAgICAgICAgICAgIHByb3AucmVhZE9ubHkgPSBhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShwcm9wZXJ0eUFyZy52YWx1ZSk7XG4gICAgICAgICAgICBpZiAocHJvcC5yZWFkT25seSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBwcm9wLnJlYWRPbmx5ID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZWZsZWN0VG9BdHRyaWJ1dGUnOiB7XG4gICAgICAgICAgICBwcm9wLnJlZmxlY3RUb0F0dHJpYnV0ZSA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKHByb3BlcnR5QXJnKTtcbiAgICAgICAgICAgIGlmIChwcm9wLnJlZmxlY3RUb0F0dHJpYnV0ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBwcm9wLnJlZmxlY3RUb0F0dHJpYnV0ZSA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAgICAgICBwcm9wLmRlZmF1bHQgPSBhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShwcm9wZXJ0eUFyZy52YWx1ZSk7XG4gICAgICAgICAgICBpZiAocHJvcC5kZWZhdWx0ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3AuZGVmYXVsdCA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcHJvcC50eXBlKSB7XG4gICAgICB0aHJvdyB7XG4gICAgICAgIG1lc3NhZ2U6ICdVbmFibGUgdG8gZGV0ZXJtaW5lIG5hbWUgZm9yIHByb3BlcnR5IGtleS4nLFxuICAgICAgICBsb2NhdGlvbjogbm9kZS5sb2Muc3RhcnRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYW5hbHl6ZWRQcm9wcy5wdXNoKHByb3ApO1xuICB9XG4gIHJldHVybiBhbmFseXplZFByb3BzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGFuYWx5emVQcm9wZXJ0aWVzO1xuXG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG5cbi8vIHVzZWZ1bCB0b29sIHRvIHZpc3VhbGl6ZSBBU1Q6IGh0dHA6Ly9lc3ByaW1hLm9yZy9kZW1vL3BhcnNlLmh0bWxcblxuLyoqXG4gKiBjb252ZXJ0cyBsaXRlcmFsOiB7XCJ0eXBlXCI6IFwiTGl0ZXJhbFwiLCBcInZhbHVlXCI6IDUsICBcInJhd1wiOiBcIjVcIiB9XG4gKiB0byBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbGl0ZXJhbFRvVmFsdWUobGl0ZXJhbCkge1xuICByZXR1cm4gbGl0ZXJhbC52YWx1ZTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0cyB1bmFyeSB0byBzdHJpbmdcbiAqIHVuYXJ5OiB7IHR5cGU6ICdVbmFyeUV4cHJlc3Npb24nLCBvcGVyYXRvcjogJy0nLCBhcmd1bWVudDogeyAuLi4gfSB9XG4gKi9cbmZ1bmN0aW9uIHVuYXJ5VG9WYWx1ZSh1bmFyeSkge1xuICB2YXIgYXJnVmFsdWUgPSBleHByZXNzaW9uVG9WYWx1ZSh1bmFyeS5hcmd1bWVudCk7XG4gIGlmIChhcmdWYWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybjtcbiAgcmV0dXJuIHVuYXJ5Lm9wZXJhdG9yICsgYXJnVmFsdWU7XG59XG5cbi8qKlxuICogY29udmVydHMgaWRlbnRpZmllciB0byBpdHMgdmFsdWVcbiAqIGlkZW50aWZpZXIgeyBcInR5cGVcIjogXCJJZGVudGlmaWVyXCIsIFwibmFtZVwiOiBcIk51bWJlciB9XG4gKi9cbmZ1bmN0aW9uIGlkZW50aWZpZXJUb1ZhbHVlKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIubmFtZTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBpcyBhIGJsb2NrIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gZnVuY3Rpb25EZWNsYXJhdGlvblRvVmFsdWUoZm4pIHtcbiAgaWYgKGZuLmJvZHkudHlwZSA9PSBcIkJsb2NrU3RhdGVtZW50XCIpXG4gICAgcmV0dXJuIGJsb2NrU3RhdGVtZW50VG9WYWx1ZShmbi5ib2R5KTtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25FeHByZXNzaW9uVG9WYWx1ZShmbikge1xuICBpZiAoZm4uYm9keS50eXBlID09IFwiQmxvY2tTdGF0ZW1lbnRcIilcbiAgICByZXR1cm4gYmxvY2tTdGF0ZW1lbnRUb1ZhbHVlKGZuLmJvZHkpO1xufVxuLyoqXG4gKiBCbG9jayBzdGF0ZW1lbnQ6IGZpbmQgbGFzdCByZXR1cm4gc3RhdGVtZW50LCBhbmQgcmV0dXJuIGl0cyB2YWx1ZVxuICovXG5mdW5jdGlvbiBibG9ja1N0YXRlbWVudFRvVmFsdWUoYmxvY2spIHtcbiAgZm9yICh2YXIgaT1ibG9jay5ib2R5Lmxlbmd0aCAtIDE7IGk+PSAwOyBpLS0pIHtcbiAgICBpZiAoYmxvY2suYm9keVtpXS50eXBlID09PSBcIlJldHVyblN0YXRlbWVudFwiKVxuICAgICAgcmV0dXJuIHJldHVyblN0YXRlbWVudFRvVmFsdWUoYmxvY2suYm9keVtpXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgcmV0dXJuJ3MgYXJndW1lbnRcbiAqL1xuZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50VG9WYWx1ZShyZXQpIHtcbiAgcmV0dXJuIGV4cHJlc3Npb25Ub1ZhbHVlKHJldC5hcmd1bWVudCk7XG59XG5cbi8qKlxuICogRW5jbG9zZSBjb250YWluaW5nIHZhbHVlcyBpbiBbXVxuICovXG5mdW5jdGlvbiBhcnJheUV4cHJlc3Npb25Ub1ZhbHVlKGFycnkpIHtcbiAgdmFyIHZhbHVlID0gJ1snO1xuICBmb3IgKHZhciBpPTA7IGk8YXJyeS5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB2ID0gZXhwcmVzc2lvblRvVmFsdWUoYXJyeS5lbGVtZW50c1tpXSk7XG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgIHYgPSBDQU5UX0NPTlZFUlQ7XG4gICAgaWYgKGkgIT09IDApXG4gICAgICB2YWx1ZSArPSAnLCAnO1xuICAgIHZhbHVlICs9IHY7XG4gIH1cbiAgdmFsdWUgKz0gJ10nO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogTWFrZSBpdCBsb29rIGxpa2UgYW4gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIG9iamVjdEV4cHJlc3Npb25Ub1ZhbHVlKG9iaikge1xuICB2YXIgdmFsdWUgPSAneyc7XG4gIGZvciAodmFyIGk9MDsgaTxvYmoucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrID0gZXhwcmVzc2lvblRvVmFsdWUob2JqLnByb3BlcnRpZXNbaV0ua2V5KTtcbiAgICB2YXIgdiA9IGV4cHJlc3Npb25Ub1ZhbHVlKG9iai5wcm9wZXJ0aWVzW2ldLnZhbHVlKTtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgdiA9IENBTlRfQ09OVkVSVDtcbiAgICBpZiAoaSAhPT0gMClcbiAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgdmFsdWUgKz0gJ1wiJyArIGsgKyAnXCI6ICcgKyB2O1xuICB9XG4gIHZhbHVlICs9ICd9JztcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIE1lbWJlckV4cHJlc3Npb24gcmVmZXJlbmNlcyBhIHZhcmlhYmxlIHdpdGggbmFtZVxuICovXG5mdW5jdGlvbiBtZW1iZXJFeHByZXNzaW9uVG9WYWx1ZShtZW1iZXIpIHtcbiAgcmV0dXJuIGV4cHJlc3Npb25Ub1ZhbHVlKG1lbWJlci5vYmplY3QpICsgXCIuXCIgKyBleHByZXNzaW9uVG9WYWx1ZShtZW1iZXIucHJvcGVydHkpO1xufVxuXG4vKipcbiAqIFRyaWVzIHRvIGdldCBhIHZhbHVlIGZyb20gZXhwcmVzc2lvbi4gSGFuZGxlcyBMaXRlcmFsLCBVbmFyeUV4cHJlc3Npb25cbiAqIHJldHVybnMgdW5kZWZpbmVkIG9uIGZhaWx1cmVcbiAqIHZhbHVlRXhwcmVzc2lvbiBleGFtcGxlOlxuICogeyB0eXBlOiBcIkxpdGVyYWxcIixcbiAqL1xuZnVuY3Rpb24gZXhwcmVzc2lvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKSB7XG4gIHN3aXRjaCh2YWx1ZUV4cHJlc3Npb24udHlwZSkge1xuICAgIGNhc2UgJ0xpdGVyYWwnOlxuICAgICAgcmV0dXJuIGxpdGVyYWxUb1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiB1bmFyeVRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiBpZGVudGlmaWVyVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ0Z1bmN0aW9uRGVjbGFyYXRpb24nOlxuICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVjbGFyYXRpb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiBmdW5jdGlvbkV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnQXJyYXlFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiBhcnJheUV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gb2JqZWN0RXhwcmVzc2lvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiBpZGVudGlmaWVyVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ01lbWJlckV4cHJlc3Npb24nOlxuICAgICAgcmV0dXJuIG1lbWJlckV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG52YXIgQ0FOVF9DT05WRVJUID0gJ1VOS05PV04nO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENBTlRfQ09OVkVSVDogQ0FOVF9DT05WRVJULFxuICBleHByZXNzaW9uVG9WYWx1ZTogZXhwcmVzc2lvblRvVmFsdWVcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGRvY3MgICA9IHJlcXVpcmUoJy4vZG9jcycpO1xudmFyIGVzdXRpbCA9IHJlcXVpcmUoJy4vZXN1dGlsJyk7XG52YXIganNkb2MgID0gcmVxdWlyZSgnLi9qc2RvYycpO1xudmFyIGFuYWx5emVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9hbmFseXplLXByb3BlcnRpZXMnKTtcbnZhciBhc3RWYWx1ZSA9IHJlcXVpcmUoJy4vYXN0LXZhbHVlLmpzJyk7XG5cbnZhciBudW1GZWF0dXJlcyA9IDA7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmVoYXZpb3JGaW5kZXIoKSB7XG4gIC8qKiBAdHlwZSB7IUFycmF5PEJlaGF2aW9yRGVzY3JpcHRvcj59IFRoZSBiZWhhdmlvcnMgd2UndmUgZm91bmQuICovXG4gIHZhciBiZWhhdmlvcnMgPSBbXTtcblxuICB2YXIgY3VycmVudEJlaGF2aW9yID0gbnVsbDtcblxuICAvKipcbiAgICogc3BlY2lhbC1jYXNlIHByb3BlcnRpZXNcbiAgICovXG4gIHZhciBwcm9wZXJ0eUhhbmRsZXJzID0ge1xuICAgIHByb3BlcnRpZXM6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBwcm9wcyA9IGFuYWx5emVQcm9wZXJ0aWVzKG5vZGUpO1xuXG4gICAgICBmb3IgKHZhciBpPTA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcy5wdXNoKHByb3BzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIG1lcmdlcyBiZWhhdmlvciB3aXRoIHByZWV4aXN0aW5nIGJlaGF2aW9yIHdpdGggdGhlIHNhbWUgbmFtZS5cbiAgICogaGVyZSB0byBzdXBwb3J0IG11bHRpcGxlIEBwb2x5bWVyQmVoYXZpb3IgdGFncyByZWZlcnJpbmdcbiAgICogdG8gc2FtZSBiZWhhdmlvci4gU2VlIGlyb24tbXVsdGktc2VsZWN0YWJsZSBmb3IgZXhhbXBsZS5cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlQmVoYXZpb3IobmV3QmVoYXZpb3IpIHtcbiAgICB2YXIgaXNCZWhhdmlvckltcGwgPSBmdW5jdGlvbihiKSB7IC8vIGZpbHRlciBvdXQgQmVoYXZpb3JJbXBsXG4gICAgICByZXR1cm4gYi5pbmRleE9mKG5ld0JlaGF2aW9yLmlzKSA9PT0gLTE7XG4gICAgfTtcbiAgICBmb3IgKHZhciBpPTA7IGk8YmVoYXZpb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmV3QmVoYXZpb3IuaXMgIT09IGJlaGF2aW9yc1tpXS5pcylcbiAgICAgICAgY29udGludWU7XG4gICAgICAvLyBtZXJnZSBkZXNjLCBsb25nZXN0IGRlc2Mgd2luc1xuICAgICAgaWYgKG5ld0JlaGF2aW9yLmRlc2MpIHtcbiAgICAgICAgaWYgKGJlaGF2aW9yc1tpXS5kZXNjKSB7XG4gICAgICAgICAgaWYgKG5ld0JlaGF2aW9yLmRlc2MubGVuZ3RoID4gYmVoYXZpb3JzW2ldLmRlc2MubGVuZ3RoKVxuICAgICAgICAgICAgYmVoYXZpb3JzW2ldLmRlc2MgPSBuZXdCZWhhdmlvci5kZXNjO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGJlaGF2aW9yc1tpXS5kZXNjID0gbmV3QmVoYXZpb3IuZGVzYztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gbWVyZ2UgZGVtb3NcbiAgICAgIGJlaGF2aW9yc1tpXS5kZW1vcyA9IChiZWhhdmlvcnNbaV0uZGVtb3MgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5kZW1vcyB8fCBbXSk7XG4gICAgICAvLyBtZXJnZSBldmVudHMsXG4gICAgICBiZWhhdmlvcnNbaV0uZXZlbnRzID0gKGJlaGF2aW9yc1tpXS5ldmVudHMgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5ldmVudHMgfHwgW10pO1xuICAgICAgLy8gbWVyZ2UgcHJvcGVydGllc1xuICAgICAgYmVoYXZpb3JzW2ldLnByb3BlcnRpZXMgPSAoYmVoYXZpb3JzW2ldLnByb3BlcnRpZXMgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5wcm9wZXJ0aWVzIHx8IFtdKTtcbiAgICAgIC8vIG1lcmdlIGJlaGF2aW9yc1xuICAgICAgYmVoYXZpb3JzW2ldLmJlaGF2aW9ycyA9XG4gICAgICAgIChiZWhhdmlvcnNbaV0uYmVoYXZpb3JzIHx8IFtdKS5jb25jYXQobmV3QmVoYXZpb3IuYmVoYXZpb3JzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKGlzQmVoYXZpb3JJbXBsKTtcbiAgICAgIHJldHVybiBiZWhhdmlvcnNbaV07XG4gICAgfVxuICAgIHJldHVybiBuZXdCZWhhdmlvcjtcbiAgfVxuXG4gIHZhciB2aXNpdG9ycyA9IHtcblxuICAgIC8qKlxuICAgICAqIExvb2sgZm9yIG9iamVjdCBkZWNsYXJhdGlvbnMgd2l0aCBAYmVoYXZpb3IgaW4gdGhlIGRvY3MuXG4gICAgICovXG4gICAgZW50ZXJWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT09IDEpIHJldHVybjsgIC8vIEFtYmlndW91cy5cbiAgICAgIHRoaXMuX2luaXRCZWhhdmlvcihub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcobm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvb2sgZm9yIG9iamVjdCBhc3NpZ25tZW50cyB3aXRoIEBwb2x5bWVyQmVoYXZpb3IgaW4gdGhlIGRvY3MuXG4gICAgICovXG4gICAgZW50ZXJBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7XG4gICAgICB0aGlzLl9pbml0QmVoYXZpb3IocGFyZW50LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcobm9kZS5sZWZ0KTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBfcGFyc2VDaGFpbmVkQmVoYXZpb3JzOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAvLyBpZiBjdXJyZW50IGJlaGF2aW9yIGlzIHBhcnQgb2YgYW4gYXJyYXksIGl0IGdldHMgZXh0ZW5kZWQgYnkgb3RoZXIgYmVoYXZpb3JzXG4gICAgICAvLyBpbnNpZGUgdGhlIGFycmF5LiBFeDpcbiAgICAgIC8vIFBvbHltZXIuSXJvbk11bHRpU2VsZWN0YWJsZUJlaGF2aW9yID0gWyB7Li4uLn0sIFBvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvcl1cbiAgICAgIC8vIFdlIGFkZCB0aGVzZSB0byBiZWhhdmlvcnMgYXJyYXlcbiAgICAgIHZhciBleHByZXNzaW9uO1xuICAgICAgc3dpdGNoKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlICdFeHByZXNzaW9uU3RhdGVtZW50JzpcbiAgICAgICAgICBleHByZXNzaW9uID0gbm9kZS5leHByZXNzaW9uLnJpZ2h0O1xuICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNsYXJhdGlvbic6XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aCA+IDAgPyBub2RlLmRlY2xhcmF0aW9uc1swXS5pbml0IDogbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB2YXIgY2hhaW5lZCA9IFtdO1xuICAgICAgaWYgKGV4cHJlc3Npb24gJiYgZXhwcmVzc2lvbi50eXBlID09PSAnQXJyYXlFeHByZXNzaW9uJykge1xuICAgICAgICBmb3IgKHZhciBpPTA7IGkgPCBleHByZXNzaW9uLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGV4cHJlc3Npb24uZWxlbWVudHNbaV0udHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKVxuICAgICAgICAgICAgY2hhaW5lZC5wdXNoKGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKGV4cHJlc3Npb24uZWxlbWVudHNbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhaW5lZC5sZW5ndGggPiAwKVxuICAgICAgICAgIGN1cnJlbnRCZWhhdmlvci5iZWhhdmlvcnMgPSBjaGFpbmVkO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdEJlaGF2aW9yOiBmdW5jdGlvbihub2RlLCBnZXROYW1lKSB7XG4gICAgICB2YXIgY29tbWVudCA9IGVzdXRpbC5nZXRBdHRhY2hlZENvbW1lbnQobm9kZSk7XG4gICAgICAvLyBRdWlja2x5IGZpbHRlciBkb3duIHRvIHBvdGVudGlhbCBjYW5kaWRhdGVzLlxuICAgICAgaWYgKCFjb21tZW50IHx8IGNvbW1lbnQuaW5kZXhPZignQHBvbHltZXJCZWhhdmlvcicpID09PSAtMSkgcmV0dXJuO1xuXG5cbiAgICAgIGN1cnJlbnRCZWhhdmlvciA9IHtcbiAgICAgICAgdHlwZTogJ2JlaGF2aW9yJyxcbiAgICAgICAgZGVzYzogY29tbWVudCxcbiAgICAgICAgZXZlbnRzOiBlc3V0aWwuZ2V0RXZlbnRDb21tZW50cyhub2RlKS5tYXAoIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHsgZGVzYzogZXZlbnR9O1xuICAgICAgICB9KVxuICAgICAgfTtcblxuICAgICAgZG9jcy5hbm5vdGF0ZUJlaGF2aW9yKGN1cnJlbnRCZWhhdmlvcik7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBhY3R1YWxseSBwYXJzZWQgYSBiZWhhdmlvciB0YWchXG4gICAgICBpZiAoIWpzZG9jLmhhc1RhZyhjdXJyZW50QmVoYXZpb3IuanNkb2MsICdwb2x5bWVyQmVoYXZpb3InKSkge1xuICAgICAgICBjdXJyZW50QmVoYXZpb3IgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBuYW1lID0ganNkb2MuZ2V0VGFnKGN1cnJlbnRCZWhhdmlvci5qc2RvYywgJ3BvbHltZXJCZWhhdmlvcicsICduYW1lJyk7XG4gICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgbmFtZSA9IGdldE5hbWUoKTtcbiAgICAgIH1cbiAgICAgIGlmICghbmFtZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgbmFtZSBmb3IgQHBvbHltZXJCZWhhdmlvcjonLCBjb21tZW50KTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCZWhhdmlvci5pcyA9IG5hbWU7XG5cbiAgICAgIHRoaXMuX3BhcnNlQ2hhaW5lZEJlaGF2aW9ycyhub2RlKTtcblxuICAgICAgY3VycmVudEJlaGF2aW9yID0gbWVyZ2VCZWhhdmlvcihjdXJyZW50QmVoYXZpb3IpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgb2JqZWN0IGV4cHJlc3Npb24gYWZ0ZXIgc3VjaCBhbiBhc3NpZ25tZW50IGlzIHRoZVxuICAgICAqIGJlaGF2aW9yJ3MgZGVjbGFyYXRpb24uIFNlZW1zIHRvIGJlIGEgZGVjZW50IGFzc3VtcHRpb24gZm9yIG5vdy5cbiAgICAgKi9cbiAgICBlbnRlck9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgaWYgKCFjdXJyZW50QmVoYXZpb3IgfHwgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMpIHJldHVybjtcblxuICAgICAgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMgPSBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcyB8fCBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gbm9kZS5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICB2YXIgbmFtZSA9IGVzdXRpbC5vYmplY3RLZXlUb1N0cmluZyhwcm9wLmtleSk7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDYW50IGRldGVybWluZSBuYW1lIGZvciBwcm9wZXJ0eSBrZXkuJyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBub2RlLmxvYy5zdGFydFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgaW4gcHJvcGVydHlIYW5kbGVycykge1xuICAgICAgICAgIHByb3BlcnR5SGFuZGxlcnNbbmFtZV0ocHJvcC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMucHVzaChlc3V0aWwudG9Qcm9wZXJ0eURlc2NyaXB0b3IocHJvcCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiZWhhdmlvcnMucHVzaChjdXJyZW50QmVoYXZpb3IpO1xuICAgICAgY3VycmVudEJlaGF2aW9yID0gbnVsbDtcbiAgICB9LFxuXG4gIH07XG5cbiAgcmV0dXJuIHt2aXNpdG9yczogdmlzaXRvcnMsIGJlaGF2aW9yczogYmVoYXZpb3JzfTtcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbid1c2Ugc3RyaWN0JztcblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuXG52YXIganNkb2MgPSByZXF1aXJlKCcuL2pzZG9jJyk7XG5cbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xuXG4vKiogUHJvcGVydGllcyBvbiBlbGVtZW50IHByb3RvdHlwZXMgdGhhdCBhcmUgcHVyZWx5IGNvbmZpZ3VyYXRpb24uICovXG52YXIgRUxFTUVOVF9DT05GSUdVUkFUSU9OID0gW1xuICAnYXR0YWNoZWQnLFxuICAnYXR0cmlidXRlQ2hhbmdlZCcsXG4gICdjb25maWd1cmUnLFxuICAnY29uc3RydWN0b3InLFxuICAnY3JlYXRlZCcsXG4gICdkZXRhY2hlZCcsXG4gICdlbmFibGVDdXN0b21TdHlsZVByb3BlcnRpZXMnLFxuICAnZXh0ZW5kcycsXG4gICdob3N0QXR0cmlidXRlcycsXG4gICdpcycsXG4gICdsaXN0ZW5lcnMnLFxuICAnbWl4aW5zJyxcbiAgJ29ic2VydmVycycsXG4gICdwcm9wZXJ0aWVzJyxcbiAgJ3JlYWR5JyxcbiAgJ3JlZ2lzdGVyZWQnXG5dO1xuXG4vKiogVGFncyB1bmRlcnN0b29kIGJ5IHRoZSBhbm5vdGF0aW9uIHByb2Nlc3MsIHRvIGJlIHJlbW92ZWQgZHVyaW5nIGBjbGVhbmAuICovXG52YXIgSEFORExFRF9UQUdTID0gW1xuICAncGFyYW0nLFxuICAncmV0dXJuJyxcbiAgJ3R5cGUnLFxuXTtcblxuLyoqXG4gKiBBbm5vdGF0ZXMgSHlkcm9seXNpcyBkZXNjcmlwdG9ycywgcHJvY2Vzc2luZyBhbnkgYGRlc2NgIHByb3BlcnRpZXMgYXMgSlNEb2MuXG4gKlxuICogWW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIGEgbW9yZSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIHRoaXMsIHN1Y2ggYXNcbiAqIGBhbm5vdGF0ZUVsZW1lbnRgLlxuICpcbiAqIFByb2Nlc3NlZCBKU0RvYyB2YWx1ZXMgd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSB2aWEgdGhlIGBqc2RvY2AgcHJvcGVydHkgb24gYVxuICogZGVzY3JpcHRvciBub2RlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG5vZGUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGRlc2NyaXB0b3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlKGRlc2NyaXB0b3IpIHtcbiAgaWYgKCFkZXNjcmlwdG9yIHx8IGRlc2NyaXB0b3IuanNkb2MpIHJldHVybiBkZXNjcmlwdG9yO1xuXG4gIGlmICh0eXBlb2YgZGVzY3JpcHRvci5kZXNjID09PSAnc3RyaW5nJykge1xuICAgIGRlc2NyaXB0b3IuanNkb2MgPSBqc2RvYy5wYXJzZUpzZG9jKGRlc2NyaXB0b3IuZGVzYyk7XG4gICAgLy8gV2Ugd2FudCB0byBwcmVzZW50IHRoZSBub3JtYWxpemVkIGZvcm0gb2YgYSBkZXNjcmlwdG9yLlxuICAgIGRlc2NyaXB0b3IuanNkb2Mub3JpZyA9IGRlc2NyaXB0b3IuZGVzYztcbiAgICBkZXNjcmlwdG9yLmRlc2MgICAgICAgPSBkZXNjcmlwdG9yLmpzZG9jLmJvZHk7XG4gIH1cblxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgQGV2ZW50LCBAaGVybywgJiBAZGVtbyB0YWdzXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlRWxlbWVudEhlYWRlcihkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmV2ZW50cykge1xuICAgIGRlc2NyaXB0b3IuZXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIF9hbm5vdGF0ZUV2ZW50KGV2ZW50KTtcbiAgICB9KTtcbiAgICBkZXNjcmlwdG9yLmV2ZW50cy5zb3J0KCBmdW5jdGlvbihhLGIpIHtcbiAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgIH0pO1xuICB9XG4gIGRlc2NyaXB0b3IuZGVtb3MgPSBbXTtcbiAgaWYgKGRlc2NyaXB0b3IuanNkb2MgJiYgZGVzY3JpcHRvci5qc2RvYy50YWdzKSB7XG4gICAgZGVzY3JpcHRvci5qc2RvYy50YWdzLmZvckVhY2goIGZ1bmN0aW9uKHRhZykge1xuICAgICAgc3dpdGNoKHRhZy50YWcpIHtcbiAgICAgICAgY2FzZSAnaGVybyc6XG4gICAgICAgICAgZGVzY3JpcHRvci5oZXJvID0gdGFnLm5hbWUgfHwgJ2hlcm8ucG5nJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGVtbyc6XG4gICAgICAgICAgZGVzY3JpcHRvci5kZW1vcy5wdXNoKHtcbiAgICAgICAgICAgIGRlc2M6IHRhZy5ib2R5IHx8ICdkZW1vJyxcbiAgICAgICAgICAgIHBhdGg6IHRhZy5uYW1lIHx8ICdkZW1vL2luZGV4Lmh0bWwnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgZG9jdW1lbnRhdGlvbiBmb3VuZCB3aXRoaW4gYSBIeWRyb2x5c2lzIGVsZW1lbnQgZGVzY3JpcHRvci4gQWxzb1xuICogc3VwcG9ydHMgYmVoYXZpb3JzLlxuICpcbiAqIElmIHRoZSBlbGVtZW50IHdhcyBwcm9jZXNzZWQgdmlhIGBoeWRyb2xpemVgLCB0aGUgZWxlbWVudCdzIGRvY3VtZW50YXRpb25cbiAqIHdpbGwgYWxzbyBiZSBleHRyYWN0ZWQgdmlhIGl0cyA8ZG9tLW1vZHVsZT4uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgVGhlIGVsZW1lbnQgZGVzY3JpcHRvci5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGRlc2NyaXB0b3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlRWxlbWVudChkZXNjcmlwdG9yKSB7XG4gIGlmICghZGVzY3JpcHRvci5kZXNjICYmIGRlc2NyaXB0b3IudHlwZSA9PT0gJ2VsZW1lbnQnKSB7XG4gICAgZGVzY3JpcHRvci5kZXNjID0gX2ZpbmRFbGVtZW50RG9jcyhkZXNjcmlwdG9yLmlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5kb21Nb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNjcmlwdEVsZW1lbnQpO1xuICB9XG4gIGFubm90YXRlKGRlc2NyaXB0b3IpO1xuXG4gIC8vIFRoZSBgPGRvbS1tb2R1bGU+YCBpcyB0b28gbG93IGxldmVsIGZvciBtb3N0IG5lZWRzLCBhbmQgaXQgaXMgX25vdF9cbiAgLy8gc2VyaWFsaXphYmxlLiBTbyB3ZSBkcm9wIGl0IG5vdyB0aGF0IHdlJ3ZlIGV4dHJhY3RlZCBhbGwgdGhlIHVzZWZ1bCBiaXRzXG4gIC8vIGZyb20gaXQuXG4gIGRlbGV0ZSBkZXNjcmlwdG9yLmRvbU1vZHVsZTtcblxuICAvLyBEZXNjcmlwdG9ycyB0aGF0IHNob3VsZCBoYXZlIHRoZWlyIGBkZXNjYCBwcm9wZXJ0aWVzIHBhcnNlZCBhcyBKU0RvYy5cbiAgZGVzY3JpcHRvci5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICAvLyBGZWF0dXJlIHByb3BlcnRpZXMgYXJlIHNwZWNpYWwsIGNvbmZpZ3VyYXRpb24gaXMgcmVhbGx5IGp1c3QgYSBtYXR0ZXIgb2ZcbiAgICAvLyBpbmhlcml0YW5jZS4uLlxuICAgIGFubm90YXRlUHJvcGVydHkocHJvcGVydHksIGRlc2NyaXB0b3IuYWJzdHJhY3QpO1xuICB9KTtcblxuICAvLyBJdCBtYXkgc2VlbSBsaWtlIG92ZXJraWxsIHRvIGFsd2F5cyBzb3J0LCBidXQgd2UgaGF2ZSBhbiBhc3N1bXB0aW9uIHRoYXRcbiAgLy8gdGhlc2UgcHJvcGVydGllcyBhcmUgdHlwaWNhbGx5IGJlaW5nIGNvbnN1bWVkIGJ5IHVzZXItdmlzaWJsZSB0b29saW5nLlxuICAvLyBBcyBzdWNoLCBpdCdzIGdvb2QgdG8gaGF2ZSBjb25zaXN0ZW50IG91dHB1dC9vcmRlcmluZyB0byBhaWQgdGhlIHVzZXIuXG4gIGRlc2NyaXB0b3IucHJvcGVydGllcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAvLyBQcml2YXRlIHByb3BlcnRpZXMgYXJlIGFsd2F5cyBsYXN0LlxuICAgIGlmIChhLnByaXZhdGUgJiYgIWIucHJpdmF0ZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmICghYS5wcml2YXRlICYmIGIucHJpdmF0ZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIC8vIE90aGVyd2lzZSwgd2UncmUganVzdCBzb3J0aW5nIGFscGhhYmV0aWNhbGx5LlxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIGFubm90YXRlRWxlbWVudEhlYWRlcihkZXNjcmlwdG9yKTtcblxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgYmVoYXZpb3IgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIGJlaGF2aW9yIGRlc2NyaXB0b3JcbiAqIEByZXR1cm4ge09iamVjdH0gZGVzY3JpcHRvciBwYXNzZWQgaW4gYXMgcGFyYW1cbiAqL1xuZnVuY3Rpb24gYW5ub3RhdGVCZWhhdmlvcihkZXNjcmlwdG9yKSB7XG4gIGFubm90YXRlKGRlc2NyaXB0b3IpO1xuXG4gIGFubm90YXRlRWxlbWVudEhlYWRlcihkZXNjcmlwdG9yKTtcblxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgZXZlbnQgZG9jdW1lbnRhdGlvblxuICovXG5mdW5jdGlvbiBfYW5ub3RhdGVFdmVudChkZXNjcmlwdG9yKSB7XG4gIGFubm90YXRlKGRlc2NyaXB0b3IpO1xuICAvLyBwcm9jZXNzIEBldmVudFxuICB2YXIgZXZlbnRUYWcgPSBqc2RvYy5nZXRUYWcoZGVzY3JpcHRvci5qc2RvYywgJ2V2ZW50Jyk7XG4gIGRlc2NyaXB0b3IubmFtZSA9IGV2ZW50VGFnID8gZXZlbnRUYWcubmFtZSA6IFwiTi9BXCI7XG5cbiAgLy8gcHJvY2VzcyBAcGFyYW1zXG4gIGRlc2NyaXB0b3IucGFyYW1zID0gKGRlc2NyaXB0b3IuanNkb2MudGFncyB8fCBbXSlcbiAgICAuZmlsdGVyKCBmdW5jdGlvbih0YWcpIHtcbiAgICAgIHJldHVybiB0YWcudGFnID09PSAncGFyYW0nO1xuICAgIH0pXG4gICAgLm1hcCggZnVuY3Rpb24odGFnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0YWcudHlwZSB8fCBcIk4vQVwiLFxuICAgICAgICBkZXNjOiB0YWcuYm9keSxcbiAgICAgICAgbmFtZTogdGFnLm5hbWUgfHwgXCJOL0FcIlxuICAgICAgfTtcbiAgICB9KTtcbiAgLy8gcHJvY2VzcyBAcGFyYW1zXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG4vKipcbiAqIEFubm90YXRlcyBkb2N1bWVudGF0aW9uIGZvdW5kIGFib3V0IGEgSHlkcm9seXNpcyBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVDb25maWd1cmF0aW9uIElmIHRydWUsIGBjb25maWd1cmF0aW9uYCBpcyBub3Qgc2V0LlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgZGVzY3JpcHRpb3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlUHJvcGVydHkoZGVzY3JpcHRvciwgaWdub3JlQ29uZmlndXJhdGlvbikge1xuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcbiAgaWYgKGRlc2NyaXB0b3IubmFtZVswXSA9PT0gJ18nIHx8IGpzZG9jLmhhc1RhZyhkZXNjcmlwdG9yLmpzZG9jLCAncHJpdmF0ZScpKSB7XG4gICAgZGVzY3JpcHRvci5wcml2YXRlID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaWdub3JlQ29uZmlndXJhdGlvbiAmJiBFTEVNRU5UX0NPTkZJR1VSQVRJT04uaW5kZXhPZihkZXNjcmlwdG9yLm5hbWUpICE9PSAtMSkge1xuICAgIGRlc2NyaXB0b3IucHJpdmF0ZSAgICAgICA9IHRydWU7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmF0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIEB0eXBlIEpTRG9jIHdpbnNcbiAgZGVzY3JpcHRvci50eXBlID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICd0eXBlJywgJ3R5cGUnKSB8fCBkZXNjcmlwdG9yLnR5cGU7XG5cbiAgaWYgKGRlc2NyaXB0b3IudHlwZS5tYXRjaCgvXmZ1bmN0aW9uL2kpKSB7XG4gICAgX2Fubm90YXRlRnVuY3Rpb25Qcm9wZXJ0eShkZXNjcmlwdG9yKTtcbiAgfVxuXG4gIC8vIEBkZWZhdWx0IEpTRG9jIHdpbnNcbiAgdmFyIGRlZmF1bHRUYWcgPSBqc2RvYy5nZXRUYWcoZGVzY3JpcHRvci5qc2RvYywgJ2RlZmF1bHQnKTtcbiAgaWYgKGRlZmF1bHRUYWcgIT09IG51bGwpIHtcbiAgICBkZXNjcmlwdG9yLmRlZmF1bHQgPSAoZGVmYXVsdFRhZy5uYW1lIHx8ICcnKSArIChkZWZhdWx0VGFnLmJvZHkgfHwgJycpO1xuICB9XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvciAqL1xuZnVuY3Rpb24gX2Fubm90YXRlRnVuY3Rpb25Qcm9wZXJ0eShkZXNjcmlwdG9yKSB7XG4gIGRlc2NyaXB0b3IuZnVuY3Rpb24gPSB0cnVlO1xuXG4gIHZhciByZXR1cm5UYWcgPSBqc2RvYy5nZXRUYWcoZGVzY3JpcHRvci5qc2RvYywgJ3JldHVybicpO1xuICBpZiAocmV0dXJuVGFnKSB7XG4gICAgZGVzY3JpcHRvci5yZXR1cm4gPSB7XG4gICAgICB0eXBlOiByZXR1cm5UYWcudHlwZSxcbiAgICAgIGRlc2M6IHJldHVyblRhZy5ib2R5LFxuICAgIH07XG4gIH1cblxuICB2YXIgcGFyYW1zQnlOYW1lID0ge307XG4gIChkZXNjcmlwdG9yLnBhcmFtcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihwYXJhbSkge1xuICAgIHBhcmFtc0J5TmFtZVtwYXJhbS5uYW1lXSA9IHBhcmFtO1xuICB9KTtcbiAgKGRlc2NyaXB0b3IuanNkb2MgJiYgZGVzY3JpcHRvci5qc2RvYy50YWdzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHRhZykge1xuICAgIGlmICh0YWcudGFnICE9PSAncGFyYW0nKSByZXR1cm47XG4gICAgdmFyIHBhcmFtID0gcGFyYW1zQnlOYW1lW3RhZy5uYW1lXTtcbiAgICBpZiAoIXBhcmFtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFyYW0udHlwZSA9IHRhZy50eXBlIHx8IHBhcmFtLnR5cGU7XG4gICAgcGFyYW0uZGVzYyA9IHRhZy5ib2R5O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyByYXcgZmVhdHVyZXMgaW50byBhbiBhYnN0cmFjdCBgUG9seW1lci5CYXNlYCBlbGVtZW50LlxuICpcbiAqIE5vdGUgdGhhdCBkb2NzIG9uIHRoaXMgZWxlbWVudCBfYXJlIG5vdCBwcm9jZXNzZWRfLiBZb3UgbXVzdCBjYWxsXG4gKiBgYW5ub3RhdGVFbGVtZW50YCBvbiBpdCB5b3Vyc2VsZiBpZiB5b3Ugd2lzaCB0aGF0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSBmZWF0dXJlc1xuICogQHJldHVybiB7RWxlbWVudERlc2NyaXB0b3J9XG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVFbGVtZW50KGZlYXR1cmVzKSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gZmVhdHVyZXMucmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgZmVhdHVyZSkge1xuICAgIHJldHVybiByZXN1bHQuY29uY2F0KGZlYXR1cmUucHJvcGVydGllcyk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICAgICAgICdlbGVtZW50JyxcbiAgICBpczogICAgICAgICAnUG9seW1lci5CYXNlJyxcbiAgICBhYnN0cmFjdDogICB0cnVlLFxuICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG4gICAgZGVzYzogJ2BQb2x5bWVyLkJhc2VgIGFjdHMgYXMgYSBiYXNlIHByb3RvdHlwZSBmb3IgYWxsIFBvbHltZXIgJyArXG4gICAgICAgICAgJ2VsZW1lbnRzLiBJdCBpcyBjb21wb3NlZCB2aWEgdmFyaW91cyBjYWxscyB0byAnICtcbiAgICAgICAgICAnYFBvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSgpYC5cXG4nICtcbiAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgJ1RoZSBwcm9wZXJ0aWVzIHJlZmxlY3RlZCBoZXJlIGFyZSB0aGUgY29tYmluZWQgdmlldyBvZiBhbGwgJyArXG4gICAgICAgICAgJ2ZlYXR1cmVzIGZvdW5kIGluIHRoaXMgbGlicmFyeS4gVGhlcmUgbWF5IGJlIG1vcmUgcHJvcGVydGllcyAnICtcbiAgICAgICAgICAnYWRkZWQgdmlhIG90aGVyIGxpYnJhcmllcywgYXMgd2VsbC4nLFxuICB9O1xufVxuXG4vKipcbiAqIENsZWFucyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIGEgZGVzY3JpcHRvciwgYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5XG4gKiBjYWxsZWQgYGFubm90YXRlYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvclxuICovXG5mdW5jdGlvbiBjbGVhbihkZXNjcmlwdG9yKSB7XG4gIGlmICghZGVzY3JpcHRvci5qc2RvYykgcmV0dXJuO1xuICAvLyBUaGUgZG9jdGV4dCB3YXMgd3JpdHRlbiB0byBgZGVzY3JpcHRvci5kZXNjYFxuICBkZWxldGUgZGVzY3JpcHRvci5qc2RvYy5ib2R5O1xuICBkZWxldGUgZGVzY3JpcHRvci5qc2RvYy5vcmlnO1xuXG4gIHZhciBjbGVhblRhZ3MgPSBbXTtcbiAgKGRlc2NyaXB0b3IuanNkb2MudGFncyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbih0YWcpIHtcbiAgICAvLyBEcm9wIGFueSB0YWdzIHdlJ3ZlIGNvbnN1bWVkLlxuICAgIGlmIChIQU5ETEVEX1RBR1MuaW5kZXhPZih0YWcudGFnKSAhPT0gLTEpIHJldHVybjtcbiAgICBjbGVhblRhZ3MucHVzaCh0YWcpO1xuICB9KTtcblxuICBpZiAoY2xlYW5UYWdzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIE5vIHRhZ3M/IG5vIGRvY3MgbGVmdCFcbiAgICBkZWxldGUgZGVzY3JpcHRvci5qc2RvYztcbiAgfSBlbHNlIHtcbiAgICBkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgPSBjbGVhblRhZ3M7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGVhbnMgcmVkdW5kYW50IHByb3BlcnRpZXMgZnJvbSBhbiBlbGVtZW50LCBhc3N1bWluZyB0aGF0IHlvdSBoYXZlIGFscmVhZHlcbiAqIGNhbGxlZCBgYW5ub3RhdGVFbGVtZW50YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnREZXNjcmlwdG9yfEJlaGF2aW9yRGVzY3JpcHRvcn0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBjbGVhbkVsZW1lbnQoZWxlbWVudCkge1xuICBjbGVhbihlbGVtZW50KTtcbiAgZWxlbWVudC5wcm9wZXJ0aWVzLmZvckVhY2goY2xlYW5Qcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogQ2xlYW5zIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGZyb20gYSBwcm9wZXJ0eSwgYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5XG4gKiBjYWxsZWQgYGFubm90YXRlUHJvcGVydHlgLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlEZXNjcmlwdG9yfSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBjbGVhblByb3BlcnR5KHByb3BlcnR5KSB7XG4gIGNsZWFuKHByb3BlcnR5KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZWxlbWVudElkXG4gKiBAcGFyYW0ge0RvY3VtZW50QVNUfSBkb21Nb2R1bGVcbiAqIEBwYXJhbSB7RG9jdW1lbnRBU1R9IHNjcmlwdEVsZW1lbnQgVGhlIHNjcmlwdCB0aGF0IHRoZSBlbGVtZW50IHdhcyBkZWZpbmVkIGluLlxuICovXG5mdW5jdGlvbiBfZmluZEVsZW1lbnREb2NzKGVsZW1lbnRJZCwgZG9tTW9kdWxlLCBzY3JpcHRFbGVtZW50KSB7XG4gIC8vIE5vdGUgdGhhdCB3ZSBjb25jYXRlbmF0ZSBkb2NzIGZyb20gYWxsIHNvdXJjZXMgaWYgd2UgZmluZCB0aGVtLlxuICAvLyBlbGVtZW50IGNhbiBiZSBkZWZpbmVkIGluOlxuICAvLyBodG1sIGNvbW1lbnQgcmlnaHQgYmVmb3JlIGRvbS1tb2R1bGVcbiAgLy8gaHRtbCBjb21tbmV0IHJpZ2h0IGJlZm9yZSBzY3JpcHQgZGVmaW5pbmcgdGhlIG1vZHVsZSwgaWYgZG9tLW1vZHVsZSBpcyBlbXB0eVxuXG4gIHZhciBmb3VuZCA9IFtdO1xuXG4gIC8vIERvIHdlIGhhdmUgYSBIVE1MIGNvbW1lbnQgb24gdGhlIGA8ZG9tLW1vZHVsZT5gIG9yIGA8c2NyaXB0PmA/XG4gIC8vXG4gIC8vIENvbmZ1c2luZ2x5LCB3aXRoIG91ciBjdXJyZW50IHN0eWxlLCB0aGUgY29tbWVudCB3aWxsIGJlIGF0dGFjaGVkIHRvXG4gIC8vIGA8aGVhZD5gLCByYXRoZXIgdGhhbiBiZWluZyBhIHNpYmxpbmcgdG8gdGhlIGA8ZG9tLW1vZHVsZT5gXG4gIHZhciBzZWFyY2hSb290ID0gZG9tTW9kdWxlIHx8IHNjcmlwdEVsZW1lbnQ7XG4gIHZhciBwYXJlbnRzID0gZG9tNS5ub2RlV2Fsa0FsbFByaW9yKHNlYXJjaFJvb3QsIGRvbTUuaXNDb21tZW50Tm9kZSk7XG4gIHZhciBjb21tZW50ID0gcGFyZW50cy5sZW5ndGggPiAwID8gcGFyZW50c1swXSA6IG51bGw7XG4gIGlmIChjb21tZW50ICYmIGNvbW1lbnQuZGF0YSkge1xuICAgIGZvdW5kLnB1c2goY29tbWVudC5kYXRhKTtcbiAgfVxuICBpZiAoZm91bmQubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGZvdW5kXG4gICAgLmZpbHRlcihmdW5jdGlvbihjb21tZW50KSB7XG4gICAgICAvLyBza2lwIEBsaWNlbnNlIGNvbW1lbnRzXG4gICAgICBpZiAoY29tbWVudCAmJiBjb21tZW50LmluZGV4T2YoJ0BsaWNlbnNlJyA9PT0gLTEpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5tYXAoanNkb2MudW5pbmRlbnQpLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBfZmluZExhc3RDaGlsZE5hbWVkKG5hbWUsIHBhcmVudCkge1xuICB2YXIgY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGROb2RlcztcbiAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDEsIGNoaWxkOyBpID49IDA7IGktLSkge1xuICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgaWYgKGNoaWxkLm5vZGVOYW1lID09PSBuYW1lKSByZXR1cm4gY2hpbGQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIFRPRE8obmV2aXIpOiBwYXJzZTUtdXRpbHMhXG5mdW5jdGlvbiBfZ2V0Tm9kZUF0dHJpYnV0ZShub2RlLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSAwLCBhdHRyOyBpIDwgbm9kZS5hdHRycy5sZW5ndGg7IGkrKykge1xuICAgIGF0dHIgPSBub2RlLmF0dHJzW2ldO1xuICAgIGlmIChhdHRyLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBhdHRyLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYW5ub3RhdGU6ICAgICAgICBhbm5vdGF0ZSxcbiAgYW5ub3RhdGVFbGVtZW50OiBhbm5vdGF0ZUVsZW1lbnQsXG4gIGFubm90YXRlQmVoYXZpb3I6IGFubm90YXRlQmVoYXZpb3IsXG4gIGNsZWFuOiAgICAgICAgICAgY2xlYW4sXG4gIGNsZWFuRWxlbWVudDogICAgY2xlYW5FbGVtZW50LFxuICBmZWF0dXJlRWxlbWVudDogIGZlYXR1cmVFbGVtZW50LFxufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZSgnZXN0cmF2ZXJzZScpO1xuXG52YXIgZXN1dGlsICAgID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcbnZhciBmaW5kQWxpYXMgPSByZXF1aXJlKCcuL2ZpbmQtYWxpYXMnKTtcbnZhciBhbmFseXplUHJvcGVydGllcyA9IHJlcXVpcmUoJy4vYW5hbHl6ZS1wcm9wZXJ0aWVzJyk7XG52YXIgYXN0VmFsdWUgPSByZXF1aXJlKCcuL2FzdC12YWx1ZScpO1xuXG52YXIgZWxlbWVudEZpbmRlciA9IGZ1bmN0aW9uIGVsZW1lbnRGaW5kZXIoKSB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBlbGVtZW50cyBleHBvcnRlZCBieSBlYWNoIHRyYXZlcnNlZCBzY3JpcHQuXG4gICAqL1xuICB2YXIgZWxlbWVudHMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgYmVpbmcgYnVpbHQgZHVyaW5nIGEgdHJhdmVyc2FsO1xuICAgKi9cbiAgdmFyIGVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIGEgc2V0IG9mIHNwZWNpYWwgY2FzZSBwcm9wZXJ0aWVzLiB0aGVzZSBzaG91bGQgb25seSBiZSBjYWxsZWRcbiAgICogd2hlbiB3ZSBrbm93IHdlJ3JlIGluc2lkZSBhbiBlbGVtZW50IGRlZmluaXRpb24uXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgcHJvcGVydHlIYW5kbGVycyA9IHtcbiAgICBpczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSA9PSAnTGl0ZXJhbCcpIHtcbiAgICAgICAgZWxlbWVudC5pcyA9IG5vZGUudmFsdWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbihub2RlKSB7XG5cbiAgICAgIHZhciBwcm9wcyA9IGFuYWx5emVQcm9wZXJ0aWVzKG5vZGUpO1xuXG4gICAgICBmb3IgKHZhciBpPTA7IGk8cHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzLnB1c2gocHJvcHNbaV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgYmVoYXZpb3JzOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAobm9kZS50eXBlICE9ICdBcnJheUV4cHJlc3Npb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuYmVoYXZpb3JzID0gW107XG5cbiAgICAgIGZvciAodmFyIGk9MDsgaTxub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB2ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUobm9kZS5lbGVtZW50c1tpXSk7XG4gICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgdiA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgZWxlbWVudC5iZWhhdmlvcnMucHVzaCh2KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIHZpc2l0b3JzID0ge1xuICAgIGVudGVyQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIGVudGVyQ2FsbEV4cHJlc3Npb24obm9kZSwgcGFyZW50KSB7XG4gICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gICAgICBpZiAoY2FsbGVlLnR5cGUgPT0gJ0lkZW50aWZpZXInKSB7XG5cbiAgICAgICAgaWYgKGNhbGxlZS5uYW1lID09ICdQb2x5bWVyJykge1xuICAgICAgICAgIGVsZW1lbnQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgICAgICAgICBkZXNjOiBlc3V0aWwuZ2V0QXR0YWNoZWRDb21tZW50KHBhcmVudCksXG4gICAgICAgICAgICBldmVudHM6IGVzdXRpbC5nZXRFdmVudENvbW1lbnRzKHBhcmVudCkubWFwKCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4ge2Rlc2M6IGV2ZW50fTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGVhdmVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gbGVhdmVDYWxsRXhwcmVzc2lvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZhciBjYWxsZWUgPSBub2RlLmNhbGxlZTtcbiAgICAgIGlmIChjYWxsZWUudHlwZSA9PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgaWYgKGNhbGxlZS5uYW1lID09ICdQb2x5bWVyJykge1xuICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgZWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGVudGVyT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24gZW50ZXJPYmplY3RFeHByZXNzaW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgaWYgKGVsZW1lbnQgJiYgIWVsZW1lbnQucHJvcGVydGllcykge1xuICAgICAgICBlbGVtZW50LnByb3BlcnRpZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgcHJvcCA9IG5vZGUucHJvcGVydGllc1tpXTtcbiAgICAgICAgICB2YXIgbmFtZSA9IGVzdXRpbC5vYmplY3RLZXlUb1N0cmluZyhwcm9wLmtleSk7XG4gICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdDYW50IGRldGVybWluZSBuYW1lIGZvciBwcm9wZXJ0eSBrZXkuJyxcbiAgICAgICAgICAgICAgbG9jYXRpb246IG5vZGUubG9jLnN0YXJ0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuYW1lIGluIHByb3BlcnR5SGFuZGxlcnMpIHtcbiAgICAgICAgICAgIHByb3BlcnR5SGFuZGxlcnNbbmFtZV0ocHJvcC52YWx1ZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzLnB1c2goZXN1dGlsLnRvUHJvcGVydHlEZXNjcmlwdG9yKHByb3ApKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXN0cmF2ZXJzZS5WaXNpdG9yT3B0aW9uLlNraXA7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4ge3Zpc2l0b3JzOiB2aXNpdG9ycywgZWxlbWVudHM6IGVsZW1lbnRzfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZWxlbWVudEZpbmRlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZShcImVzdHJhdmVyc2VcIik7XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGFuIEVzcHJlZSBub2RlIG1hdGNoZXMgYSBwYXJ0aWN1bGFyIG9iamVjdCBwYXRoLlxuICpcbiAqIGUuZy4geW91IGhhdmUgYSBNZW1iZXJFeHByZXNzaW9uIG5vZGUsIGFuZCB3YW50IHRvIHNlZSB3aGV0aGVyIGl0IHJlcHJlc2VudHNcbiAqIGBGb28uQmFyLkJhemA6XG4gKlxuICogICAgIG1hdGNoZXNDYWxsRXhwcmVzc2lvbihub2RlLCBbJ0ZvbycsICdCYXInLCAnQmF6J10pXG4gKlxuICogQHBhcmFtIHtOb2RlfSBleHByZXNzaW9uIFRoZSBFc3ByZWUgbm9kZSB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBwYXRoIFRoZSBwYXRoIHRvIGxvb2sgZm9yLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzQ2FsbEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcGF0aCkge1xuICBpZiAoIWV4cHJlc3Npb24ucHJvcGVydHkgfHwgIWV4cHJlc3Npb24ub2JqZWN0KSByZXR1cm47XG4gIGNvbnNvbGUuYXNzZXJ0KHBhdGgubGVuZ3RoID49IDIpO1xuXG4gIC8vIFVucmF2ZWwgYmFja3dhcmRzLCBtYWtlIHN1cmUgcHJvcGVydGllcyBtYXRjaCBlYWNoIHN0ZXAgb2YgdGhlIHdheS5cbiAgaWYgKGV4cHJlc3Npb24ucHJvcGVydHkubmFtZSAhPT0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdKSByZXR1cm4gZmFsc2U7XG4gIC8vIFdlJ3ZlIGdvdCBvdXJzZWx2ZXMgYSBmaW5hbCBtZW1iZXIgZXhwcmVzc2lvbi5cbiAgaWYgKHBhdGgubGVuZ3RoID09IDIgJiYgZXhwcmVzc2lvbi5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24ub2JqZWN0Lm5hbWUgPT09IHBhdGhbMF07XG4gIH1cbiAgLy8gTmVzdGVkIGV4cHJlc3Npb25zLlxuICBpZiAocGF0aC5sZW5ndGggPiAyICYmIGV4cHJlc3Npb24ub2JqZWN0LnR5cGUgPT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNDYWxsRXhwcmVzc2lvbihleHByZXNzaW9uLm9iamVjdCwgcGF0aC5zbGljZSgwLCBwYXRoLmxlbmd0aCAtIDEpKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IGtleSBUaGUgbm9kZSByZXByZXNlbnRpbmcgYW4gb2JqZWN0IGtleSBvciBleHByZXNzaW9uLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGF0IGtleS5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0S2V5VG9TdHJpbmcoa2V5KSB7XG4gIGlmIChrZXkudHlwZSA9PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4ga2V5Lm5hbWU7XG4gIH1cbiAgaWYgKGtleS50eXBlID09ICdMaXRlcmFsJykge1xuICAgIHJldHVybiBrZXkudmFsdWU7XG4gIH1cbiAgaWYgKGtleS50eXBlID09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgIHJldHVybiBvYmplY3RLZXlUb1N0cmluZyhrZXkub2JqZWN0KSArICcuJyArIG9iamVjdEtleVRvU3RyaW5nKGtleS5wcm9wZXJ0eSk7XG4gIH1cbn1cblxudmFyIENMT1NVUkVfQ09OU1RSVUNUT1JfTUFQID0ge1xuICAnQm9vbGVhbic6ICdib29sZWFuJyxcbiAgJ051bWJlcic6ICAnbnVtYmVyJyxcbiAgJ1N0cmluZyc6ICAnc3RyaW5nJyxcbn07XG5cbi8qKlxuICogQVNUIGV4cHJlc3Npb24gLT4gQ2xvc3VyZSB0eXBlLlxuICpcbiAqIEFjY2VwdHMgbGl0ZXJhbCB2YWx1ZXMsIGFuZCBuYXRpdmUgY29uc3RydWN0b3JzLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBBbiBFc3ByZWUgZXhwcmVzc2lvbiBub2RlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdHlwZSBvZiB0aGF0IGV4cHJlc3Npb24sIGluIENsb3N1cmUgdGVybXMuXG4gKi9cbmZ1bmN0aW9uIGNsb3N1cmVUeXBlKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZS5tYXRjaCgvRXhwcmVzc2lvbiQvKSkge1xuICAgIHJldHVybiBub2RlLnR5cGUuc3Vic3RyKDAsIG5vZGUudHlwZS5sZW5ndGggLSAxMCk7XG4gIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnTGl0ZXJhbCcpIHtcbiAgICByZXR1cm4gdHlwZW9mIG5vZGUudmFsdWU7XG4gIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4gQ0xPU1VSRV9DT05TVFJVQ1RPUl9NQVBbbm9kZS5uYW1lXSB8fCBub2RlLm5hbWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cge1xuICAgICAgbWVzc2FnZTogJ1Vua25vd24gQ2xvc3VyZSB0eXBlIGZvciBub2RlOiAnICsgbm9kZS50eXBlLFxuICAgICAgbG9jYXRpb246IG5vZGUubG9jLnN0YXJ0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldEF0dGFjaGVkQ29tbWVudChub2RlKSB7XG4gIHZhciBjb21tZW50cyA9IGdldExlYWRpbmdDb21tZW50cyhub2RlKSB8fCBnZXRMZWFkaW5nQ29tbWVudHMobm9kZS5rZXkpO1xuICBpZiAoIWNvbW1lbnRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBjb21tZW50c1tjb21tZW50cy5sZW5ndGggLSAxXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBjb21tZW50cyBmcm9tIGEgdHJlZSBkZWZpbmVkIHdpdGggQGV2ZW50LlxuICogQHBhcmFtICB7Tm9kZX0gbm9kZSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBnZXRFdmVudENvbW1lbnRzKG5vZGUpIHtcbiAgdmFyIGV2ZW50Q29tbWVudHMgPSBbXTtcbiAgZXN0cmF2ZXJzZS50cmF2ZXJzZShub2RlLCB7XG4gICAgZW50ZXI6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgY29tbWVudHMgPSAobm9kZS5sZWFkaW5nQ29tbWVudHMgfHwgW10pLmNvbmNhdChub2RlLnRyYWlsaW5nQ29tbWVudHMgfHwgW10pXG4gICAgICAgIC5tYXAoIGZ1bmN0aW9uKGNvbW1lbnRBU1QpIHtcbiAgICAgICAgICByZXR1cm4gY29tbWVudEFTVC52YWx1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlciggZnVuY3Rpb24oY29tbWVudCkge1xuICAgICAgICAgIHJldHVybiBjb21tZW50LmluZGV4T2YoXCJAZXZlbnRcIikgIT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgZXZlbnRDb21tZW50cyA9IGV2ZW50Q29tbWVudHMuY29uY2F0KGNvbW1lbnRzKTtcbiAgICB9XG4gIH0pO1xuICAvLyBkZWR1cFxuICByZXR1cm4gZXZlbnRDb21tZW50cy5maWx0ZXIoIGZ1bmN0aW9uKGVsLCBpbmRleCwgYXJyYXkpIHtcbiAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihlbCkgPT09IGluZGV4O1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEBwYXJhbVxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldExlYWRpbmdDb21tZW50cyhub2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY29tbWVudHMgPSBub2RlLmxlYWRpbmdDb21tZW50cztcbiAgaWYgKCFjb21tZW50cyB8fCBjb21tZW50cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgcmV0dXJuIGNvbW1lbnRzLm1hcChmdW5jdGlvbihjb21tZW50KSB7XG4gICAgcmV0dXJuIGNvbW1lbnQudmFsdWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgcGFyc2U1IFByb3BlcnR5IEFTVCBub2RlIGludG8gaXRzIEh5ZHJvbHlzaXMgcmVwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtQcm9wZXJ0eURlc2NyaXB0b3J9XG4gKi9cbmZ1bmN0aW9uIHRvUHJvcGVydHlEZXNjcmlwdG9yKG5vZGUpIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBuYW1lOiBvYmplY3RLZXlUb1N0cmluZyhub2RlLmtleSksXG4gICAgdHlwZTogY2xvc3VyZVR5cGUobm9kZS52YWx1ZSksXG4gICAgZGVzYzogZ2V0QXR0YWNoZWRDb21tZW50KG5vZGUpXG4gIH07XG5cbiAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0Z1bmN0aW9uRXhwcmVzc2lvbicpIHtcbiAgICByZXN1bHQucGFyYW1zID0gKG5vZGUudmFsdWUucGFyYW1zIHx8IFtdKS5tYXAoZnVuY3Rpb24ocGFyYW0pIHtcbiAgICAgIHJldHVybiB7bmFtZTogcGFyYW0ubmFtZX07XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2xvc3VyZVR5cGU6ICAgICAgICAgICBjbG9zdXJlVHlwZSxcbiAgZ2V0QXR0YWNoZWRDb21tZW50OiAgICBnZXRBdHRhY2hlZENvbW1lbnQsXG4gIGdldEV2ZW50Q29tbWVudHM6ICAgICAgZ2V0RXZlbnRDb21tZW50cyxcbiAgbWF0Y2hlc0NhbGxFeHByZXNzaW9uOiBtYXRjaGVzQ2FsbEV4cHJlc3Npb24sXG4gIG9iamVjdEtleVRvU3RyaW5nOiAgICAgb2JqZWN0S2V5VG9TdHJpbmcsXG4gIHRvUHJvcGVydHlEZXNjcmlwdG9yOiAgdG9Qcm9wZXJ0eURlc2NyaXB0b3IsXG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGVzdHJhdmVyc2UgPSByZXF1aXJlKCdlc3RyYXZlcnNlJyk7XG5cbnZhciBlc3V0aWwgPSByZXF1aXJlKCcuL2VzdXRpbCcpO1xuXG52YXIgbnVtRmVhdHVyZXMgPSAwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZlYXR1cmVGaW5kZXIoKSB7XG4gIC8qKiBAdHlwZSB7IUFycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn0gVGhlIGZlYXR1cmVzIHdlJ3ZlIGZvdW5kLiAqL1xuICB2YXIgZmVhdHVyZXMgPSBbXTtcblxuICB2YXIgdmlzaXRvcnMgPSB7XG5cbiAgICBlbnRlckNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBlbnRlckNhbGxFeHByZXNzaW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgaWYgKCFlc3V0aWwubWF0Y2hlc0NhbGxFeHByZXNzaW9uKG5vZGUuY2FsbGVlLCBbJ1BvbHltZXInLCAnQmFzZScsICdfYWRkRmVhdHVyZSddKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvKiogQHR5cGUgeyFGZWF0dXJlRGVzY3JpcHRvcn0gKi9cbiAgICAgIHZhciBmZWF0dXJlID0ge307XG4gICAgICB0aGlzLl9leHRyYWN0RGVzYyhmZWF0dXJlLCBub2RlLCBwYXJlbnQpO1xuICAgICAgdGhpcy5fZXh0cmFjdFByb3BlcnRpZXMoZmVhdHVyZSwgbm9kZSwgcGFyZW50KTtcblxuICAgICAgZmVhdHVyZXMucHVzaChmZWF0dXJlKTtcbiAgICB9LFxuXG4gICAgX2V4dHJhY3REZXNjOiBmdW5jdGlvbiBfZXh0cmFjdERlc2MoZmVhdHVyZSwgbm9kZSwgcGFyZW50KSB7XG4gICAgICBmZWF0dXJlLmRlc2MgPSBlc3V0aWwuZ2V0QXR0YWNoZWRDb21tZW50KHBhcmVudCk7XG4gICAgfSxcblxuICAgIF9leHRyYWN0UHJvcGVydGllczogZnVuY3Rpb24gX2V4dHJhY3RQcm9wZXJ0aWVzKGZlYXR1cmUsIG5vZGUsIHBhcmVudCkge1xuICAgICAgdmFyIGZlYXR1cmVOb2RlID0gbm9kZS5hcmd1bWVudHNbMF07XG4gICAgICBpZiAoZmVhdHVyZU5vZGUudHlwZSAhPT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUgdG8gYmUgYW4gb2JqZWN0LicsXG4gICAgICAgICAgICAnR290JywgZmVhdHVyZU5vZGUudHlwZSwgJ2luc3RlYWQuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghZmVhdHVyZU5vZGUucHJvcGVydGllcykgcmV0dXJuO1xuXG4gICAgICBmZWF0dXJlLnByb3BlcnRpZXMgPSBmZWF0dXJlTm9kZS5wcm9wZXJ0aWVzLm1hcChlc3V0aWwudG9Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuICAgIH0sXG5cbiAgfTtcblxuICByZXR1cm4ge3Zpc2l0b3JzOiB2aXNpdG9ycywgZmVhdHVyZXM6IGZlYXR1cmVzfTtcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZmluZEFsaWFzID0gZnVuY3Rpb24gZmluZEFsaWFzKG5hbWVzLCBhbGlhc2VzLCBuYW1lKSB7XG4gIGlmICghbmFtZXMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gYWxpYXNlc1tuYW1lcy5pbmRleE9mKG5hbWUpXTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZEFsaWFzO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGRvbTUgPSByZXF1aXJlKCdkb201Jyk7XG5cbnZhciBwID0gZG9tNS5wcmVkaWNhdGVzO1xuXG52YXIgaXNIdG1sSW1wb3J0Tm9kZSA9IHAuQU5EKFxuICBwLmhhc1RhZ05hbWUoJ2xpbmsnKSxcbiAgcC5oYXNBdHRyVmFsdWUoJ3JlbCcsICdpbXBvcnQnKSxcbiAgcC5OT1QoXG4gICAgcC5oYXNBdHRyVmFsdWUoJ3R5cGUnLCAnY3NzJylcbiAgKVxuKTtcblxudmFyIGlzU3R5bGVOb2RlID0gcC5PUihcbiAgLy8gaW5saW5lIHN0eWxlXG4gIHAuaGFzVGFnTmFtZSgnc3R5bGUnKSxcbiAgLy8gZXh0ZXJuYWwgc3R5bGVzaGVldFxuICBwLkFORChcbiAgICBwLmhhc1RhZ05hbWUoJ2xpbmsnKSxcbiAgICBwLmhhc0F0dHJWYWx1ZSgncmVsJywgJ3N0eWxlc2hlZXQnKVxuICApLFxuICAvLyBwb2x5bWVyIHNwZWNpZmljIGV4dGVybmFsIHN0eWxlc2hlZXRcbiAgcC5BTkQoXG4gICAgcC5oYXNUYWdOYW1lKCdsaW5rJyksXG4gICAgcC5oYXNBdHRyVmFsdWUoJ3JlbCcsICdpbXBvcnQnKSxcbiAgICBwLmhhc0F0dHJWYWx1ZSgndHlwZScsICdjc3MnKVxuICApXG4pO1xuXG5mdW5jdGlvbiBhZGROb2RlKG5vZGUsIHJlZ2lzdHJ5KSB7XG4gIGlmIChpc0h0bWxJbXBvcnROb2RlKG5vZGUpKSB7XG4gICAgcmVnaXN0cnkuaW1wb3J0LnB1c2gobm9kZSk7XG4gIH0gZWxzZSBpZiAoaXNTdHlsZU5vZGUobm9kZSkpIHtcbiAgICByZWdpc3RyeS5zdHlsZS5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKHJlZ2lzdHJ5Lmhhc093blByb3BlcnR5KG5vZGUudGFnTmFtZSkpIHtcbiAgICByZWdpc3RyeVtub2RlLnRhZ05hbWVdLnB1c2gobm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TGluZUFuZENvbHVtbihzdHJpbmcsIGNoYXJOdW1iZXIpIHtcbiAgaWYgKGNoYXJOdW1iZXIgPiBzdHJpbmcubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUT0RPKGFqbyk6IENhY2hpbmcgdGhlIGxpbmUgbGVuZ3RocyBvZiBlYWNoIGRvY3VtZW50IGNvdWxkIGJlIG11Y2ggZmFzdGVyLlxuICB2YXIgc2xpY2VkID0gc3RyaW5nLnNsaWNlKDAsY2hhck51bWJlcisxKTtcbiAgdmFyIHNwbGl0ID0gc2xpY2VkLnNwbGl0KCdcXG4nKTtcbiAgdmFyIGxpbmUgPSBzcGxpdC5sZW5ndGg7XG4gIHZhciBjb2x1bW4gPSBzcGxpdFtzcGxpdC5sZW5ndGggLSAxXS5sZW5ndGg7XG4gIHJldHVybiB7bGluZTogbGluZSwgY29sdW1uOiBjb2x1bW59O1xufVxuXG4vKipcbiogUGFyc2U1J3MgcmVwcmVzZW50YXRpb24gb2YgYSBwYXJzZWQgaHRtbCBkb2N1bWVudC5cbiogQHR5cGVkZWYge09iamVjdH0gRG9jdW1lbnRBU1RcbiovXG5cbi8qKlxuKiBUaGUgQVNUcyBvZiB0aGUgSFRNTCBlbGVtZW50cyBuZWVkZWQgdG8gcmVwcmVzZW50IFBvbHltZXIgZWxlbWVudHMuXG4qIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlZEltcG9ydFxuKiBAcHJvcGVydHkge0FycmF5PERvY3VtZW50QVNUPn0gdGVtcGxhdGUgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggb3V0ZXJtb3N0IHRlbXBsYXRlIHRhZy5cbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IHNjcmlwdCBUaGUgZW50cnkgcG9pbnRzIHRvIHRoZSBBU1QgYXQgZWFjaCBzY3JpcHQgdGFnIG5vdCBpbnNpZGUgYSB0ZW1wbGF0ZS5cbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IHN0eWxlIFRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIEFTVCBhdCBzdHlsZSB0YWcgb3V0c2lkZSBhIHRlbXBsYXRlLlxuKiBAcHJvcGVydHkge0FycmF5PERvY3VtZW50QVNUPn0gZG9tLW1vZHVsZSBUaGUgZW50cnkgcG9pbnRzIHRvIHRoZSBBU1QgYXQgZWFjaCBvdXRlcm1vc3QgZG9tLW1vZHVsZSBlbGVtZW50LlxuKiBAcHJvcGVydHkge0RvY3VtZW50QVNUfSBhc3QgVGhlIGZ1bGwgcGFyc2U1IGFzdCBmb3IgdGhlIGRvY3VtZW50LlxuKi9cblxuLyoqXG4qIFBhcnNlIGh0bWwgaW50byBBU1RzLlxuKiBAcGFyYW0ge3N0cmluZ30gaHRtbFN0cmluZyBBIHV0ZjgsIGh0bWw1IGRvY3VtZW50IGNvbnRhaW5pbmcgcG9seW1lciBlbGVtZW50IG9yIG1vZHVsZSBkZWZpbml0b25zLlxuKiBAcGFyYW0ge3N0cmluZ30gaHJlZiAgICAgICBUaGUgcGF0aCBvZiB0aGUgZG9jdW1lbnQuXG4qIEByZXR1cm4ge1BhcnNlZEltcG9ydH1cbiovXG52YXIgaW1wb3J0UGFyc2UgPSBmdW5jdGlvbiBpbXBvcnRQYXJzZShodG1sU3RyaW5nLCBocmVmKSB7XG4gIHZhciBkb2M7XG4gIHRyeSB7XG4gICAgZG9jID0gZG9tNS5wYXJzZShodG1sU3RyaW5nLCB7bG9jYXRpb25JbmZvOiB0cnVlfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBZGQgbGluZS9jb2x1bW4gaW5mb3JtYXRpb25cbiAgZG9tNS50cmVlTWFwKGRvYywgZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlLl9fbG9jYXRpb24gJiYgbm9kZS5fX2xvY2F0aW9uLnN0YXJ0ID49IDApIHtcbiAgICAgIG5vZGUuX19sb2NhdGlvbkRldGFpbCA9IGdldExpbmVBbmRDb2x1bW4oaHRtbFN0cmluZywgbm9kZS5fX2xvY2F0aW9uLnN0YXJ0KTtcbiAgICAgIGlmIChocmVmKSB7XG4gICAgICAgIG5vZGUuX19vd25lckRvY3VtZW50ID0gaHJlZjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHZhciByZWdpc3RyeSA9IHtcbiAgICAgIGJhc2U6IFtdLFxuICAgICAgdGVtcGxhdGU6IFtdLFxuICAgICAgc2NyaXB0OiBbXSxcbiAgICAgIHN0eWxlOiBbXSxcbiAgICAgIGltcG9ydDogW10sXG4gICAgICAnZG9tLW1vZHVsZSc6IFtdfTtcblxuICB2YXIgcXVldWUgPSBbXS5jb25jYXQoZG9jLmNoaWxkTm9kZXMpO1xuICB2YXIgbmV4dE5vZGU7XG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgbmV4dE5vZGUgPSBxdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChuZXh0Tm9kZSAmJiBuZXh0Tm9kZS50YWdOYW1lKSB7XG4gICAgICBxdWV1ZSA9IHF1ZXVlLmNvbmNhdChuZXh0Tm9kZS5jaGlsZE5vZGVzKTtcbiAgICAgIGFkZE5vZGUobmV4dE5vZGUsIHJlZ2lzdHJ5KTtcbiAgICB9XG4gIH1cbiAgcmVnaXN0cnkuYXN0ID0gZG9jO1xuICByZXR1cm4gcmVnaXN0cnk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGltcG9ydFBhcnNlO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vKipcbiogRmluZHMgYW5kIGFubm90YXRlcyB0aGUgUG9seW1lcigpIGFuZCBtb2R1bGF0ZSgpIGNhbGxzIGluIGphdmFzY3JpcHQuXG4qL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3ByZWUgPSByZXF1aXJlKCdlc3ByZWUnKTtcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZSgnZXN0cmF2ZXJzZScpO1xuXG52YXIgYmVoYXZpb3JGaW5kZXIgPSByZXF1aXJlKCcuL2JlaGF2aW9yLWZpbmRlcicpO1xudmFyIGVsZW1lbnRGaW5kZXIgID0gcmVxdWlyZSgnLi9lbGVtZW50LWZpbmRlcicpO1xudmFyIGZlYXR1cmVGaW5kZXIgID0gcmVxdWlyZSgnLi9mZWF0dXJlLWZpbmRlcicpO1xuXG5mdW5jdGlvbiB0cmF2ZXJzZSh2aXNpdG9yUmVnaXN0cmllcykge1xuICB2YXIgdmlzaXRvcjtcbiAgZnVuY3Rpb24gYXBwbHlWaXNpdG9ycyhuYW1lLCBub2RlLCBwYXJlbnQpIHtcbiAgICB2YXIgcmV0dXJuVmFsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaXRvclJlZ2lzdHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChuYW1lIGluIHZpc2l0b3JSZWdpc3RyaWVzW2ldKSB7XG4gICAgICAgIHJldHVyblZhbCA9IHZpc2l0b3JSZWdpc3RyaWVzW2ldW25hbWVdKG5vZGUsIHBhcmVudCk7XG4gICAgICAgIGlmIChyZXR1cm5WYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgZW50ZXI6IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmlzaXRvciA9ICdlbnRlcicgKyBub2RlLnR5cGU7XG4gICAgICByZXR1cm4gYXBwbHlWaXNpdG9ycyh2aXNpdG9yLCBub2RlLCBwYXJlbnQpO1xuICAgIH0sXG4gICAgbGVhdmU6IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmlzaXRvciA9ICdsZWF2ZScgKyBub2RlLnR5cGU7XG4gICAgICByZXR1cm4gYXBwbHlWaXNpdG9ycyh2aXNpdG9yLCBub2RlLCBwYXJlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIGpzUGFyc2UgPSBmdW5jdGlvbiBqc1BhcnNlKGpzU3RyaW5nKSB7XG4gIHZhciBzY3JpcHQgPSBlc3ByZWUucGFyc2UoanNTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthdHRhY2hDb21tZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogdHJ1ZX0pO1xuXG4gIHZhciBmZWF0dXJlSW5mbyA9IGZlYXR1cmVGaW5kZXIoKTtcbiAgdmFyIGJlaGF2aW9ySW5mbyA9IGJlaGF2aW9yRmluZGVyKCk7XG4gIHZhciBlbGVtZW50SW5mbyA9IGVsZW1lbnRGaW5kZXIoKTtcblxuICB2YXIgdmlzaXRvcnMgPSBbZmVhdHVyZUluZm8sIGJlaGF2aW9ySW5mbywgZWxlbWVudEluZm9dLm1hcChmdW5jdGlvbihpbmZvKSB7XG4gICAgcmV0dXJuIGluZm8udmlzaXRvcnM7XG4gIH0pO1xuICBlc3RyYXZlcnNlLnRyYXZlcnNlKHNjcmlwdCwgdHJhdmVyc2UodmlzaXRvcnMpKTtcblxuICByZXR1cm4ge1xuICAgIGJlaGF2aW9yczogYmVoYXZpb3JJbmZvLmJlaGF2aW9ycyxcbiAgICBlbGVtZW50czogIGVsZW1lbnRJbmZvLmVsZW1lbnRzLFxuICAgIGZlYXR1cmVzOiAgZmVhdHVyZUluZm8uZmVhdHVyZXMsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzUGFyc2U7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQW4gYW5ub3RhdGVkIEpTRG9jIGJsb2NrIHRhZywgYWxsIGZpZWxkcyBhcmUgb3B0aW9uYWxseSBwcm9jZXNzZWQgZXhjZXB0IGZvclxuICogdGhlIHRhZzpcbiAqXG4gKiAgICAgQFRBRyB7VFlQRX0gTkFNRSBERVNDXG4gKlxuICogYGxpbmVgIGFuZCBgY29sYCBpbmRpY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0ZXh0IHRoYXRcbiAqIHRoZSB0YWcgd2FzIGV4dHJhY3RlZCBmcm9tIC0gcmVsYXRpdmUgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgY29tbWVudFxuICogY29udGVudHMgKGUuZy4gdGhlIHZhbHVlIG9mIGBkZXNjYCBvbiBhIGRlc2NyaXB0b3Igbm9kZSkuIExpbmVzIGFyZVxuICogMS1pbmRleGVkLlxuICpcbiAqIEB0eXBlZGVmIHt7XG4gKiAgIHRhZzogICBzdHJpbmcsXG4gKiAgIHR5cGU6ID9zdHJpbmcsXG4gKiAgIG5hbWU6ID9zdHJpbmcsXG4gKiAgIGJvZHk6ID9zdHJpbmcsXG4gKiB9fVxuICovXG52YXIgSnNkb2NUYWc7XG5cbi8qKlxuICogVGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBvZiBhIEpTRG9jIGNvbW1lbnQuXG4gKlxuICogQHR5cGVkZWYge3tcbiAqICAgYm9keTogP3N0cmluZyxcbiAqICAgdGFnczogQXJyYXk8SnNkb2NUYWc+LFxuICogfX1cbiAqL1xudmFyIEpzZG9jQW5ub3RhdGlvbjtcblxudmFyIElTX1RBR19MSU5FICA9IC9eWyBcXHRdKkAvO1xudmFyIERPQ19TUExJVFRFUiA9IC8oPz1bIFxcdF0qXFwqP1sgXFx0XT9AKS87XG5cbi8qKlxuICogR2l2ZW4gYSBKU0RvYyBzdHJpbmcgKG1pbnVzIG9wZW5pbmcvY2xvc2luZyBjb21tZW50IGRlbGltaXRlcnMpLCBleHRyYWN0IGl0c1xuICogYm9keSBhbmQgdGFncy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG9jc1xuICogQHJldHVybiB7P0pzZG9jQW5ub3RhdGlvbn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VKc2RvYyhkb2NzKSB7XG4gIHZhciBib2R5ID0gbnVsbDtcbiAgdmFyIHRhZ3MgPSBbXTtcblxuICAvLyBXZSBidWlsZCB1cCBjb250ZW50IChtaW51cyBsaW5lIHByZWZpeGVzKSwgYW5kIGRpc3BhdGNoIHRoYXQgY29udGVudFxuICAvLyBhcHByb3ByaWF0ZWx5IChhcyBib2R5IG9yIHRhZ3MpLlxuICBmdW5jdGlvbiBmbHVzaENvbnRlbnQoY29udGVudCkge1xuICAgIGlmIChjb250ZW50ID09PSAnJykgcmV0dXJuO1xuICAgIGlmIChib2R5ID09PSBudWxsICYmICFJU19UQUdfTElORS50ZXN0KGNvbnRlbnQpKSB7XG4gICAgICBib2R5ID0gY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFncyA9IHRhZ3MuY29uY2F0KHBhcnNlVGFnKGNvbnRlbnQpKTtcbiAgICB9XG4gIH1cblxuICAvLyBXZSBzcGxpdCB0aGUgSlNEb2Mgc3RyaW5nIGludG8gdGhlIGJvZHkgdGV4dCBhbmQgZWFjaCBibG9jayB0YWcgc2VjdGlvbi5cbiAgdmFyIGJ1ZmZlciA9ICcnO1xuICBkb2NzLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgbGluZSA9IF9zdHJpcFByZWZpeChsaW5lKTtcbiAgICAvLyBIaXQgYSBibG9jayB0YWc7IGZsdXNoIHRoZSBwcmV2aW91cyBidWZmZXIuXG4gICAgaWYgKElTX1RBR19MSU5FLnRlc3QobGluZSkpIHtcbiAgICAgIGZsdXNoQ29udGVudChidWZmZXIpO1xuICAgICAgYnVmZmVyID0gJyc7XG4gICAgfVxuICAgIGJ1ZmZlciA9IGJ1ZmZlciArIChidWZmZXIgJiYgJ1xcbicgfHwgJycpICsgbGluZTtcbiAgfSk7XG4gIGZsdXNoQ29udGVudChidWZmZXIpO1xuXG4gIGJvZHkgPSB1bmluZGVudChib2R5KTtcbiAgcmV0dXJuIHtcbiAgICBib2R5OiBib2R5ID09PSAnJyA/IG51bGwgOiBib2R5LFxuICAgIHRhZ3M6IHRhZ3MsXG4gIH07XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhIGxlYWRpbmcgYCpgIGNoYXJhY3RlciwgYW5kIHdoaXRlc3BhY2UgYmVmb3JlIGl0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIF9zdHJpcFByZWZpeChsaW5lKSB7XG4gIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL15bIFxcdF0qXFwqKC4qKSQvKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIGxpbmU7XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxudmFyIFNQTElUX0JMT0NLX1RBR1MgID0gL15bIFxcdF0qKEBcXFMrKD86W1xcc1xcbl0rQFxcUyspKikrKFtcXHNcXFNdKikkL207XG4vLyBOb3RlIHRoYXQgdGhlIGNvbnRlbnQgKG1hdGNoWzJdIGFib3ZlKSB3aWxsIGFsd2F5cyBoYXZlIGxlYWRpbmcgd2hpdGVzcGFjZSxcbi8vIG9yIGJlIGFuIGVtcHR5IHN0cmluZy5cbi8vXG4vLyBUT0RPKG5ldmlyKTogRG8gYSByZWFsIHBhcnNlciBzbyB0aGF0IHRoaXMgcHJvcGVybHkgaGFuZGxlcyBtYXRjaGluZyBicmFjZXMsXG4vLyByYXRoZXIgdGhhbiBqdXN0IHJlbHlpbmcgb24gZ3JlZWR5IG1hdGNoaW5nLlxudmFyIEJMT0NLX1RBR19DT05URU5UID0gL14oPzpbXFxzXFxuXStcXHsoLiopXFx9KT8oPzpbXFxzXFxuXSsoXFxTKykpPyg/OltcXHNcXG5dKyhbXFxzXFxTXSopKT8kL207XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBPcmlnaW5hbCB0ZXh0IGZvciB0aGUgYmxvY2sgdGFnKHMpLlxuICogQHJldHVybiB7QXJyYXk8SnNkb2NUYWc+fSBUaGUgcGFyc2VkIHRhZyhzKS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VUYWcoc291cmNlKSB7XG4gIHZhciBzcGxpdCAgID0gc291cmNlLm1hdGNoKFNQTElUX0JMT0NLX1RBR1MpO1xuICB2YXIgdGFncyAgICA9IHNwbGl0WzFdLnNwbGl0KC9bXFxzXFxuXSsvbSkubWFwKGZ1bmN0aW9uKHQpIHsgcmV0dXJuIHQuc3Vic3RyKDEpOyB9KTtcbiAgdmFyIGNvbnRlbnQgPSBzcGxpdFsyXTtcblxuICAvLyBOb3RlIHRoYXQgdGhlIGNvbnRlbnRcbiAgdmFyIG1hdGNoID0gY29udGVudC5tYXRjaChCTE9DS19UQUdfQ09OVEVOVCk7XG4gIHJldHVybiB0YWdzLm1hcChmdW5jdGlvbih0YWcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFnOiAgdGFnLFxuICAgICAgdHlwZTogbWF0Y2hbMV0gfHwgbnVsbCxcbiAgICAgIG5hbWU6IG1hdGNoWzJdIHx8IG51bGwsXG4gICAgICBib2R5OiBtYXRjaFszXSB8fCBudWxsLFxuICAgIH07XG4gIH0pO1xufVxuXG4vLyBVdGlsaXR5XG5cbi8qKlxuICogQHBhcmFtIHtKc2RvY0Fubm90YXRpb259IGpzZG9jXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzVGFnKGpzZG9jLCB0YWdOYW1lKSB7XG4gIGlmICghanNkb2MgfHwgIWpzZG9jLnRhZ3MpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGpzZG9jLnRhZ3Muc29tZShmdW5jdGlvbih0YWcpIHsgcmV0dXJuIHRhZy50YWcgPT09IHRhZ05hbWU7IH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCBKU0RvYyB0YWcgbWF0Y2hpbmcgYG5hbWVgIGFuZCByZXR1cm5zIGl0cyB2YWx1ZSBhdCBga2V5YC5cbiAqXG4gKiBAcGFyYW0ge0pzZG9jQW5ub3RhdGlvbn0ganNkb2NcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZz19IGtleSBJZiBvbWl0dGVkLCB0aGUgZW50aXJlIHRhZyBvYmplY3QgaXMgcmV0dXJuZWQuXG4gKiBAcmV0dXJuIHs/c3RyaW5nfE9iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0VGFnKGpzZG9jLCB0YWdOYW1lLCBrZXkpIHtcbiAgaWYgKCFqc2RvYyB8fCAhanNkb2MudGFncykgcmV0dXJuIGZhbHNlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGpzZG9jLnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdGFnID0ganNkb2MudGFnc1tpXTtcbiAgICBpZiAodGFnLnRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgcmV0dXJuIGtleSA/IHRhZ1trZXldIDogdGFnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0gez9zdHJpbmd9IHRleHRcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHVuaW5kZW50KHRleHQpIHtcbiAgaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcbiAgdmFyIGxpbmVzICA9IHRleHQucmVwbGFjZSgvXFx0L2csICcgICcpLnNwbGl0KCdcXG4nKTtcbiAgdmFyIGluZGVudCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbihwcmV2LCBsaW5lKSB7XG4gICAgaWYgKC9eXFxzKiQvLnRlc3QobGluZSkpIHJldHVybiBwcmV2OyAgLy8gQ29tcGxldGVseSBpZ25vcmUgYmxhbmsgbGluZXMuXG5cbiAgICB2YXIgbGluZUluZGVudCA9IGxpbmUubWF0Y2goL14oXFxzKikvKVswXS5sZW5ndGg7XG4gICAgaWYgKHByZXYgPT09IG51bGwpIHJldHVybiBsaW5lSW5kZW50O1xuICAgIHJldHVybiBsaW5lSW5kZW50IDwgcHJldiA/IGxpbmVJbmRlbnQgOiBwcmV2O1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gbGluZXMubWFwKGZ1bmN0aW9uKGwpIHsgcmV0dXJuIGwuc3Vic3RyKGluZGVudCk7IH0pLmpvaW4oJ1xcbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0VGFnOiAgICAgZ2V0VGFnLFxuICBoYXNUYWc6ICAgICBoYXNUYWcsXG4gIHBhcnNlSnNkb2M6IHBhcnNlSnNkb2MsXG4gIHBhcnNlVGFnOiAgIHBhcnNlVGFnLFxuICB1bmluZGVudDogICB1bmluZGVudCxcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBqc2hpbnQgLVcwNzlcbi8vIFByb21pc2UgcG9seWZpbGxcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2UgfHwgcmVxdWlyZSgnZXM2LXByb21pc2UnKS5Qcm9taXNlO1xuLy8ganNoaW50ICtXMDc5XG5cbmZ1bmN0aW9uIERlZmVycmVkKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHNlbGYucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgc2VsZi5yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGtub3dzIGhvdyB0byByZXNvbHZlIHJlc291cmNlcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlc29sdmVyXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcsIERlZmVycmVkKTogYm9vbGVhbn0gYWNjZXB0IEF0dGVtcHQgdG8gcmVzb2x2ZVxuICogICAgIGBkZWZlcnJlZGAgd2l0aCB0aGUgY29udGVudHMgdGhlIHNwZWNpZmllZCBVUkwuIFJldHVybnMgZmFsc2UgaWYgdGhlXG4gKiAgICAgUmVzb2x2ZXIgaXMgdW5hYmxlIHRvIHJlc29sdmUgdGhlIFVSTC5cbiAqL1xuXG5cbi8qKlxuICogQSBGaWxlTG9hZGVyIGxldHMgeW91IHJlc29sdmUgVVJMcyB3aXRoIGEgc2V0IG9mIHBvdGVudGlhbCByZXNvbHZlcnMuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cbmZ1bmN0aW9uIEZpbGVMb2FkZXIoKSB7XG4gIHRoaXMucmVzb2x2ZXJzID0gW107XG4gIC8vIG1hcCB1cmwgLT4gRGVmZXJyZWRcbiAgdGhpcy5yZXF1ZXN0cyA9IHt9O1xufVxuRmlsZUxvYWRlci5wcm90b3R5cGUgPSB7XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpbnN0YW5jZSBvZiBhIFJlc29sdmVyIGNsYXNzIHRvIHRoZSBsaXN0IG9mIHVybCByZXNvbHZlcnNcbiAgICpcbiAgICogT3JkZXJpbmcgb2YgcmVzb2x2ZXJzIGlzIG1vc3QgdG8gbGVhc3QgcmVjZW50bHkgYWRkZWRcbiAgICogVGhlIGZpcnN0IHJlc29sdmVyIHRvIFwiYWNjZXB0XCIgdGhlIHVybCB3aW5zLlxuICAgKiBAcGFyYW0ge1Jlc29sdmVyfSByZXNvbHZlciBUaGUgcmVzb2x2ZXIgdG8gYWRkLlxuICAgKi9cbiAgYWRkUmVzb2x2ZXI6IGZ1bmN0aW9uKHJlc29sdmVyKSB7XG4gICAgdGhpcy5yZXNvbHZlcnMucHVzaChyZXNvbHZlcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHByb21pc2UgZm9yIGFuIGFic29sdXRlIHVybFxuICAgKlxuICAgKiBVcmwgcmVxdWVzdHMgYXJlIGRlZHVwbGljYXRlZCBieSB0aGUgbG9hZGVyLCByZXR1cm5pbmcgdGhlIHNhbWUgUHJvbWlzZSBmb3JcbiAgICogaWRlbnRpY2FsIHVybHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAgICAgICAgVGhlIGFic29sdXRlIHVybCB0byByZXF1ZXN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlLjxzdHJpbmc+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGVudHMgb2YgdGhlIFVSTC5cbiAgICovXG4gIHJlcXVlc3Q6IGZ1bmN0aW9uKHVyaSkge1xuICAgIHZhciBwcm9taXNlO1xuXG4gICAgaWYgKCEodXJpIGluIHRoaXMucmVxdWVzdHMpKSB7XG4gICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgdmFyIGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgICB0aGlzLnJlcXVlc3RzW3VyaV0gPSBkZWZlcnJlZDtcblxuICAgICAgLy8gbG9vcCBiYWNrd2FyZHMgdGhyb3VnaCByZXNvbHZlcnMgdW50aWwgb25lIFwiYWNjZXB0c1wiIHRoZSByZXF1ZXN0XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5yZXNvbHZlcnMubGVuZ3RoIC0gMSwgcjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgciA9IHRoaXMucmVzb2x2ZXJzW2ldO1xuICAgICAgICBpZiAoci5hY2NlcHQodXJpLCBkZWZlcnJlZCkpIHtcbiAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgICAgZGVmZXJyZWQucmVqZWN0KCdubyByZXNvbHZlciBmb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZSA9IHRoaXMucmVxdWVzdHNbdXJpXS5wcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZpbGVMb2FkZXI7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbmZ1bmN0aW9uIGdldEZpbGUoZmlsZXBhdGgsIGRlZmVycmVkKSB7XG4gIGZzLnJlYWRGaWxlKGZpbGVwYXRoLCAndXRmLTgnLCBmdW5jdGlvbihlcnIsIGNvbnRlbnQpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBkZWZlcnJlZC5yZWplY3QoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmZXJyZWQucmVzb2x2ZShjb250ZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBgcGF0aGFgIGlzIGEgc2libGluZyBvciBhdW50IG9mIGBwYXRoYmAuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NpYmxpbmdPckF1bnQocGF0aGEsIHBhdGhiKSB7XG4gIHZhciBwYXJlbnQgPSBwYXRoLmRpcm5hbWUocGF0aGEpO1xuICBpZiAocGF0aGIuaW5kZXhPZihwYXRoYSkgPT09IC0xICYmIHBhdGhiLmluZGV4T2YocGFyZW50KSA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGFuZ2UgYGxvY2FsUGF0aGAgZnJvbSBhIHNpYmxpbmcgb2YgYGJhc2VQYXRoYCB0byBiZSBhIGNoaWxkIG9mXG4gKiBgYmFzZVBhdGhgIGpvaW5lZCB3aXRoIGByZWRpcmVjdGAuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHJlZGlyZWN0U2libGluZyhiYXNlUGF0aCwgbG9jYWxQYXRoLCByZWRpcmVjdCkge1xuICB2YXIgcGFyZW50ID0gcGF0aC5kaXJuYW1lKGJhc2VQYXRoKTtcbiAgdmFyIHJlZGlyZWN0ZWQgPSBwYXRoLmpvaW4oYmFzZVBhdGgsIHJlZGlyZWN0LCBsb2NhbFBhdGguc2xpY2UocGFyZW50Lmxlbmd0aCkpO1xuICByZXR1cm4gcmVkaXJlY3RlZDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyByZXF1ZXN0cyB2aWEgdGhlIGZpbGUgc3lzdGVtLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5ob3N0IEhvc3RuYW1lIHRvIG1hdGNoIGZvciBhYnNvbHV0ZSB1cmxzLlxuICogICAgIE1hdGNoZXMgXCIvXCIgYnkgZGVmYXVsdFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5iYXNlUGF0aCBQcmVmaXggZGlyZWN0b3J5IGZvciBjb21wb25lbnRzIGluIHVybC5cbiAqICAgICBEZWZhdWx0cyB0byBcIi9cIi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucm9vdCBGaWxlc3lzdGVtIHJvb3QgdG8gc2VhcmNoLiBEZWZhdWx0cyB0byB0aGVcbiAqICAgICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5yZWRpcmVjdCBXaGVyZSB0byByZWRpcmVjdCBsb29rdXBzIHRvIHNpYmxpbmdzLlxuICovXG5mdW5jdGlvbiBGU1Jlc29sdmVyKGNvbmZpZykge1xuICB0aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbn1cbkZTUmVzb2x2ZXIucHJvdG90eXBlID0ge1xuICBhY2NlcHQ6IGZ1bmN0aW9uKHVyaSwgZGVmZXJyZWQpIHtcbiAgICB2YXIgcGFyc2VkID0gdXJsLnBhcnNlKHVyaSk7XG4gICAgdmFyIGhvc3QgPSB0aGlzLmNvbmZpZy5ob3N0O1xuICAgIHZhciBiYXNlID0gdGhpcy5jb25maWcuYmFzZVBhdGg7XG4gICAgdmFyIHJvb3QgPSB0aGlzLmNvbmZpZy5yb290ICYmIHBhdGgubm9ybWFsaXplKHRoaXMuY29uZmlnLnJvb3QpO1xuICAgIHZhciByZWRpcmVjdCA9IHRoaXMuY29uZmlnLnJlZGlyZWN0O1xuXG4gICAgdmFyIGxvY2FsO1xuXG4gICAgaWYgKCFwYXJzZWQuaG9zdG5hbWUgfHwgcGFyc2VkLmhvc3RuYW1lID09PSBob3N0KSB7XG4gICAgICBsb2NhbCA9IHBhcnNlZC5wYXRobmFtZTtcbiAgICB9XG5cbiAgICBpZiAobG9jYWwpIHtcbiAgICAgIGlmIChiYXNlKSB7XG4gICAgICAgIGxvY2FsID0gcGF0aC5yZWxhdGl2ZShiYXNlLCBsb2NhbCk7XG4gICAgICB9XG4gICAgICBpZiAocm9vdCkge1xuICAgICAgICBsb2NhbCA9IHBhdGguam9pbihyb290LCBsb2NhbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWRpcmVjdCAmJiBpc1NpYmxpbmdPckF1bnQocm9vdCwgbG9jYWwpKSB7XG4gICAgICAgIGxvY2FsID0gcmVkaXJlY3RTaWJsaW5nKHJvb3QsIGxvY2FsLCByZWRpcmVjdCk7XG4gICAgICB9XG5cbiAgICAgIGdldEZpbGUobG9jYWwsIGRlZmVycmVkKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGU1Jlc29sdmVyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIGpzaGludCBub2RlOnRydWVcbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIHJlc29sdmVyIHRoYXQgcmVzb2x2ZXMgdG8gbnVsbCBhbnkgdXJpIG1hdGNoaW5nIGNvbmZpZy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcgVGhlIHVybCB0byBgYWNjZXB0YC5cbiAqL1xuZnVuY3Rpb24gTm9vcFJlc29sdmVyKGNvbmZpZykge1xuICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbn1cblxuTm9vcFJlc29sdmVyLnByb3RvdHlwZSA9IHtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgIHVyaSAgICAgIFRoZSBhYnNvbHV0ZSBVUkkgYmVpbmcgcmVxdWVzdGVkLlxuICAgKiBAcGFyYW0geyFEZWZlcnJlZH0gZGVmZXJyZWQgVGhlIGRlZmVycmVkIHByb21pc2UgdGhhdCBzaG91bGQgYmUgcmVzb2x2ZWQgaWZcbiAgICogICAgIHRoaXMgcmVzb2x2ZXIgaGFuZGxlcyB0aGUgVVJJLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBVUkkgaXMgaGFuZGxlZCBieSB0aGlzIHJlc29sdmVyLlxuICAgKi9cbiAgYWNjZXB0OiBmdW5jdGlvbih1cmksIGRlZmVycmVkKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy50ZXN0KSB7XG4gICAgICBpZiAodXJpLnNlYXJjaCh0aGlzLmNvbmZpZykgPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY29uZmlnLnRlc3QodXJpKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZGVmZXJyZWQucmVzb2x2ZSgnJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTm9vcFJlc29sdmVyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIGpzaGludCBub2RlOnRydWVcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gZ2V0RmlsZSh1cmwsIGRlZmVycmVkLCBjb25maWcpIHtcbiAgLyogZ2xvYmFsIFhNTEh0dHBSZXF1ZXN0OmZhbHNlICovXG4gIHZhciB4ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gIHgub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YXR1cyA9IHguc3RhdHVzIHx8IDA7XG4gICAgaWYgKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKSB7XG4gICAgICBkZWZlcnJlZC5yZXNvbHZlKHgucmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWZlcnJlZC5yZWplY3QoJ3hociBzdGF0dXM6ICcgKyBzdGF0dXMpO1xuICAgIH1cbiAgfTtcbiAgeC5vbmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIGRlZmVycmVkLnJlamVjdChlKTtcbiAgfTtcbiAgeC5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuICBpZiAoY29uZmlnICYmIGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICB4LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gIH1cbiAgeC5zZW5kKCk7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IGEgcmVzb2x2ZXIgdGhhdCByZXF1ZXN0cyByZXNvdXJjZXMgb3ZlciBYSFIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucmVzcG9uc2VUeXBlIFR5cGUgb2Ygb2JqZWN0IHRvIGJlIHJldHVybmVkIGJ5IHRoZVxuICogICAgIFhIUi4gRGVmYXVsdHMgdG8gJ3RleHQnLCBhY2NlcHRzICdkb2N1bWVudCcsICdhcnJheWJ1ZmZlcicsIGFuZCAnanNvbicuXG4gKi9cbmZ1bmN0aW9uIFhIUlJlc29sdmVyKGNvbmZpZykge1xuICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbn1cblhIUlJlc29sdmVyLnByb3RvdHlwZSA9IHtcbiAgYWNjZXB0OiBmdW5jdGlvbih1cmksIGRlZmVycmVkKSB7XG4gICAgZ2V0RmlsZSh1cmksIGRlZmVycmVkLCB0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gWEhSUmVzb2x2ZXI7XG4iLG51bGwsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuICAgIHZhciBjdXJyZW50UXVldWU7XG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtpXSgpO1xuICAgICAgICB9XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbn1cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgcXVldWUucHVzaChmdW4pO1xuICAgIGlmICghZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxuLy8gVE9ETyhzaHR5bG1hbilcbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwOi8vbXRocy5iZS9wdW55Y29kZSB2MS4yLjQgYnkgQG1hdGhpYXMgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgKi9cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBwdW55Y29kZWAgb2JqZWN0LlxuXHQgKiBAbmFtZSBwdW55Y29kZVxuXHQgKiBAdHlwZSBPYmplY3Rcblx0ICovXG5cdHZhciBwdW55Y29kZSxcblxuXHQvKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXG5cdG1heEludCA9IDIxNDc0ODM2NDcsIC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcblxuXHQvKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG5cdGJhc2UgPSAzNixcblx0dE1pbiA9IDEsXG5cdHRNYXggPSAyNixcblx0c2tldyA9IDM4LFxuXHRkYW1wID0gNzAwLFxuXHRpbml0aWFsQmlhcyA9IDcyLFxuXHRpbml0aWFsTiA9IDEyOCwgLy8gMHg4MFxuXHRkZWxpbWl0ZXIgPSAnLScsIC8vICdcXHgyRCdcblxuXHQvKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xuXHRyZWdleFB1bnljb2RlID0gL154bi0tLyxcblx0cmVnZXhOb25BU0NJSSA9IC9bXiAtfl0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvXFx4MkV8XFx1MzAwMnxcXHVGRjBFfFxcdUZGNjEvZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0d2hpbGUgKGxlbmd0aC0tKSB7XG5cdFx0XHRhcnJheVtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3MuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0cmV0dXJuIG1hcChzdHJpbmcuc3BsaXQocmVnZXhTZXBhcmF0b3JzKSwgZm4pLmpvaW4oJy4nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGRlY29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSBVbmljb2RlIGlucHV0IHN0cmluZyAoVUNTLTIpLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZykge1xuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgY291bnRlciA9IDAsXG5cdFx0ICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG5cdFx0ICAgIHZhbHVlLFxuXHRcdCAgICBleHRyYTtcblx0XHR3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0dmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdFx0aWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0XHQvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcblx0XHRcdFx0ZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdFx0XHRpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHsgLy8gbG93IHN1cnJvZ2F0ZVxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKCgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlIG5leHRcblx0XHRcdFx0XHQvLyBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXJcblx0XHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAc2VlIGBwdW55Y29kZS51Y3MyLmRlY29kZWBcblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZW5jb2RlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGNvZGVQb2ludHMgVGhlIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBuZXcgVW5pY29kZSBzdHJpbmcgKFVDUy0yKS5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcblx0XHRyZXR1cm4gbWFwKGFycmF5LCBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdFx0aWYgKHZhbHVlID4gMHhGRkZGKSB7XG5cdFx0XHRcdHZhbHVlIC09IDB4MTAwMDA7XG5cdFx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApO1xuXHRcdFx0XHR2YWx1ZSA9IDB4REMwMCB8IHZhbHVlICYgMHgzRkY7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlKTtcblx0XHRcdHJldHVybiBvdXRwdXQ7XG5cdFx0fSkuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBiYXNpYyBjb2RlIHBvaW50IGludG8gYSBkaWdpdC9pbnRlZ2VyLlxuXHQgKiBAc2VlIGBkaWdpdFRvQmFzaWMoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVQb2ludCBUaGUgYmFzaWMgbnVtZXJpYyBjb2RlIHBvaW50IHZhbHVlLlxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQgKGZvciB1c2UgaW5cblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpbiB0aGUgcmFuZ2UgYDBgIHRvIGBiYXNlIC0gMWAsIG9yIGBiYXNlYCBpZlxuXHQgKiB0aGUgY29kZSBwb2ludCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS5cblx0ICovXG5cdGZ1bmN0aW9uIGJhc2ljVG9EaWdpdChjb2RlUG9pbnQpIHtcblx0XHRpZiAoY29kZVBvaW50IC0gNDggPCAxMCkge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDIyO1xuXHRcdH1cblx0XHRpZiAoY29kZVBvaW50IC0gNjUgPCAyNikge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDY1O1xuXHRcdH1cblx0XHRpZiAoY29kZVBvaW50IC0gOTcgPCAyNikge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDk3O1xuXHRcdH1cblx0XHRyZXR1cm4gYmFzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEBzZWUgYGJhc2ljVG9EaWdpdCgpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gZGlnaXQgVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYmFzaWMgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSAod2hlbiB1c2VkIGZvclxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGlzIGBkaWdpdGAsIHdoaWNoIG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZVxuXHQgKiBgMGAgdG8gYGJhc2UgLSAxYC4gSWYgYGZsYWdgIGlzIG5vbi16ZXJvLCB0aGUgdXBwZXJjYXNlIGZvcm0gaXNcblx0ICogdXNlZDsgZWxzZSwgdGhlIGxvd2VyY2FzZSBmb3JtIGlzIHVzZWQuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWRcblx0ICogaWYgYGZsYWdgIGlzIG5vbi16ZXJvIGFuZCBgZGlnaXRgIGhhcyBubyB1cHBlcmNhc2UgZm9ybS5cblx0ICovXG5cdGZ1bmN0aW9uIGRpZ2l0VG9CYXNpYyhkaWdpdCwgZmxhZykge1xuXHRcdC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG5cdFx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdFx0cmV0dXJuIGRpZ2l0ICsgMjIgKyA3NSAqIChkaWdpdCA8IDI2KSAtICgoZmxhZyAhPSAwKSA8PCA1KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuXHQgKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyB0byBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5XG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSB0byBVbmljb2RlLiBPbmx5IHRoZVxuXHQgKiBQdW55Y29kZWQgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLCBpLmUuIGl0IGRvZXNuJ3Rcblx0ICogbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQgdG9cblx0ICogVW5pY29kZS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIFB1bnljb2RlIGRvbWFpbiBuYW1lIHRvIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShkb21haW4pIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGRvbWFpbiwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgdG8gUHVueWNvZGUuIE9ubHkgdGhlXG5cdCAqIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS4gaXQgZG9lc24ndFxuXHQgKiBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpbiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIHRvIGNvbnZlcnQsIGFzIGEgVW5pY29kZSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGRvbWFpbikge1xuXHRcdHJldHVybiBtYXBEb21haW4oZG9tYWluLCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuXHRwdW55Y29kZSA9IHtcblx0XHQvKipcblx0XHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0J3ZlcnNpb24nOiAnMS4yLjQnLFxuXHRcdC8qKlxuXHRcdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdFx0ICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cblx0XHQgKiBAc2VlIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xuXHRcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBwdW55Y29kZTtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QucHVueWNvZGUgPSBwdW55Y29kZTtcblx0fVxuXG59KHRoaXMpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8vIElmIG9iai5oYXNPd25Qcm9wZXJ0eSBoYXMgYmVlbiBvdmVycmlkZGVuLCB0aGVuIGNhbGxpbmdcbi8vIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSB3aWxsIGJyZWFrLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzE3MDdcbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocXMsIHNlcCwgZXEsIG9wdGlvbnMpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIHZhciBvYmogPSB7fTtcblxuICBpZiAodHlwZW9mIHFzICE9PSAnc3RyaW5nJyB8fCBxcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IC9cXCsvZztcbiAgcXMgPSBxcy5zcGxpdChzZXApO1xuXG4gIHZhciBtYXhLZXlzID0gMTAwMDtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4S2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICBtYXhLZXlzID0gb3B0aW9ucy5tYXhLZXlzO1xuICB9XG5cbiAgdmFyIGxlbiA9IHFzLmxlbmd0aDtcbiAgLy8gbWF4S2V5cyA8PSAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5vdCBsaW1pdCBrZXlzIGNvdW50XG4gIGlmIChtYXhLZXlzID4gMCAmJiBsZW4gPiBtYXhLZXlzKSB7XG4gICAgbGVuID0gbWF4S2V5cztcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgeCA9IHFzW2ldLnJlcGxhY2UocmVnZXhwLCAnJTIwJyksXG4gICAgICAgIGlkeCA9IHguaW5kZXhPZihlcSksXG4gICAgICAgIGtzdHIsIHZzdHIsIGssIHY7XG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGtzdHIgPSB4LnN1YnN0cigwLCBpZHgpO1xuICAgICAgdnN0ciA9IHguc3Vic3RyKGlkeCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrc3RyID0geDtcbiAgICAgIHZzdHIgPSAnJztcbiAgICB9XG5cbiAgICBrID0gZGVjb2RlVVJJQ29tcG9uZW50KGtzdHIpO1xuICAgIHYgPSBkZWNvZGVVUklDb21wb25lbnQodnN0cik7XG5cbiAgICBpZiAoIWhhc093blByb3BlcnR5KG9iaiwgaykpIHtcbiAgICAgIG9ialtrXSA9IHY7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXS5wdXNoKHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBbb2JqW2tdLCB2XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5UHJpbWl0aXZlID0gZnVuY3Rpb24odikge1xuICBzd2l0Y2ggKHR5cGVvZiB2KSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB2O1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gdiA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6ICcnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNlcCwgZXEsIG5hbWUpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICBvYmogPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbWFwKG9iamVjdEtleXMob2JqKSwgZnVuY3Rpb24oaykge1xuICAgICAgdmFyIGtzID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShrKSkgKyBlcTtcbiAgICAgIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgICAgcmV0dXJuIG1hcChvYmpba10sIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKHYpKTtcbiAgICAgICAgfSkuam9pbihzZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmpba10pKTtcbiAgICAgIH1cbiAgICB9KS5qb2luKHNlcCk7XG5cbiAgfVxuXG4gIGlmICghbmFtZSkgcmV0dXJuICcnO1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShuYW1lKSkgKyBlcSArXG4gICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9iaikpO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbmZ1bmN0aW9uIG1hcCAoeHMsIGYpIHtcbiAgaWYgKHhzLm1hcCkgcmV0dXJuIHhzLm1hcChmKTtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzLnB1c2goZih4c1tpXSwgaSkpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmVzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5kZWNvZGUgPSBleHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9kZWNvZGUnKTtcbmV4cG9ydHMuZW5jb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2VuY29kZScpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoJ3B1bnljb2RlJyk7XG5cbmV4cG9ydHMucGFyc2UgPSB1cmxQYXJzZTtcbmV4cG9ydHMucmVzb2x2ZSA9IHVybFJlc29sdmU7XG5leHBvcnRzLnJlc29sdmVPYmplY3QgPSB1cmxSZXNvbHZlT2JqZWN0O1xuZXhwb3J0cy5mb3JtYXQgPSB1cmxGb3JtYXQ7XG5cbmV4cG9ydHMuVXJsID0gVXJsO1xuXG5mdW5jdGlvbiBVcmwoKSB7XG4gIHRoaXMucHJvdG9jb2wgPSBudWxsO1xuICB0aGlzLnNsYXNoZXMgPSBudWxsO1xuICB0aGlzLmF1dGggPSBudWxsO1xuICB0aGlzLmhvc3QgPSBudWxsO1xuICB0aGlzLnBvcnQgPSBudWxsO1xuICB0aGlzLmhvc3RuYW1lID0gbnVsbDtcbiAgdGhpcy5oYXNoID0gbnVsbDtcbiAgdGhpcy5zZWFyY2ggPSBudWxsO1xuICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgdGhpcy5wYXRobmFtZSA9IG51bGw7XG4gIHRoaXMucGF0aCA9IG51bGw7XG4gIHRoaXMuaHJlZiA9IG51bGw7XG59XG5cbi8vIFJlZmVyZW5jZTogUkZDIDM5ODYsIFJGQyAxODA4LCBSRkMgMjM5NlxuXG4vLyBkZWZpbmUgdGhlc2UgaGVyZSBzbyBhdCBsZWFzdCB0aGV5IG9ubHkgaGF2ZSB0byBiZVxuLy8gY29tcGlsZWQgb25jZSBvbiB0aGUgZmlyc3QgbW9kdWxlIGxvYWQuXG52YXIgcHJvdG9jb2xQYXR0ZXJuID0gL14oW2EtejAtOS4rLV0rOikvaSxcbiAgICBwb3J0UGF0dGVybiA9IC86WzAtOV0qJC8sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyByZXNlcnZlZCBmb3IgZGVsaW1pdGluZyBVUkxzLlxuICAgIC8vIFdlIGFjdHVhbGx5IGp1c3QgYXV0by1lc2NhcGUgdGhlc2UuXG4gICAgZGVsaW1zID0gWyc8JywgJz4nLCAnXCInLCAnYCcsICcgJywgJ1xccicsICdcXG4nLCAnXFx0J10sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyBub3QgYWxsb3dlZCBmb3IgdmFyaW91cyByZWFzb25zLlxuICAgIHVud2lzZSA9IFsneycsICd9JywgJ3wnLCAnXFxcXCcsICdeJywgJ2AnXS5jb25jYXQoZGVsaW1zKSxcblxuICAgIC8vIEFsbG93ZWQgYnkgUkZDcywgYnV0IGNhdXNlIG9mIFhTUyBhdHRhY2tzLiAgQWx3YXlzIGVzY2FwZSB0aGVzZS5cbiAgICBhdXRvRXNjYXBlID0gWydcXCcnXS5jb25jYXQodW53aXNlKSxcbiAgICAvLyBDaGFyYWN0ZXJzIHRoYXQgYXJlIG5ldmVyIGV2ZXIgYWxsb3dlZCBpbiBhIGhvc3RuYW1lLlxuICAgIC8vIE5vdGUgdGhhdCBhbnkgaW52YWxpZCBjaGFycyBhcmUgYWxzbyBoYW5kbGVkLCBidXQgdGhlc2VcbiAgICAvLyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgKmV4cGVjdGVkKiB0byBiZSBzZWVuLCBzbyB3ZSBmYXN0LXBhdGhcbiAgICAvLyB0aGVtLlxuICAgIG5vbkhvc3RDaGFycyA9IFsnJScsICcvJywgJz8nLCAnOycsICcjJ10uY29uY2F0KGF1dG9Fc2NhcGUpLFxuICAgIGhvc3RFbmRpbmdDaGFycyA9IFsnLycsICc/JywgJyMnXSxcbiAgICBob3N0bmFtZU1heExlbiA9IDI1NSxcbiAgICBob3N0bmFtZVBhcnRQYXR0ZXJuID0gL15bYS16MC05QS1aXy1dezAsNjN9JC8sXG4gICAgaG9zdG5hbWVQYXJ0U3RhcnQgPSAvXihbYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBjYW4gYWxsb3cgXCJ1bnNhZmVcIiBhbmQgXCJ1bndpc2VcIiBjaGFycy5cbiAgICB1bnNhZmVQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IG5ldmVyIGhhdmUgYSBob3N0bmFtZS5cbiAgICBob3N0bGVzc1Byb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgYWx3YXlzIGNvbnRhaW4gYSAvLyBiaXQuXG4gICAgc2xhc2hlZFByb3RvY29sID0ge1xuICAgICAgJ2h0dHAnOiB0cnVlLFxuICAgICAgJ2h0dHBzJzogdHJ1ZSxcbiAgICAgICdmdHAnOiB0cnVlLFxuICAgICAgJ2dvcGhlcic6IHRydWUsXG4gICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAnaHR0cDonOiB0cnVlLFxuICAgICAgJ2h0dHBzOic6IHRydWUsXG4gICAgICAnZnRwOic6IHRydWUsXG4gICAgICAnZ29waGVyOic6IHRydWUsXG4gICAgICAnZmlsZTonOiB0cnVlXG4gICAgfSxcbiAgICBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbmZ1bmN0aW9uIHVybFBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKHVybCAmJiBpc09iamVjdCh1cmwpICYmIHVybCBpbnN0YW5jZW9mIFVybCkgcmV0dXJuIHVybDtcblxuICB2YXIgdSA9IG5ldyBVcmw7XG4gIHUucGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCk7XG4gIHJldHVybiB1O1xufVxuXG5VcmwucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24odXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAoIWlzU3RyaW5nKHVybCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCBcIiArIHR5cGVvZiB1cmwpO1xuICB9XG5cbiAgdmFyIHJlc3QgPSB1cmw7XG5cbiAgLy8gdHJpbSBiZWZvcmUgcHJvY2VlZGluZy5cbiAgLy8gVGhpcyBpcyB0byBzdXBwb3J0IHBhcnNlIHN0dWZmIGxpa2UgXCIgIGh0dHA6Ly9mb28uY29tICBcXG5cIlxuICByZXN0ID0gcmVzdC50cmltKCk7XG5cbiAgdmFyIHByb3RvID0gcHJvdG9jb2xQYXR0ZXJuLmV4ZWMocmVzdCk7XG4gIGlmIChwcm90bykge1xuICAgIHByb3RvID0gcHJvdG9bMF07XG4gICAgdmFyIGxvd2VyUHJvdG8gPSBwcm90by50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucHJvdG9jb2wgPSBsb3dlclByb3RvO1xuICAgIHJlc3QgPSByZXN0LnN1YnN0cihwcm90by5sZW5ndGgpO1xuICB9XG5cbiAgLy8gZmlndXJlIG91dCBpZiBpdCdzIGdvdCBhIGhvc3RcbiAgLy8gdXNlckBzZXJ2ZXIgaXMgKmFsd2F5cyogaW50ZXJwcmV0ZWQgYXMgYSBob3N0bmFtZSwgYW5kIHVybFxuICAvLyByZXNvbHV0aW9uIHdpbGwgdHJlYXQgLy9mb28vYmFyIGFzIGhvc3Q9Zm9vLHBhdGg9YmFyIGJlY2F1c2UgdGhhdCdzXG4gIC8vIGhvdyB0aGUgYnJvd3NlciByZXNvbHZlcyByZWxhdGl2ZSBVUkxzLlxuICBpZiAoc2xhc2hlc0Rlbm90ZUhvc3QgfHwgcHJvdG8gfHwgcmVzdC5tYXRjaCgvXlxcL1xcL1teQFxcL10rQFteQFxcL10rLykpIHtcbiAgICB2YXIgc2xhc2hlcyA9IHJlc3Quc3Vic3RyKDAsIDIpID09PSAnLy8nO1xuICAgIGlmIChzbGFzaGVzICYmICEocHJvdG8gJiYgaG9zdGxlc3NQcm90b2NvbFtwcm90b10pKSB7XG4gICAgICByZXN0ID0gcmVzdC5zdWJzdHIoMik7XG4gICAgICB0aGlzLnNsYXNoZXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaG9zdGxlc3NQcm90b2NvbFtwcm90b10gJiZcbiAgICAgIChzbGFzaGVzIHx8IChwcm90byAmJiAhc2xhc2hlZFByb3RvY29sW3Byb3RvXSkpKSB7XG5cbiAgICAvLyB0aGVyZSdzIGEgaG9zdG5hbWUuXG4gICAgLy8gdGhlIGZpcnN0IGluc3RhbmNlIG9mIC8sID8sIDssIG9yICMgZW5kcyB0aGUgaG9zdC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlIGlzIGFuIEAgaW4gdGhlIGhvc3RuYW1lLCB0aGVuIG5vbi1ob3N0IGNoYXJzICphcmUqIGFsbG93ZWRcbiAgICAvLyB0byB0aGUgbGVmdCBvZiB0aGUgbGFzdCBAIHNpZ24sIHVubGVzcyBzb21lIGhvc3QtZW5kaW5nIGNoYXJhY3RlclxuICAgIC8vIGNvbWVzICpiZWZvcmUqIHRoZSBALXNpZ24uXG4gICAgLy8gVVJMcyBhcmUgb2Jub3hpb3VzLlxuICAgIC8vXG4gICAgLy8gZXg6XG4gICAgLy8gaHR0cDovL2FAYkBjLyA9PiB1c2VyOmFAYiBob3N0OmNcbiAgICAvLyBodHRwOi8vYUBiP0BjID0+IHVzZXI6YSBob3N0OmMgcGF0aDovP0BjXG5cbiAgICAvLyB2MC4xMiBUT0RPKGlzYWFjcyk6IFRoaXMgaXMgbm90IHF1aXRlIGhvdyBDaHJvbWUgZG9lcyB0aGluZ3MuXG4gICAgLy8gUmV2aWV3IG91ciB0ZXN0IGNhc2UgYWdhaW5zdCBicm93c2VycyBtb3JlIGNvbXByZWhlbnNpdmVseS5cblxuICAgIC8vIGZpbmQgdGhlIGZpcnN0IGluc3RhbmNlIG9mIGFueSBob3N0RW5kaW5nQ2hhcnNcbiAgICB2YXIgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9zdEVuZGluZ0NoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKGhvc3RFbmRpbmdDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgZWl0aGVyIHdlIGhhdmUgYW4gZXhwbGljaXQgcG9pbnQgd2hlcmUgdGhlXG4gICAgLy8gYXV0aCBwb3J0aW9uIGNhbm5vdCBnbyBwYXN0LCBvciB0aGUgbGFzdCBAIGNoYXIgaXMgdGhlIGRlY2lkZXIuXG4gICAgdmFyIGF1dGgsIGF0U2lnbjtcbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIGF0U2lnbiBjYW4gYmUgYW55d2hlcmUuXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGF0U2lnbiBtdXN0IGJlIGluIGF1dGggcG9ydGlvbi5cbiAgICAgIC8vIGh0dHA6Ly9hQGIvY0BkID0+IGhvc3Q6YiBhdXRoOmEgcGF0aDovY0BkXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJywgaG9zdEVuZCk7XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGhhdmUgYSBwb3J0aW9uIHdoaWNoIGlzIGRlZmluaXRlbHkgdGhlIGF1dGguXG4gICAgLy8gUHVsbCB0aGF0IG9mZi5cbiAgICBpZiAoYXRTaWduICE9PSAtMSkge1xuICAgICAgYXV0aCA9IHJlc3Quc2xpY2UoMCwgYXRTaWduKTtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKGF0U2lnbiArIDEpO1xuICAgICAgdGhpcy5hdXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIH1cblxuICAgIC8vIHRoZSBob3N0IGlzIHRoZSByZW1haW5pbmcgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IG5vbi1ob3N0IGNoYXJcbiAgICBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub25Ib3N0Q2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2Yobm9uSG9zdENoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG4gICAgLy8gaWYgd2Ugc3RpbGwgaGF2ZSBub3QgaGl0IGl0LCB0aGVuIHRoZSBlbnRpcmUgdGhpbmcgaXMgYSBob3N0LlxuICAgIGlmIChob3N0RW5kID09PSAtMSlcbiAgICAgIGhvc3RFbmQgPSByZXN0Lmxlbmd0aDtcblxuICAgIHRoaXMuaG9zdCA9IHJlc3Quc2xpY2UoMCwgaG9zdEVuZCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoaG9zdEVuZCk7XG5cbiAgICAvLyBwdWxsIG91dCBwb3J0LlxuICAgIHRoaXMucGFyc2VIb3N0KCk7XG5cbiAgICAvLyB3ZSd2ZSBpbmRpY2F0ZWQgdGhhdCB0aGVyZSBpcyBhIGhvc3RuYW1lLFxuICAgIC8vIHNvIGV2ZW4gaWYgaXQncyBlbXB0eSwgaXQgaGFzIHRvIGJlIHByZXNlbnQuXG4gICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG5cbiAgICAvLyBpZiBob3N0bmFtZSBiZWdpbnMgd2l0aCBbIGFuZCBlbmRzIHdpdGggXVxuICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYW4gSVB2NiBhZGRyZXNzLlxuICAgIHZhciBpcHY2SG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lWzBdID09PSAnWycgJiZcbiAgICAgICAgdGhpcy5ob3N0bmFtZVt0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDFdID09PSAnXSc7XG5cbiAgICAvLyB2YWxpZGF0ZSBhIGxpdHRsZS5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgdmFyIGhvc3RwYXJ0cyA9IHRoaXMuaG9zdG5hbWUuc3BsaXQoL1xcLi8pO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBob3N0cGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXJ0ID0gaG9zdHBhcnRzW2ldO1xuICAgICAgICBpZiAoIXBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIXBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICB2YXIgbmV3cGFydCA9ICcnO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwLCBrID0gcGFydC5sZW5ndGg7IGogPCBrOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LmNoYXJDb2RlQXQoaikgPiAxMjcpIHtcbiAgICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBub24tQVNDSUkgY2hhciB3aXRoIGEgdGVtcG9yYXJ5IHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIC8vIHdlIG5lZWQgdGhpcyB0byBtYWtlIHN1cmUgc2l6ZSBvZiBob3N0bmFtZSBpcyBub3RcbiAgICAgICAgICAgICAgLy8gYnJva2VuIGJ5IHJlcGxhY2luZyBub24tQVNDSUkgYnkgbm90aGluZ1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9ICd4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gcGFydFtqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2UgdGVzdCBhZ2FpbiB3aXRoIEFTQ0lJIGNoYXIgb25seVxuICAgICAgICAgIGlmICghbmV3cGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgICAgdmFyIHZhbGlkUGFydHMgPSBob3N0cGFydHMuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICB2YXIgbm90SG9zdCA9IGhvc3RwYXJ0cy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICB2YXIgYml0ID0gcGFydC5tYXRjaChob3N0bmFtZVBhcnRTdGFydCk7XG4gICAgICAgICAgICBpZiAoYml0KSB7XG4gICAgICAgICAgICAgIHZhbGlkUGFydHMucHVzaChiaXRbMV0pO1xuICAgICAgICAgICAgICBub3RIb3N0LnVuc2hpZnQoYml0WzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub3RIb3N0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXN0ID0gJy8nICsgbm90SG9zdC5qb2luKCcuJykgKyByZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob3N0bmFtZSA9IHZhbGlkUGFydHMuam9pbignLicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaG9zdG5hbWUubGVuZ3RoID4gaG9zdG5hbWVNYXhMZW4pIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaG9zdG5hbWVzIGFyZSBhbHdheXMgbG93ZXIgY2FzZS5cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIC8vIElETkEgU3VwcG9ydDogUmV0dXJucyBhIHB1bnkgY29kZWQgcmVwcmVzZW50YXRpb24gb2YgXCJkb21haW5cIi5cbiAgICAgIC8vIEl0IG9ubHkgY29udmVydHMgdGhlIHBhcnQgb2YgdGhlIGRvbWFpbiBuYW1lIHRoYXRcbiAgICAgIC8vIGhhcyBub24gQVNDSUkgY2hhcmFjdGVycy4gSS5lLiBpdCBkb3NlbnQgbWF0dGVyIGlmXG4gICAgICAvLyB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQgYWxyZWFkeSBpcyBpbiBBU0NJSS5cbiAgICAgIHZhciBkb21haW5BcnJheSA9IHRoaXMuaG9zdG5hbWUuc3BsaXQoJy4nKTtcbiAgICAgIHZhciBuZXdPdXQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9tYWluQXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHMgPSBkb21haW5BcnJheVtpXTtcbiAgICAgICAgbmV3T3V0LnB1c2gocy5tYXRjaCgvW15BLVphLXowLTlfLV0vKSA/XG4gICAgICAgICAgICAneG4tLScgKyBwdW55Y29kZS5lbmNvZGUocykgOiBzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSBuZXdPdXQuam9pbignLicpO1xuICAgIH1cblxuICAgIHZhciBwID0gdGhpcy5wb3J0ID8gJzonICsgdGhpcy5wb3J0IDogJyc7XG4gICAgdmFyIGggPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuICAgIHRoaXMuaG9zdCA9IGggKyBwO1xuICAgIHRoaXMuaHJlZiArPSB0aGlzLmhvc3Q7XG5cbiAgICAvLyBzdHJpcCBbIGFuZCBdIGZyb20gdGhlIGhvc3RuYW1lXG4gICAgLy8gdGhlIGhvc3QgZmllbGQgc3RpbGwgcmV0YWlucyB0aGVtLCB0aG91Z2hcbiAgICBpZiAoaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS5zdWJzdHIoMSwgdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIGlmIChyZXN0WzBdICE9PSAnLycpIHtcbiAgICAgICAgcmVzdCA9ICcvJyArIHJlc3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbm93IHJlc3QgaXMgc2V0IHRvIHRoZSBwb3N0LWhvc3Qgc3R1ZmYuXG4gIC8vIGNob3Agb2ZmIGFueSBkZWxpbSBjaGFycy5cbiAgaWYgKCF1bnNhZmVQcm90b2NvbFtsb3dlclByb3RvXSkge1xuXG4gICAgLy8gRmlyc3QsIG1ha2UgMTAwJSBzdXJlIHRoYXQgYW55IFwiYXV0b0VzY2FwZVwiIGNoYXJzIGdldFxuICAgIC8vIGVzY2FwZWQsIGV2ZW4gaWYgZW5jb2RlVVJJQ29tcG9uZW50IGRvZXNuJ3QgdGhpbmsgdGhleVxuICAgIC8vIG5lZWQgdG8gYmUuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdXRvRXNjYXBlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGFlID0gYXV0b0VzY2FwZVtpXTtcbiAgICAgIHZhciBlc2MgPSBlbmNvZGVVUklDb21wb25lbnQoYWUpO1xuICAgICAgaWYgKGVzYyA9PT0gYWUpIHtcbiAgICAgICAgZXNjID0gZXNjYXBlKGFlKTtcbiAgICAgIH1cbiAgICAgIHJlc3QgPSByZXN0LnNwbGl0KGFlKS5qb2luKGVzYyk7XG4gICAgfVxuICB9XG5cblxuICAvLyBjaG9wIG9mZiBmcm9tIHRoZSB0YWlsIGZpcnN0LlxuICB2YXIgaGFzaCA9IHJlc3QuaW5kZXhPZignIycpO1xuICBpZiAoaGFzaCAhPT0gLTEpIHtcbiAgICAvLyBnb3QgYSBmcmFnbWVudCBzdHJpbmcuXG4gICAgdGhpcy5oYXNoID0gcmVzdC5zdWJzdHIoaGFzaCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgaGFzaCk7XG4gIH1cbiAgdmFyIHFtID0gcmVzdC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxbSAhPT0gLTEpIHtcbiAgICB0aGlzLnNlYXJjaCA9IHJlc3Quc3Vic3RyKHFtKTtcbiAgICB0aGlzLnF1ZXJ5ID0gcmVzdC5zdWJzdHIocW0gKyAxKTtcbiAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMucXVlcnkpO1xuICAgIH1cbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBxbSk7XG4gIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgIC8vIG5vIHF1ZXJ5IHN0cmluZywgYnV0IHBhcnNlUXVlcnlTdHJpbmcgc3RpbGwgcmVxdWVzdGVkXG4gICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICB0aGlzLnF1ZXJ5ID0ge307XG4gIH1cbiAgaWYgKHJlc3QpIHRoaXMucGF0aG5hbWUgPSByZXN0O1xuICBpZiAoc2xhc2hlZFByb3RvY29sW2xvd2VyUHJvdG9dICYmXG4gICAgICB0aGlzLmhvc3RuYW1lICYmICF0aGlzLnBhdGhuYW1lKSB7XG4gICAgdGhpcy5wYXRobmFtZSA9ICcvJztcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgaWYgKHRoaXMucGF0aG5hbWUgfHwgdGhpcy5zZWFyY2gpIHtcbiAgICB2YXIgcCA9IHRoaXMucGF0aG5hbWUgfHwgJyc7XG4gICAgdmFyIHMgPSB0aGlzLnNlYXJjaCB8fCAnJztcbiAgICB0aGlzLnBhdGggPSBwICsgcztcbiAgfVxuXG4gIC8vIGZpbmFsbHksIHJlY29uc3RydWN0IHRoZSBocmVmIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gdmFsaWRhdGVkLlxuICB0aGlzLmhyZWYgPSB0aGlzLmZvcm1hdCgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGZvcm1hdCBhIHBhcnNlZCBvYmplY3QgaW50byBhIHVybCBzdHJpbmdcbmZ1bmN0aW9uIHVybEZvcm1hdChvYmopIHtcbiAgLy8gZW5zdXJlIGl0J3MgYW4gb2JqZWN0LCBhbmQgbm90IGEgc3RyaW5nIHVybC5cbiAgLy8gSWYgaXQncyBhbiBvYmosIHRoaXMgaXMgYSBuby1vcC5cbiAgLy8gdGhpcyB3YXksIHlvdSBjYW4gY2FsbCB1cmxfZm9ybWF0KCkgb24gc3RyaW5nc1xuICAvLyB0byBjbGVhbiB1cCBwb3RlbnRpYWxseSB3b25reSB1cmxzLlxuICBpZiAoaXNTdHJpbmcob2JqKSkgb2JqID0gdXJsUGFyc2Uob2JqKTtcbiAgaWYgKCEob2JqIGluc3RhbmNlb2YgVXJsKSkgcmV0dXJuIFVybC5wcm90b3R5cGUuZm9ybWF0LmNhbGwob2JqKTtcbiAgcmV0dXJuIG9iai5mb3JtYXQoKTtcbn1cblxuVXJsLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGF1dGggPSB0aGlzLmF1dGggfHwgJyc7XG4gIGlmIChhdXRoKSB7XG4gICAgYXV0aCA9IGVuY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICBhdXRoID0gYXV0aC5yZXBsYWNlKC8lM0EvaSwgJzonKTtcbiAgICBhdXRoICs9ICdAJztcbiAgfVxuXG4gIHZhciBwcm90b2NvbCA9IHRoaXMucHJvdG9jb2wgfHwgJycsXG4gICAgICBwYXRobmFtZSA9IHRoaXMucGF0aG5hbWUgfHwgJycsXG4gICAgICBoYXNoID0gdGhpcy5oYXNoIHx8ICcnLFxuICAgICAgaG9zdCA9IGZhbHNlLFxuICAgICAgcXVlcnkgPSAnJztcblxuICBpZiAodGhpcy5ob3N0KSB7XG4gICAgaG9zdCA9IGF1dGggKyB0aGlzLmhvc3Q7XG4gIH0gZWxzZSBpZiAodGhpcy5ob3N0bmFtZSkge1xuICAgIGhvc3QgPSBhdXRoICsgKHRoaXMuaG9zdG5hbWUuaW5kZXhPZignOicpID09PSAtMSA/XG4gICAgICAgIHRoaXMuaG9zdG5hbWUgOlxuICAgICAgICAnWycgKyB0aGlzLmhvc3RuYW1lICsgJ10nKTtcbiAgICBpZiAodGhpcy5wb3J0KSB7XG4gICAgICBob3N0ICs9ICc6JyArIHRoaXMucG9ydDtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5xdWVyeSAmJlxuICAgICAgaXNPYmplY3QodGhpcy5xdWVyeSkgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucXVlcnkpLmxlbmd0aCkge1xuICAgIHF1ZXJ5ID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHRoaXMucXVlcnkpO1xuICB9XG5cbiAgdmFyIHNlYXJjaCA9IHRoaXMuc2VhcmNoIHx8IChxdWVyeSAmJiAoJz8nICsgcXVlcnkpKSB8fCAnJztcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuc3Vic3RyKC0xKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgLy8gb25seSB0aGUgc2xhc2hlZFByb3RvY29scyBnZXQgdGhlIC8vLiAgTm90IG1haWx0bzosIHhtcHA6LCBldGMuXG4gIC8vIHVubGVzcyB0aGV5IGhhZCB0aGVtIHRvIGJlZ2luIHdpdGguXG4gIGlmICh0aGlzLnNsYXNoZXMgfHxcbiAgICAgICghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29sW3Byb3RvY29sXSkgJiYgaG9zdCAhPT0gZmFsc2UpIHtcbiAgICBob3N0ID0gJy8vJyArIChob3N0IHx8ICcnKTtcbiAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWU7XG4gIH0gZWxzZSBpZiAoIWhvc3QpIHtcbiAgICBob3N0ID0gJyc7XG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSBoYXNoID0gJyMnICsgaGFzaDtcbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2guY2hhckF0KDApICE9PSAnPycpIHNlYXJjaCA9ICc/JyArIHNlYXJjaDtcblxuICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG1hdGNoKTtcbiAgfSk7XG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpO1xuXG4gIHJldHVybiBwcm90b2NvbCArIGhvc3QgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlKHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmUocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICByZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KHVybFBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSkpLmZvcm1hdCgpO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZU9iamVjdChzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIGlmICghc291cmNlKSByZXR1cm4gcmVsYXRpdmU7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlT2JqZWN0KHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgaWYgKGlzU3RyaW5nKHJlbGF0aXZlKSkge1xuICAgIHZhciByZWwgPSBuZXcgVXJsKCk7XG4gICAgcmVsLnBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgcmVsYXRpdmUgPSByZWw7XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gbmV3IFVybCgpO1xuICBPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICByZXN1bHRba10gPSB0aGlzW2tdO1xuICB9LCB0aGlzKTtcblxuICAvLyBoYXNoIGlzIGFsd2F5cyBvdmVycmlkZGVuLCBubyBtYXR0ZXIgd2hhdC5cbiAgLy8gZXZlbiBocmVmPVwiXCIgd2lsbCByZW1vdmUgaXQuXG4gIHJlc3VsdC5oYXNoID0gcmVsYXRpdmUuaGFzaDtcblxuICAvLyBpZiB0aGUgcmVsYXRpdmUgdXJsIGlzIGVtcHR5LCB0aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvIGhlcmUuXG4gIGlmIChyZWxhdGl2ZS5ocmVmID09PSAnJykge1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBocmVmcyBsaWtlIC8vZm9vL2JhciBhbHdheXMgY3V0IHRvIHRoZSBwcm90b2NvbC5cbiAgaWYgKHJlbGF0aXZlLnNsYXNoZXMgJiYgIXJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgLy8gdGFrZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgcHJvdG9jb2wgZnJvbSByZWxhdGl2ZVxuICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgIGlmIChrICE9PSAncHJvdG9jb2wnKVxuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICB9KTtcblxuICAgIC8vdXJsUGFyc2UgYXBwZW5kcyB0cmFpbGluZyAvIHRvIHVybHMgbGlrZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tXG4gICAgaWYgKHNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdICYmXG4gICAgICAgIHJlc3VsdC5ob3N0bmFtZSAmJiAhcmVzdWx0LnBhdGhuYW1lKSB7XG4gICAgICByZXN1bHQucGF0aCA9IHJlc3VsdC5wYXRobmFtZSA9ICcvJztcbiAgICB9XG5cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKHJlbGF0aXZlLnByb3RvY29sICYmIHJlbGF0aXZlLnByb3RvY29sICE9PSByZXN1bHQucHJvdG9jb2wpIHtcbiAgICAvLyBpZiBpdCdzIGEga25vd24gdXJsIHByb3RvY29sLCB0aGVuIGNoYW5naW5nXG4gICAgLy8gdGhlIHByb3RvY29sIGRvZXMgd2VpcmQgdGhpbmdzXG4gICAgLy8gZmlyc3QsIGlmIGl0J3Mgbm90IGZpbGU6LCB0aGVuIHdlIE1VU1QgaGF2ZSBhIGhvc3QsXG4gICAgLy8gYW5kIGlmIHRoZXJlIHdhcyBhIHBhdGhcbiAgICAvLyB0byBiZWdpbiB3aXRoLCB0aGVuIHdlIE1VU1QgaGF2ZSBhIHBhdGguXG4gICAgLy8gaWYgaXQgaXMgZmlsZTosIHRoZW4gdGhlIGhvc3QgaXMgZHJvcHBlZCxcbiAgICAvLyBiZWNhdXNlIHRoYXQncyBrbm93biB0byBiZSBob3N0bGVzcy5cbiAgICAvLyBhbnl0aGluZyBlbHNlIGlzIGFzc3VtZWQgdG8gYmUgYWJzb2x1dGUuXG4gICAgaWYgKCFzbGFzaGVkUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgICAgfSk7XG4gICAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmVzdWx0LnByb3RvY29sID0gcmVsYXRpdmUucHJvdG9jb2w7XG4gICAgaWYgKCFyZWxhdGl2ZS5ob3N0ICYmICFob3N0bGVzc1Byb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIHJlbFBhdGggPSAocmVsYXRpdmUucGF0aG5hbWUgfHwgJycpLnNwbGl0KCcvJyk7XG4gICAgICB3aGlsZSAocmVsUGF0aC5sZW5ndGggJiYgIShyZWxhdGl2ZS5ob3N0ID0gcmVsUGF0aC5zaGlmdCgpKSk7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3QpIHJlbGF0aXZlLmhvc3QgPSAnJztcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdG5hbWUpIHJlbGF0aXZlLmhvc3RuYW1lID0gJyc7XG4gICAgICBpZiAocmVsUGF0aFswXSAhPT0gJycpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICBpZiAocmVsUGF0aC5sZW5ndGggPCAyKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsUGF0aC5qb2luKCcvJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbGF0aXZlLnBhdGhuYW1lO1xuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHJlc3VsdC5ob3N0ID0gcmVsYXRpdmUuaG9zdCB8fCAnJztcbiAgICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGg7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdDtcbiAgICByZXN1bHQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgLy8gdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnBhdGhuYW1lIHx8IHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHZhciBwID0gcmVzdWx0LnBhdGhuYW1lIHx8ICcnO1xuICAgICAgdmFyIHMgPSByZXN1bHQuc2VhcmNoIHx8ICcnO1xuICAgICAgcmVzdWx0LnBhdGggPSBwICsgcztcbiAgICB9XG4gICAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIgaXNTb3VyY2VBYnMgPSAocmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJyksXG4gICAgICBpc1JlbEFicyA9IChcbiAgICAgICAgICByZWxhdGl2ZS5ob3N0IHx8XG4gICAgICAgICAgcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLydcbiAgICAgICksXG4gICAgICBtdXN0RW5kQWJzID0gKGlzUmVsQWJzIHx8IGlzU291cmNlQWJzIHx8XG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuaG9zdCAmJiByZWxhdGl2ZS5wYXRobmFtZSkpLFxuICAgICAgcmVtb3ZlQWxsRG90cyA9IG11c3RFbmRBYnMsXG4gICAgICBzcmNQYXRoID0gcmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcmVsUGF0aCA9IHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICBwc3ljaG90aWMgPSByZXN1bHQucHJvdG9jb2wgJiYgIXNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdO1xuXG4gIC8vIGlmIHRoZSB1cmwgaXMgYSBub24tc2xhc2hlZCB1cmwsIHRoZW4gcmVsYXRpdmVcbiAgLy8gbGlua3MgbGlrZSAuLi8uLiBzaG91bGQgYmUgYWJsZVxuICAvLyB0byBjcmF3bCB1cCB0byB0aGUgaG9zdG5hbWUsIGFzIHdlbGwuICBUaGlzIGlzIHN0cmFuZ2UuXG4gIC8vIHJlc3VsdC5wcm90b2NvbCBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSBub3cuXG4gIC8vIExhdGVyIG9uLCBwdXQgdGhlIGZpcnN0IHBhdGggcGFydCBpbnRvIHRoZSBob3N0IGZpZWxkLlxuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gJyc7XG4gICAgcmVzdWx0LnBvcnQgPSBudWxsO1xuICAgIGlmIChyZXN1bHQuaG9zdCkge1xuICAgICAgaWYgKHNyY1BhdGhbMF0gPT09ICcnKSBzcmNQYXRoWzBdID0gcmVzdWx0Lmhvc3Q7XG4gICAgICBlbHNlIHNyY1BhdGgudW5zaGlmdChyZXN1bHQuaG9zdCk7XG4gICAgfVxuICAgIHJlc3VsdC5ob3N0ID0gJyc7XG4gICAgaWYgKHJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgICByZWxhdGl2ZS5ob3N0bmFtZSA9IG51bGw7XG4gICAgICByZWxhdGl2ZS5wb3J0ID0gbnVsbDtcbiAgICAgIGlmIChyZWxhdGl2ZS5ob3N0KSB7XG4gICAgICAgIGlmIChyZWxQYXRoWzBdID09PSAnJykgcmVsUGF0aFswXSA9IHJlbGF0aXZlLmhvc3Q7XG4gICAgICAgIGVsc2UgcmVsUGF0aC51bnNoaWZ0KHJlbGF0aXZlLmhvc3QpO1xuICAgICAgfVxuICAgICAgcmVsYXRpdmUuaG9zdCA9IG51bGw7XG4gICAgfVxuICAgIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzICYmIChyZWxQYXRoWzBdID09PSAnJyB8fCBzcmNQYXRoWzBdID09PSAnJyk7XG4gIH1cblxuICBpZiAoaXNSZWxBYnMpIHtcbiAgICAvLyBpdCdzIGFic29sdXRlLlxuICAgIHJlc3VsdC5ob3N0ID0gKHJlbGF0aXZlLmhvc3QgfHwgcmVsYXRpdmUuaG9zdCA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3QgOiByZXN1bHQuaG9zdDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAocmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdG5hbWUgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgOiByZXN1bHQuaG9zdG5hbWU7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICBzcmNQYXRoID0gcmVsUGF0aDtcbiAgICAvLyBmYWxsIHRocm91Z2ggdG8gdGhlIGRvdC1oYW5kbGluZyBiZWxvdy5cbiAgfSBlbHNlIGlmIChyZWxQYXRoLmxlbmd0aCkge1xuICAgIC8vIGl0J3MgcmVsYXRpdmVcbiAgICAvLyB0aHJvdyBhd2F5IHRoZSBleGlzdGluZyBmaWxlLCBhbmQgdGFrZSB0aGUgbmV3IHBhdGggaW5zdGVhZC5cbiAgICBpZiAoIXNyY1BhdGgpIHNyY1BhdGggPSBbXTtcbiAgICBzcmNQYXRoLnBvcCgpO1xuICAgIHNyY1BhdGggPSBzcmNQYXRoLmNvbmNhdChyZWxQYXRoKTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICB9IGVsc2UgaWYgKCFpc051bGxPclVuZGVmaW5lZChyZWxhdGl2ZS5zZWFyY2gpKSB7XG4gICAgLy8ganVzdCBwdWxsIG91dCB0aGUgc2VhcmNoLlxuICAgIC8vIGxpa2UgaHJlZj0nP2ZvbycuXG4gICAgLy8gUHV0IHRoaXMgYWZ0ZXIgdGhlIG90aGVyIHR3byBjYXNlcyBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhlIGJvb2xlYW5zXG4gICAgaWYgKHBzeWNob3RpYykge1xuICAgICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBzcmNQYXRoLnNoaWZ0KCk7XG4gICAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgICAvL3RoaXMgZXNwZWNpYWx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKCFpc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgLy8gbm8gcGF0aCBhdCBhbGwuICBlYXN5LlxuICAgIC8vIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgb3RoZXIgc3R1ZmYgYWJvdmUuXG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gJy8nICsgcmVzdWx0LnNlYXJjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaWYgYSB1cmwgRU5EcyBpbiAuIG9yIC4uLCB0aGVuIGl0IG11c3QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIC8vIGhvd2V2ZXIsIGlmIGl0IGVuZHMgaW4gYW55dGhpbmcgZWxzZSBub24tc2xhc2h5LFxuICAvLyB0aGVuIGl0IG11c3QgTk9UIGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICB2YXIgbGFzdCA9IHNyY1BhdGguc2xpY2UoLTEpWzBdO1xuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IChcbiAgICAgIChyZXN1bHQuaG9zdCB8fCByZWxhdGl2ZS5ob3N0KSAmJiAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHx8XG4gICAgICBsYXN0ID09PSAnJyk7XG5cbiAgLy8gc3RyaXAgc2luZ2xlIGRvdHMsIHJlc29sdmUgZG91YmxlIGRvdHMgdG8gcGFyZW50IGRpclxuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gc3JjUGF0aC5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGFzdCA9IHNyY1BhdGhbaV07XG4gICAgaWYgKGxhc3QgPT0gJy4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoIW11c3RFbmRBYnMgJiYgIXJlbW92ZUFsbERvdHMpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHNyY1BhdGgudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAobXVzdEVuZEFicyAmJiBzcmNQYXRoWzBdICE9PSAnJyAmJlxuICAgICAgKCFzcmNQYXRoWzBdIHx8IHNyY1BhdGhbMF0uY2hhckF0KDApICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmIChoYXNUcmFpbGluZ1NsYXNoICYmIChzcmNQYXRoLmpvaW4oJy8nKS5zdWJzdHIoLTEpICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC5wdXNoKCcnKTtcbiAgfVxuXG4gIHZhciBpc0Fic29sdXRlID0gc3JjUGF0aFswXSA9PT0gJycgfHxcbiAgICAgIChzcmNQYXRoWzBdICYmIHNyY1BhdGhbMF0uY2hhckF0KDApID09PSAnLycpO1xuXG4gIC8vIHB1dCB0aGUgaG9zdCBiYWNrXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IGlzQWJzb2x1dGUgPyAnJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQYXRoLmxlbmd0aCA/IHNyY1BhdGguc2hpZnQoKSA6ICcnO1xuICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAvL3RoaXMgZXNwZWNpYWx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICB9XG4gIH1cblxuICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyB8fCAocmVzdWx0Lmhvc3QgJiYgc3JjUGF0aC5sZW5ndGgpO1xuXG4gIGlmIChtdXN0RW5kQWJzICYmICFpc0Fic29sdXRlKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBzcmNQYXRoLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCByZXF1ZXN0Lmh0dHBcbiAgaWYgKCFpc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgfVxuICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGggfHwgcmVzdWx0LmF1dGg7XG4gIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5VcmwucHJvdG90eXBlLnBhcnNlSG9zdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgdmFyIHBvcnQgPSBwb3J0UGF0dGVybi5leGVjKGhvc3QpO1xuICBpZiAocG9ydCkge1xuICAgIHBvcnQgPSBwb3J0WzBdO1xuICAgIGlmIChwb3J0ICE9PSAnOicpIHtcbiAgICAgIHRoaXMucG9ydCA9IHBvcnQuc3Vic3RyKDEpO1xuICAgIH1cbiAgICBob3N0ID0gaG9zdC5zdWJzdHIoMCwgaG9zdC5sZW5ndGggLSBwb3J0Lmxlbmd0aCk7XG4gIH1cbiAgaWYgKGhvc3QpIHRoaXMuaG9zdG5hbWUgPSBob3N0O1xufTtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiAgYXJnID09IG51bGw7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSkge1xuICBpZiAoIWVsZW1lbnQuYXR0cnMpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIG4gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5hdHRycy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChlbGVtZW50LmF0dHJzW2ldLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbikge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmZiBbZWxlbWVudF0gaGFzIHRoZSBhdHRyaWJ1dGUgW25hbWVdLCBgZmFsc2VgXG4gKiAgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaGFzQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUpIHtcbiAgcmV0dXJuIGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpICE9PSAtMTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IFRoZSBzdHJpbmcgdmFsdWUgb2YgYXR0cmlidXRlIGBuYW1lYCwgb3IgYG51bGxgLlxuICovXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICB2YXIgaSA9IGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpO1xuICBpZiAoaSA+IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuYXR0cnNbaV0udmFsdWU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaSA9IGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpO1xuICBpZiAoaSA+IC0xKSB7XG4gICAgZWxlbWVudC5hdHRyc1tpXS52YWx1ZSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuYXR0cnMucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUpIHtcbiAgdmFyIGkgPSBnZXRBdHRyaWJ1dGVJbmRleChlbGVtZW50LCBuYW1lKTtcbiAgaWYgKGkgPiAtMSkge1xuICAgIGVsZW1lbnQuYXR0cnMuc3BsaWNlKGksIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc1RhZ05hbWUobmFtZSkge1xuICB2YXIgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUudGFnTmFtZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG47XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGByZWdleC5tYXRjaCh0YWdOYW1lKWAgZmluZHMgYSBtYXRjaC5cbiAqXG4gKiBUaGlzIHdpbGwgdXNlIHRoZSBsb3dlcmNhc2VkIHRhZ05hbWUgZm9yIGNvbXBhcmlzb24uXG4gKiBcbiAqIEBwYXJhbSAge1JlZ0V4cH0gcmVnZXhcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc01hdGNoaW5nVGFnTmFtZShyZWdleCkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS50YWdOYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZWdleC50ZXN0KG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKG5vZGUsICdjbGFzcycpO1xuICAgIGlmICghYXR0cikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gYXR0ci5zcGxpdCgnICcpLmluZGV4T2YobmFtZSkgPiAtMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29sbGFwc2VUZXh0UmFuZ2UocGFyZW50LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0ZXh0ID0gJyc7XG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgIHRleHQgKz0gZ2V0VGV4dENvbnRlbnQocGFyZW50LmNoaWxkTm9kZXNbaV0pO1xuICB9XG4gIHBhcmVudC5jaGlsZE5vZGVzLnNwbGljZShzdGFydCwgKGVuZCAtIHN0YXJ0KSArIDEpO1xuICBpZiAodGV4dCkge1xuICAgIHZhciB0biA9IG5ld1RleHROb2RlKHRleHQpO1xuICAgIHRuLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG4gICAgcGFyZW50LmNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCAwLCB0bik7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIHRleHQgaW5zaWRlIGFuIGVsZW1lbnRcbiAqXG4gKiBFcXVpdmFsZW50IHRvIGBlbGVtZW50Lm5vcm1hbGl6ZSgpYCBpbiB0aGUgYnJvd3NlclxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ob2RlL25vcm1hbGl6ZVxuICovXG5mdW5jdGlvbiBub3JtYWxpemUobm9kZSkge1xuICBpZiAoIShpc0VsZW1lbnQobm9kZSkgfHwgaXNEb2N1bWVudChub2RlKSB8fCBpc0RvY3VtZW50RnJhZ21lbnQobm9kZSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciB0ZXh0UmFuZ2VTdGFydCA9IC0xO1xuICBmb3IgKHZhciBpID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEsIG47IGkgPj0gMDsgaS0tKSB7XG4gICAgbiA9IG5vZGUuY2hpbGROb2Rlc1tpXTtcbiAgICBpZiAoaXNUZXh0Tm9kZShuKSkge1xuICAgICAgaWYgKHRleHRSYW5nZVN0YXJ0ID09IC0xKSB7XG4gICAgICAgIHRleHRSYW5nZVN0YXJ0ID0gaTtcbiAgICAgIH1cbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIC8vIGNvbGxhcHNlIGxlYWRpbmcgdGV4dCBub2Rlc1xuICAgICAgICBjb2xsYXBzZVRleHRSYW5nZShub2RlLCAwLCB0ZXh0UmFuZ2VTdGFydCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlY3Vyc2VcbiAgICAgIG5vcm1hbGl6ZShuKTtcbiAgICAgIC8vIGNvbGxhcHNlIHRoZSByYW5nZSBhZnRlciB0aGlzIG5vZGVcbiAgICAgIGlmICh0ZXh0UmFuZ2VTdGFydCA+IC0xKSB7XG4gICAgICAgIGNvbGxhcHNlVGV4dFJhbmdlKG5vZGUsIGkgKyAxLCB0ZXh0UmFuZ2VTdGFydCk7XG4gICAgICAgIHRleHRSYW5nZVN0YXJ0ID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0ZXh0IHZhbHVlIG9mIGEgbm9kZSBvciBlbGVtZW50XG4gKlxuICogRXF1aXZhbGVudCB0byBgbm9kZS50ZXh0Q29udGVudGAgaW4gdGhlIGJyb3dzZXJcbiAqL1xuZnVuY3Rpb24gZ2V0VGV4dENvbnRlbnQobm9kZSkge1xuICBpZiAoaXNDb21tZW50Tm9kZShub2RlKSkge1xuICAgIHJldHVybiBub2RlLmRhdGE7XG4gIH1cbiAgaWYgKGlzVGV4dE5vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgfVxuICB2YXIgc3VidHJlZSA9IG5vZGVXYWxrQWxsKG5vZGUsIGlzVGV4dE5vZGUpO1xuICByZXR1cm4gc3VidHJlZS5tYXAoZ2V0VGV4dENvbnRlbnQpLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIFNldCB0aGUgdGV4dCB2YWx1ZSBvZiBhIG5vZGUgb3IgZWxlbWVudFxuICpcbiAqIEVxdWl2YWxlbnQgdG8gYG5vZGUudGV4dENvbnRlbnQgPSB2YWx1ZWAgaW4gdGhlIGJyb3dzZXJcbiAqL1xuZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdmFsdWUpIHtcbiAgaWYgKGlzQ29tbWVudE5vZGUobm9kZSkpIHtcbiAgICBub2RlLmRhdGEgPSB2YWx1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG5vZGUpKSB7XG4gICAgbm9kZS52YWx1ZSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhciB0biA9IG5ld1RleHROb2RlKHZhbHVlKTtcbiAgICB0bi5wYXJlbnROb2RlID0gbm9kZTtcbiAgICBub2RlLmNoaWxkTm9kZXMgPSBbdG5dO1xuICB9XG59XG5cbi8qKlxuICogTWF0Y2ggdGhlIHRleHQgaW5zaWRlIGFuIGVsZW1lbnQsIHRleHRub2RlLCBvciBjb21tZW50XG4gKlxuICogTm90ZTogbm9kZVdhbGtBbGwgd2l0aCBoYXNUZXh0VmFsdWUgbWF5IHJldHVybiBhbiB0ZXh0bm9kZSBhbmQgaXRzIHBhcmVudCBpZlxuICogdGhlIHRleHRub2RlIGlzIHRoZSBvbmx5IGNoaWxkIGluIHRoYXQgcGFyZW50LlxuICovXG5mdW5jdGlvbiBoYXNUZXh0VmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0VGV4dENvbnRlbnQobm9kZSkgPT09IHZhbHVlO1xuICB9O1xufVxuXG4vKipcbiAqIE9SIGFuIGFycmF5IG9mIHByZWRpY2F0ZXNcbiAqL1xuZnVuY3Rpb24gT1IoLyogLi4ucnVsZXMgKi8pIHtcbiAgdmFyIHJ1bGVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHJ1bGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJ1bGVzW2ldKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG5cbi8qKlxuICogQU5EIGFuIGFycmF5IG9mIHByZWRpY2F0ZXNcbiAqL1xuZnVuY3Rpb24gQU5EKC8qIC4uLnJ1bGVzICovKSB7XG4gIHZhciBydWxlcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBydWxlc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcnVsZXNbaV0obm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBuZWdhdGUgYW4gaW5kaXZpZHVhbCBwcmVkaWNhdGUsIG9yIGEgZ3JvdXAgd2l0aCBBTkQgb3IgT1JcbiAqL1xuZnVuY3Rpb24gTk9UKHByZWRpY2F0ZUZuKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuICFwcmVkaWNhdGVGbihub2RlKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJlZGljYXRlIHRoYXQgbWF0Y2hlcyBhbnkgbm9kZSB3aXRoIGEgcGFyZW50IG1hdGNoaW5nIGBwcmVkaWNhdGVGbmAuXG4gKi9cbmZ1bmN0aW9uIHBhcmVudE1hdGNoZXMocHJlZGljYXRlRm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIHdoaWxlKHBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocHJlZGljYXRlRm4ocGFyZW50KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0F0dHIoYXR0cikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRBdHRyaWJ1dGVJbmRleChub2RlLCBhdHRyKSA+IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNBdHRyVmFsdWUoYXR0ciwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5vZGUsIGF0dHIpID09PSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNEb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2RvY3VtZW50Jztcbn1cblxuZnVuY3Rpb24gaXNEb2N1bWVudEZyYWdtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnQtZnJhZ21lbnQnO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gbm9kZS50YWdOYW1lO1xufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCc7XG59XG5cbmZ1bmN0aW9uIGlzQ29tbWVudE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNjb21tZW50Jztcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGBtYXBmbmAgdG8gYG5vZGVgIGFuZCB0aGUgdHJlZSBiZWxvdyBgbm9kZWAsIHJldHVybmluZyBhIGZsYXR0ZW5lZFxuICogbGlzdCBvZiByZXN1bHRzLlxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRyZWVNYXAobm9kZSwgbWFwZm4pIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgbm9kZVdhbGsobm9kZSwgZnVuY3Rpb24obm9kZSl7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KG1hcGZuKG5vZGUpKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBXYWxrIHRoZSB0cmVlIGRvd24gZnJvbSBgbm9kZWAsIGFwcGx5aW5nIHRoZSBgcHJlZGljYXRlYCBmdW5jdGlvbi5cbiAqIFJldHVybiB0aGUgZmlyc3Qgbm9kZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHByZWRpY2F0ZS5cbiAqXG4gKiBAcmV0dXJucyB7Tm9kZX0gYG51bGxgIGlmIG5vIG5vZGUgbWF0Y2hlcywgcGFyc2U1IG5vZGUgb2JqZWN0IGlmIGEgbm9kZVxuICogbWF0Y2hlc1xuICovXG5mdW5jdGlvbiBub2RlV2Fsayhub2RlLCBwcmVkaWNhdGUpIHtcbiAgaWYgKHByZWRpY2F0ZShub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIHZhciBtYXRjaCA9IG51bGw7XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0Y2ggPSBub2RlV2Fsayhub2RlLmNoaWxkTm9kZXNbaV0sIHByZWRpY2F0ZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaDtcbn1cblxuLyoqXG4gKiBXYWxrIHRoZSB0cmVlIGRvd24gZnJvbSBgbm9kZWAsIGFwcGx5aW5nIHRoZSBgcHJlZGljYXRlYCBmdW5jdGlvbi5cbiAqIEFsbCBub2RlcyBtYXRjaGluZyB0aGUgcHJlZGljYXRlIGZ1bmN0aW9uIGZyb20gYG5vZGVgIHRvIGxlYXZlcyB3aWxsIGJlXG4gKiByZXR1cm5lZC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXlbTm9kZV19XG4gKi9cbmZ1bmN0aW9uIG5vZGVXYWxrQWxsKG5vZGUsIHByZWRpY2F0ZSwgbWF0Y2hlcykge1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICBtYXRjaGVzID0gW107XG4gIH1cbiAgaWYgKHByZWRpY2F0ZShub2RlKSkge1xuICAgIG1hdGNoZXMucHVzaChub2RlKTtcbiAgfVxuICBpZiAobm9kZS5jaGlsZE5vZGVzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGVXYWxrQWxsKG5vZGUuY2hpbGROb2Rlc1tpXSwgcHJlZGljYXRlLCBtYXRjaGVzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIF9yZXZlcnNlTm9kZVdhbGtBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIG1hdGNoZXMgPSBbXTtcbiAgfVxuICBpZiAobm9kZS5jaGlsZE5vZGVzKSB7XG4gICAgZm9yICh2YXIgaSA9IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbm9kZVdhbGtBbGwobm9kZS5jaGlsZE5vZGVzW2ldLCBwcmVkaWNhdGUsIG1hdGNoZXMpO1xuICAgIH1cbiAgfVxuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gYG5vZGVXYWxrQWxsYCwgYnV0IG9ubHkgcmV0dXJucyBub2RlcyB0aGF0IGFyZSBlaXRoZXIgXG4gKiBhbmNlc3RvcnMgb3IgZWFybGllciBjb3VzaW5zL3NpYmxpbmdzIGluIHRoZSBkb2N1bWVudC5cbiAqXG4gKiBOb2RlcyBhcmUgcmV0dXJuZWQgaW4gcmV2ZXJzZSBkb2N1bWVudCBvcmRlciwgc3RhcnRpbmcgZnJvbSBgbm9kZWAuXG4gKi9cbmZ1bmN0aW9uIG5vZGVXYWxrQWxsUHJpb3Iobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIG1hdGNoZXMgPSBbXTtcbiAgfVxuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG5vZGUpO1xuICB9XG4gIC8vIFNlYXJjaCBvdXIgZWFybGllciBzaWJsaW5ncyBhbmQgdGhlaXIgZGVzY2VuZGVudHMuXG4gIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHtcbiAgICB2YXIgaWR4ID0gcGFyZW50LmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICB2YXIgc2libGluZ3MgPSBwYXJlbnQuY2hpbGROb2Rlcy5zbGljZSgwLCBpZHgpO1xuICAgIGZvciAodmFyIGkgPSBzaWJsaW5ncy5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIF9yZXZlcnNlTm9kZVdhbGtBbGwoc2libGluZ3NbaV0sIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gICAgfVxuICAgIG5vZGVXYWxrQWxsUHJpb3IocGFyZW50LCBwcmVkaWNhdGUsIG1hdGNoZXMpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gYG5vZGVXYWxrYCwgYnV0IG9ubHkgbWF0Y2hlcyBlbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtFbGVtZW50fVxuICovXG5mdW5jdGlvbiBxdWVyeShub2RlLCBwcmVkaWNhdGUpIHtcbiAgdmFyIGVsZW1lbnRQcmVkaWNhdGUgPSBBTkQoaXNFbGVtZW50LCBwcmVkaWNhdGUpO1xuICByZXR1cm4gbm9kZVdhbGsobm9kZSwgZWxlbWVudFByZWRpY2F0ZSk7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtBbGxgLCBidXQgb25seSBtYXRjaGVzIGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXlbRWxlbWVudF19XG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5QWxsKG5vZGUsIHByZWRpY2F0ZSwgbWF0Y2hlcykge1xuICB2YXIgZWxlbWVudFByZWRpY2F0ZSA9IEFORChpc0VsZW1lbnQsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBub2RlV2Fsa0FsbChub2RlLCBlbGVtZW50UHJlZGljYXRlLCBtYXRjaGVzKTtcbn1cblxuZnVuY3Rpb24gbmV3VGV4dE5vZGUodmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogJyN0ZXh0JyxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgcGFyZW50Tm9kZTogbnVsbFxuICB9O1xufVxuXG5mdW5jdGlvbiBuZXdDb21tZW50Tm9kZShjb21tZW50KSB7XG4gIHJldHVybiB7XG4gICAgbm9kZU5hbWU6ICcjY29tbWVudCcsXG4gICAgZGF0YTogY29tbWVudCxcbiAgICBwYXJlbnROb2RlOiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5ld0VsZW1lbnQodGFnTmFtZSwgbmFtZXNwYWNlKSB7XG4gIHJldHVybiB7XG4gICAgbm9kZU5hbWU6IHRhZ05hbWUsXG4gICAgdGFnTmFtZTogdGFnTmFtZSxcbiAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICBuYW1lc3BhY2VVUkk6IG5hbWVzcGFjZSB8fCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXG4gICAgYXR0cnM6IFtdLFxuICAgIHBhcmVudE5vZGU6IG51bGwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2Uob2xkTm9kZSwgbmV3Tm9kZSkge1xuICBpbnNlcnRCZWZvcmUob2xkTm9kZS5wYXJlbnROb2RlLCBvbGROb2RlLCBuZXdOb2RlKTtcbiAgcmVtb3ZlKG9sZE5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmUobm9kZSkge1xuICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50KSB7XG4gICAgdmFyIGlkeCA9IHBhcmVudC5jaGlsZE5vZGVzLmluZGV4T2Yobm9kZSk7XG4gICAgcGFyZW50LmNoaWxkTm9kZXMuc3BsaWNlKGlkeCwgMSk7XG4gIH1cbiAgbm9kZS5wYXJlbnROb2RlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudCwgb2xkTm9kZSwgbmV3Tm9kZSkge1xuICByZW1vdmUobmV3Tm9kZSk7XG4gIHZhciBpZHggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKG9sZE5vZGUpO1xuICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2UoaWR4LCAwLCBuZXdOb2RlKTtcbiAgbmV3Tm9kZS5wYXJlbnROb2RlID0gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBhcHBlbmQocGFyZW50LCBub2RlKSB7XG4gIHJlbW92ZShub2RlKTtcbiAgcGFyZW50LmNoaWxkTm9kZXMucHVzaChub2RlKTtcbiAgbm9kZS5wYXJlbnROb2RlID0gcGFyZW50O1xufVxuXG52YXIgcGFyc2U1ID0gcmVxdWlyZSgncGFyc2U1Jyk7XG5mdW5jdGlvbiBwYXJzZSh0ZXh0LCBvcHRpb25zKSB7XG4gIHZhciBwYXJzZXIgPSBuZXcgcGFyc2U1LlBhcnNlcihwYXJzZTUuVHJlZUFkYXB0ZXJzLmRlZmF1bHQsIG9wdGlvbnMpO1xuICByZXR1cm4gcGFyc2VyLnBhcnNlKHRleHQpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZyYWdtZW50KHRleHQpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyBwYXJzZTUuUGFyc2VyKCk7XG4gIHJldHVybiBwYXJzZXIucGFyc2VGcmFnbWVudCh0ZXh0KTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplKGFzdCkge1xuICB2YXIgc2VyaWFsaXplciA9IG5ldyBwYXJzZTUuU2VyaWFsaXplcigpO1xuICByZXR1cm4gc2VyaWFsaXplci5zZXJpYWxpemUoYXN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEF0dHJpYnV0ZTogZ2V0QXR0cmlidXRlLFxuICBoYXNBdHRyaWJ1dGU6IGhhc0F0dHJpYnV0ZSxcbiAgc2V0QXR0cmlidXRlOiBzZXRBdHRyaWJ1dGUsXG4gIHJlbW92ZUF0dHJpYnV0ZTogcmVtb3ZlQXR0cmlidXRlLFxuICBnZXRUZXh0Q29udGVudDogZ2V0VGV4dENvbnRlbnQsXG4gIHNldFRleHRDb250ZW50OiBzZXRUZXh0Q29udGVudCxcbiAgcmVtb3ZlOiByZW1vdmUsXG4gIHJlcGxhY2U6IHJlcGxhY2UsXG4gIGFwcGVuZDogYXBwZW5kLFxuICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgbm9ybWFsaXplOiBub3JtYWxpemUsXG4gIGlzRG9jdW1lbnQ6IGlzRG9jdW1lbnQsXG4gIGlzRG9jdW1lbnRGcmFnbWVudDogaXNEb2N1bWVudEZyYWdtZW50LFxuICBpc0VsZW1lbnQ6IGlzRWxlbWVudCxcbiAgaXNUZXh0Tm9kZTogaXNUZXh0Tm9kZSxcbiAgaXNDb21tZW50Tm9kZTogaXNDb21tZW50Tm9kZSxcbiAgcXVlcnk6IHF1ZXJ5LFxuICBxdWVyeUFsbDogcXVlcnlBbGwsXG4gIG5vZGVXYWxrOiBub2RlV2FsayxcbiAgbm9kZVdhbGtBbGw6IG5vZGVXYWxrQWxsLFxuICBub2RlV2Fsa0FsbFByaW9yOiBub2RlV2Fsa0FsbFByaW9yLFxuICB0cmVlTWFwOiB0cmVlTWFwLFxuICBwcmVkaWNhdGVzOiB7XG4gICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgIGhhc0F0dHI6IGhhc0F0dHIsXG4gICAgaGFzQXR0clZhbHVlOiBoYXNBdHRyVmFsdWUsXG4gICAgaGFzTWF0Y2hpbmdUYWdOYW1lOiBoYXNNYXRjaGluZ1RhZ05hbWUsXG4gICAgaGFzVGFnTmFtZTogaGFzVGFnTmFtZSxcbiAgICBoYXNUZXh0VmFsdWU6IGhhc1RleHRWYWx1ZSxcbiAgICBBTkQ6IEFORCxcbiAgICBPUjogT1IsXG4gICAgTk9UOiBOT1QsXG4gICAgcGFyZW50TWF0Y2hlczogcGFyZW50TWF0Y2hlc1xuICB9LFxuICBjb25zdHJ1Y3RvcnM6IHtcbiAgICB0ZXh0OiBuZXdUZXh0Tm9kZSxcbiAgICBjb21tZW50OiBuZXdDb21tZW50Tm9kZSxcbiAgICBlbGVtZW50OiBuZXdFbGVtZW50XG4gIH0sXG4gIHBhcnNlOiBwYXJzZSxcbiAgcGFyc2VGcmFnbWVudDogcGFyc2VGcmFnbWVudCxcbiAgc2VyaWFsaXplOiBzZXJpYWxpemVcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLlBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlcicpO1xyXG5leHBvcnRzLlNpbXBsZUFwaVBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3NpbXBsZV9hcGkvc2ltcGxlX2FwaV9wYXJzZXInKTtcclxuZXhwb3J0cy5UcmVlU2VyaWFsaXplciA9XHJcbmV4cG9ydHMuU2VyaWFsaXplciA9IHJlcXVpcmUoJy4vbGliL3NlcmlhbGl6YXRpb24vc2VyaWFsaXplcicpO1xyXG5leHBvcnRzLkpzRG9tUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvanNkb20vanNkb21fcGFyc2VyJyk7XHJcblxyXG5leHBvcnRzLlRyZWVBZGFwdGVycyA9IHtcclxuICAgIGRlZmF1bHQ6IHJlcXVpcmUoJy4vbGliL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxyXG4gICAgaHRtbHBhcnNlcjI6IHJlcXVpcmUoJy4vbGliL3RyZWVfYWRhcHRlcnMvaHRtbHBhcnNlcjInKVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbi8vQ29uc3RcbnZhciBWQUxJRF9ET0NUWVBFX05BTUUgPSAnaHRtbCcsXG4gICAgUVVJUktTX01PREVfU1lTVEVNX0lEID0gJ2h0dHA6Ly93d3cuaWJtLmNvbS9kYXRhL2R0ZC92MTEvaWJteGh0bWwxLXRyYW5zaXRpb25hbC5kdGQnLFxuICAgIFFVSVJLU19NT0RFX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFtcbiAgICAgICAgXCIrLy9zaWxtYXJpbC8vZHRkIGh0bWwgcHJvIHYwcjExIDE5OTcwMTAxLy9lblwiLFxuICAgICAgICBcIi0vL2FkdmFzb2Z0IGx0ZC8vZHRkIGh0bWwgMy4wIGFzd2VkaXQgKyBleHRlbnNpb25zLy9lblwiLFxuICAgICAgICBcIi0vL2FzLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDEvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMi8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjFlLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjAvL2VuLy9cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjIgZmluYWwvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4yLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMS8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMi8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy9lbi8vMy4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDAvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDAvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMS8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMS8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDMvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDMvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly9lbi8vMy4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW4vLzMuMFwiLFxuICAgICAgICBcIi0vL21ldHJpdXMvL2R0ZCBtZXRyaXVzIHByZXNlbnRhdGlvbmFsLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sIHN0cmljdC8vZW5cIixcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgdGFibGVzLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sIHN0cmljdC8vZW5cIixcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgdGFibGVzLy9lblwiLFxuICAgICAgICBcIi0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9uZXRzY2FwZSBjb21tLiBjb3JwLi8vZHRkIHN0cmljdCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL28ncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCAyLjAvL2VuXCIsXG4gICAgICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIDEuMC8vZW5cIixcbiAgICAgICAgXCItLy9zcHlnbGFzcy8vZHRkIGh0bWwgMi4wIGV4dGVuZGVkLy9lblwiLFxuICAgICAgICBcIi0vL3NxLy9kdGQgaHRtbCAyLjAgaG90bWV0YWwgKyBleHRlbnNpb25zLy9lblwiLFxuICAgICAgICBcIi0vL3N1biBtaWNyb3N5c3RlbXMgY29ycC4vL2R0ZCBob3RqYXZhIGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgc3RyaWN0IGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzIDE5OTUtMDMtMjQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjIgZHJhZnQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjIgZmluYWwvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjIvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjJzIGRyYWZ0Ly9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgNC4wIGZyYW1lc2V0Ly9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCAxOTk2MDcxMi8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCA5NzA0MjEvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgdzMgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy93M28vL2R0ZCB3MyBodG1sIDMuMC8vZW5cIixcbiAgICAgICAgXCItLy93M28vL2R0ZCB3MyBodG1sIDMuMC8vZW4vL1wiLFxuICAgICAgICBcIi0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sIDIuMC8vZW5cIixcbiAgICAgICAgXCItLy93ZWJ0ZWNocy8vZHRkIG1vemlsbGEgaHRtbC8vZW5cIlxuICAgIF0sXG4gICAgUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFtcbiAgICAgICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSBmcmFtZXNldC8vJyxcbiAgICAgICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLydcbiAgICBdLFxuICAgIFFVSVJLU19NT0RFX1BVQkxJQ19JRFMgPSBbXG4gICAgICAgICctLy93M28vL2R0ZCB3MyBodG1sIHN0cmljdCAzLjAvL2VuLy8nLFxuICAgICAgICAnLS93M2MvZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC9lbicsXG4gICAgICAgICdodG1sJ1xuICAgIF07XG5cblxuLy9VdGlsc1xuZnVuY3Rpb24gZW5xdW90ZURvY3R5cGVJZChpZCkge1xuICAgIHZhciBxdW90ZSA9IGlkLmluZGV4T2YoJ1wiJykgIT09IC0xID8gJ1xcJycgOiAnXCInO1xuXG4gICAgcmV0dXJuIHF1b3RlICsgaWQgKyBxdW90ZTtcbn1cblxuXG4vL0FQSVxuZXhwb3J0cy5pc1F1aXJrcyA9IGZ1bmN0aW9uIChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcbiAgICBpZiAobmFtZSAhPT0gVkFMSURfRE9DVFlQRV9OQU1FKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGlmIChzeXN0ZW1JZCAmJiBzeXN0ZW1JZC50b0xvd2VyQ2FzZSgpID09PSBRVUlSS1NfTU9ERV9TWVNURU1fSUQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKHB1YmxpY0lkICE9PSBudWxsKSB7XG4gICAgICAgIHB1YmxpY0lkID0gcHVibGljSWQudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoUVVJUktTX01PREVfUFVCTElDX0lEUy5pbmRleE9mKHB1YmxpY0lkKSA+IC0xKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgdmFyIHByZWZpeGVzID0gUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTO1xuXG4gICAgICAgIGlmIChzeXN0ZW1JZCA9PT0gbnVsbClcbiAgICAgICAgICAgIHByZWZpeGVzID0gcHJlZml4ZXMuY29uY2F0KFFVSVJLU19NT0RFX05PX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVMpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwdWJsaWNJZC5pbmRleE9mKHByZWZpeGVzW2ldKSA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuc2VyaWFsaXplQ29udGVudCA9IGZ1bmN0aW9uIChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcbiAgICB2YXIgc3RyID0gJyFET0NUWVBFICcgKyBuYW1lO1xuXG4gICAgaWYgKHB1YmxpY0lkICE9PSBudWxsKVxuICAgICAgICBzdHIgKz0gJyBQVUJMSUMgJyArIGVucXVvdGVEb2N0eXBlSWQocHVibGljSWQpO1xuXG4gICAgZWxzZSBpZiAoc3lzdGVtSWQgIT09IG51bGwpXG4gICAgICAgIHN0ciArPSAnIFNZU1RFTSc7XG5cbiAgICBpZiAoc3lzdGVtSWQgIT09IG51bGwpXG4gICAgICAgIHN0ciArPSAnICcgKyBlbnF1b3RlRG9jdHlwZUlkKHN5c3RlbUlkKTtcblxuICAgIHJldHVybiBzdHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcclxuICAgIEhUTUwgPSByZXF1aXJlKCcuL2h0bWwnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxyXG4gICAgTlMgPSBIVE1MLk5BTUVTUEFDRVMsXHJcbiAgICBBVFRSUyA9IEhUTUwuQVRUUlM7XHJcblxyXG5cclxuLy9NSU1FIHR5cGVzXHJcbnZhciBNSU1FX1RZUEVTID0ge1xyXG4gICAgVEVYVF9IVE1MOiAndGV4dC9odG1sJyxcclxuICAgIEFQUExJQ0FUSU9OX1hNTDogJ2FwcGxpY2F0aW9uL3hodG1sK3htbCdcclxufTtcclxuXHJcbi8vQXR0cmlidXRlc1xyXG52YXIgREVGSU5JVElPTl9VUkxfQVRUUiA9ICdkZWZpbml0aW9udXJsJyxcclxuICAgIEFESlVTVEVEX0RFRklOSVRJT05fVVJMX0FUVFIgPSAnZGVmaW5pdGlvblVSTCcsXHJcbiAgICBTVkdfQVRUUlNfQURKVVNUTUVOVF9NQVAgPSB7XHJcbiAgICAgICAgJ2F0dHJpYnV0ZW5hbWUnOiAnYXR0cmlidXRlTmFtZScsXHJcbiAgICAgICAgJ2F0dHJpYnV0ZXR5cGUnOiAnYXR0cmlidXRlVHlwZScsXHJcbiAgICAgICAgJ2Jhc2VmcmVxdWVuY3knOiAnYmFzZUZyZXF1ZW5jeScsXHJcbiAgICAgICAgJ2Jhc2Vwcm9maWxlJzogJ2Jhc2VQcm9maWxlJyxcclxuICAgICAgICAnY2FsY21vZGUnOiAnY2FsY01vZGUnLFxyXG4gICAgICAgICdjbGlwcGF0aHVuaXRzJzogJ2NsaXBQYXRoVW5pdHMnLFxyXG4gICAgICAgICdjb250ZW50c2NyaXB0dHlwZSc6ICdjb250ZW50U2NyaXB0VHlwZScsXHJcbiAgICAgICAgJ2NvbnRlbnRzdHlsZXR5cGUnOiAnY29udGVudFN0eWxlVHlwZScsXHJcbiAgICAgICAgJ2RpZmZ1c2Vjb25zdGFudCc6ICdkaWZmdXNlQ29uc3RhbnQnLFxyXG4gICAgICAgICdlZGdlbW9kZSc6ICdlZGdlTW9kZScsXHJcbiAgICAgICAgJ2V4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQnOiAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsXHJcbiAgICAgICAgJ2ZpbHRlcnJlcyc6ICdmaWx0ZXJSZXMnLFxyXG4gICAgICAgICdmaWx0ZXJ1bml0cyc6ICdmaWx0ZXJVbml0cycsXHJcbiAgICAgICAgJ2dseXBocmVmJzogJ2dseXBoUmVmJyxcclxuICAgICAgICAnZ3JhZGllbnR0cmFuc2Zvcm0nOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxyXG4gICAgICAgICdncmFkaWVudHVuaXRzJzogJ2dyYWRpZW50VW5pdHMnLFxyXG4gICAgICAgICdrZXJuZWxtYXRyaXgnOiAna2VybmVsTWF0cml4JyxcclxuICAgICAgICAna2VybmVsdW5pdGxlbmd0aCc6ICdrZXJuZWxVbml0TGVuZ3RoJyxcclxuICAgICAgICAna2V5cG9pbnRzJzogJ2tleVBvaW50cycsXHJcbiAgICAgICAgJ2tleXNwbGluZXMnOiAna2V5U3BsaW5lcycsXHJcbiAgICAgICAgJ2tleXRpbWVzJzogJ2tleVRpbWVzJyxcclxuICAgICAgICAnbGVuZ3RoYWRqdXN0JzogJ2xlbmd0aEFkanVzdCcsXHJcbiAgICAgICAgJ2xpbWl0aW5nY29uZWFuZ2xlJzogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcclxuICAgICAgICAnbWFya2VyaGVpZ2h0JzogJ21hcmtlckhlaWdodCcsXHJcbiAgICAgICAgJ21hcmtlcnVuaXRzJzogJ21hcmtlclVuaXRzJyxcclxuICAgICAgICAnbWFya2Vyd2lkdGgnOiAnbWFya2VyV2lkdGgnLFxyXG4gICAgICAgICdtYXNrY29udGVudHVuaXRzJzogJ21hc2tDb250ZW50VW5pdHMnLFxyXG4gICAgICAgICdtYXNrdW5pdHMnOiAnbWFza1VuaXRzJyxcclxuICAgICAgICAnbnVtb2N0YXZlcyc6ICdudW1PY3RhdmVzJyxcclxuICAgICAgICAncGF0aGxlbmd0aCc6ICdwYXRoTGVuZ3RoJyxcclxuICAgICAgICAncGF0dGVybmNvbnRlbnR1bml0cyc6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcclxuICAgICAgICAncGF0dGVybnRyYW5zZm9ybSc6ICdwYXR0ZXJuVHJhbnNmb3JtJyxcclxuICAgICAgICAncGF0dGVybnVuaXRzJzogJ3BhdHRlcm5Vbml0cycsXHJcbiAgICAgICAgJ3BvaW50c2F0eCc6ICdwb2ludHNBdFgnLFxyXG4gICAgICAgICdwb2ludHNhdHknOiAncG9pbnRzQXRZJyxcclxuICAgICAgICAncG9pbnRzYXR6JzogJ3BvaW50c0F0WicsXHJcbiAgICAgICAgJ3ByZXNlcnZlYWxwaGEnOiAncHJlc2VydmVBbHBoYScsXHJcbiAgICAgICAgJ3ByZXNlcnZlYXNwZWN0cmF0aW8nOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXHJcbiAgICAgICAgJ3ByaW1pdGl2ZXVuaXRzJzogJ3ByaW1pdGl2ZVVuaXRzJyxcclxuICAgICAgICAncmVmeCc6ICdyZWZYJyxcclxuICAgICAgICAncmVmeSc6ICdyZWZZJyxcclxuICAgICAgICAncmVwZWF0Y291bnQnOiAncmVwZWF0Q291bnQnLFxyXG4gICAgICAgICdyZXBlYXRkdXInOiAncmVwZWF0RHVyJyxcclxuICAgICAgICAncmVxdWlyZWRleHRlbnNpb25zJzogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXHJcbiAgICAgICAgJ3JlcXVpcmVkZmVhdHVyZXMnOiAncmVxdWlyZWRGZWF0dXJlcycsXHJcbiAgICAgICAgJ3NwZWN1bGFyY29uc3RhbnQnOiAnc3BlY3VsYXJDb25zdGFudCcsXHJcbiAgICAgICAgJ3NwZWN1bGFyZXhwb25lbnQnOiAnc3BlY3VsYXJFeHBvbmVudCcsXHJcbiAgICAgICAgJ3NwcmVhZG1ldGhvZCc6ICdzcHJlYWRNZXRob2QnLFxyXG4gICAgICAgICdzdGFydG9mZnNldCc6ICdzdGFydE9mZnNldCcsXHJcbiAgICAgICAgJ3N0ZGRldmlhdGlvbic6ICdzdGREZXZpYXRpb24nLFxyXG4gICAgICAgICdzdGl0Y2h0aWxlcyc6ICdzdGl0Y2hUaWxlcycsXHJcbiAgICAgICAgJ3N1cmZhY2VzY2FsZSc6ICdzdXJmYWNlU2NhbGUnLFxyXG4gICAgICAgICdzeXN0ZW1sYW5ndWFnZSc6ICdzeXN0ZW1MYW5ndWFnZScsXHJcbiAgICAgICAgJ3RhYmxldmFsdWVzJzogJ3RhYmxlVmFsdWVzJyxcclxuICAgICAgICAndGFyZ2V0eCc6ICd0YXJnZXRYJyxcclxuICAgICAgICAndGFyZ2V0eSc6ICd0YXJnZXRZJyxcclxuICAgICAgICAndGV4dGxlbmd0aCc6ICd0ZXh0TGVuZ3RoJyxcclxuICAgICAgICAndmlld2JveCc6ICd2aWV3Qm94JyxcclxuICAgICAgICAndmlld3RhcmdldCc6ICd2aWV3VGFyZ2V0JyxcclxuICAgICAgICAneGNoYW5uZWxzZWxlY3Rvcic6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcclxuICAgICAgICAneWNoYW5uZWxzZWxlY3Rvcic6ICd5Q2hhbm5lbFNlbGVjdG9yJyxcclxuICAgICAgICAnem9vbWFuZHBhbic6ICd6b29tQW5kUGFuJ1xyXG4gICAgfSxcclxuICAgIFhNTF9BVFRSU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICAgICAneGxpbms6YWN0dWF0ZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdhY3R1YXRlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOmFyY3JvbGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnYXJjcm9sZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazpocmVmJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2hyZWYnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6cm9sZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdyb2xlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnNob3cnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnc2hvdycsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazp0aXRsZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICd0aXRsZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazp0eXBlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3R5cGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneG1sOmJhc2UnOiB7cHJlZml4OiAneG1sJywgbmFtZTogJ2Jhc2UnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbDpsYW5nJzoge3ByZWZpeDogJ3htbCcsIG5hbWU6ICdsYW5nJywgbmFtZXNwYWNlOiBOUy5YTUx9LFxyXG4gICAgICAgICd4bWw6c3BhY2UnOiB7cHJlZml4OiAneG1sJywgbmFtZTogJ3NwYWNlJywgbmFtZXNwYWNlOiBOUy5YTUx9LFxyXG4gICAgICAgICd4bWxucyc6IHtwcmVmaXg6ICcnLCBuYW1lOiAneG1sbnMnLCBuYW1lc3BhY2U6IE5TLlhNTE5TfSxcclxuICAgICAgICAneG1sbnM6eGxpbmsnOiB7cHJlZml4OiAneG1sbnMnLCBuYW1lOiAneGxpbmsnLCBuYW1lc3BhY2U6IE5TLlhNTE5TfVxyXG5cclxuICAgIH07XHJcblxyXG4vL1NWRyB0YWcgbmFtZXMgYWRqdXN0bWVudCBtYXBcclxudmFyIFNWR19UQUdfTkFNRVNfQURKVVNUTUVOVF9NQVAgPSB7XHJcbiAgICAnYWx0Z2x5cGgnOiAnYWx0R2x5cGgnLFxyXG4gICAgJ2FsdGdseXBoZGVmJzogJ2FsdEdseXBoRGVmJyxcclxuICAgICdhbHRnbHlwaGl0ZW0nOiAnYWx0R2x5cGhJdGVtJyxcclxuICAgICdhbmltYXRlY29sb3InOiAnYW5pbWF0ZUNvbG9yJyxcclxuICAgICdhbmltYXRlbW90aW9uJzogJ2FuaW1hdGVNb3Rpb24nLFxyXG4gICAgJ2FuaW1hdGV0cmFuc2Zvcm0nOiAnYW5pbWF0ZVRyYW5zZm9ybScsXHJcbiAgICAnY2xpcHBhdGgnOiAnY2xpcFBhdGgnLFxyXG4gICAgJ2ZlYmxlbmQnOiAnZmVCbGVuZCcsXHJcbiAgICAnZmVjb2xvcm1hdHJpeCc6ICdmZUNvbG9yTWF0cml4JyxcclxuICAgICdmZWNvbXBvbmVudHRyYW5zZmVyJzogJ2ZlQ29tcG9uZW50VHJhbnNmZXInLFxyXG4gICAgJ2ZlY29tcG9zaXRlJzogJ2ZlQ29tcG9zaXRlJyxcclxuICAgICdmZWNvbnZvbHZlbWF0cml4JzogJ2ZlQ29udm9sdmVNYXRyaXgnLFxyXG4gICAgJ2ZlZGlmZnVzZWxpZ2h0aW5nJzogJ2ZlRGlmZnVzZUxpZ2h0aW5nJyxcclxuICAgICdmZWRpc3BsYWNlbWVudG1hcCc6ICdmZURpc3BsYWNlbWVudE1hcCcsXHJcbiAgICAnZmVkaXN0YW50bGlnaHQnOiAnZmVEaXN0YW50TGlnaHQnLFxyXG4gICAgJ2ZlZmxvb2QnOiAnZmVGbG9vZCcsXHJcbiAgICAnZmVmdW5jYSc6ICdmZUZ1bmNBJyxcclxuICAgICdmZWZ1bmNiJzogJ2ZlRnVuY0InLFxyXG4gICAgJ2ZlZnVuY2cnOiAnZmVGdW5jRycsXHJcbiAgICAnZmVmdW5jcic6ICdmZUZ1bmNSJyxcclxuICAgICdmZWdhdXNzaWFuYmx1cic6ICdmZUdhdXNzaWFuQmx1cicsXHJcbiAgICAnZmVpbWFnZSc6ICdmZUltYWdlJyxcclxuICAgICdmZW1lcmdlJzogJ2ZlTWVyZ2UnLFxyXG4gICAgJ2ZlbWVyZ2Vub2RlJzogJ2ZlTWVyZ2VOb2RlJyxcclxuICAgICdmZW1vcnBob2xvZ3knOiAnZmVNb3JwaG9sb2d5JyxcclxuICAgICdmZW9mZnNldCc6ICdmZU9mZnNldCcsXHJcbiAgICAnZmVwb2ludGxpZ2h0JzogJ2ZlUG9pbnRMaWdodCcsXHJcbiAgICAnZmVzcGVjdWxhcmxpZ2h0aW5nJzogJ2ZlU3BlY3VsYXJMaWdodGluZycsXHJcbiAgICAnZmVzcG90bGlnaHQnOiAnZmVTcG90TGlnaHQnLFxyXG4gICAgJ2ZldGlsZSc6ICdmZVRpbGUnLFxyXG4gICAgJ2ZldHVyYnVsZW5jZSc6ICdmZVR1cmJ1bGVuY2UnLFxyXG4gICAgJ2ZvcmVpZ25vYmplY3QnOiAnZm9yZWlnbk9iamVjdCcsXHJcbiAgICAnZ2x5cGhyZWYnOiAnZ2x5cGhSZWYnLFxyXG4gICAgJ2xpbmVhcmdyYWRpZW50JzogJ2xpbmVhckdyYWRpZW50JyxcclxuICAgICdyYWRpYWxncmFkaWVudCc6ICdyYWRpYWxHcmFkaWVudCcsXHJcbiAgICAndGV4dHBhdGgnOiAndGV4dFBhdGgnXHJcbn07XHJcblxyXG4vL1RhZ3MgdGhhdCBjYXVzZXMgZXhpdCBmcm9tIGZvcmVpZ24gY29udGVudFxyXG52YXIgRVhJVFNfRk9SRUlHTl9DT05URU5UID0ge307XHJcblxyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJJR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CTE9DS1FVT1RFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJPRFldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQlJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQ0VOVEVSXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkNPREVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRERdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRElWXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkRMXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkRUXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkVNXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkVNQkVEXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkgxXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkgyXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkgzXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkg0XSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkg1XSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkg2XSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkhFQURdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSFJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5JTUddID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTEldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTElTVElOR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5NRU5VXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk1FVEFdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTk9CUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5PTF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5QXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlBSRV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5SVUJZXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU01BTExdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1BBTl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVFJPTkddID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1RSSUtFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNVQl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVVBdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuVEFCTEVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuVFRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuVV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5VTF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5WQVJdID0gdHJ1ZTtcclxuXHJcbi8vQ2hlY2sgZXhpdCBmcm9tIGZvcmVpZ24gY29udGVudFxyXG5leHBvcnRzLmNhdXNlc0V4aXQgPSBmdW5jdGlvbiAoc3RhcnRUYWdUb2tlbikge1xyXG4gICAgdmFyIHRuID0gc3RhcnRUYWdUb2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5GT05UICYmIChUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHN0YXJ0VGFnVG9rZW4sIEFUVFJTLkNPTE9SKSAhPT0gbnVsbCB8fFxyXG4gICAgICAgIFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuU0laRSkgIT09IG51bGwgfHxcclxuICAgICAgICBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHN0YXJ0VGFnVG9rZW4sIEFUVFJTLkZBQ0UpICE9PSBudWxsKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBFWElUU19GT1JFSUdOX0NPTlRFTlRbdG5dO1xyXG59O1xyXG5cclxuLy9Ub2tlbiBhZGp1c3RtZW50c1xyXG5leHBvcnRzLmFkanVzdFRva2VuTWF0aE1MQXR0cnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodG9rZW4uYXR0cnNbaV0ubmFtZSA9PT0gREVGSU5JVElPTl9VUkxfQVRUUikge1xyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gQURKVVNURURfREVGSU5JVElPTl9VUkxfQVRUUjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5hZGp1c3RUb2tlblNWR0F0dHJzID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFkanVzdGVkQXR0ck5hbWUgPSBTVkdfQVRUUlNfQURKVVNUTUVOVF9NQVBbdG9rZW4uYXR0cnNbaV0ubmFtZV07XHJcblxyXG4gICAgICAgIGlmIChhZGp1c3RlZEF0dHJOYW1lKVxyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyTmFtZTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5YTUxBdHRycyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBhZGp1c3RlZEF0dHJFbnRyeSA9IFhNTF9BVFRSU19BREpVU1RNRU5UX01BUFt0b2tlbi5hdHRyc1tpXS5uYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKGFkanVzdGVkQXR0ckVudHJ5KSB7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLnByZWZpeCA9IGFkanVzdGVkQXR0ckVudHJ5LnByZWZpeDtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZSA9IGFkanVzdGVkQXR0ckVudHJ5Lm5hbWU7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWVzcGFjZSA9IGFkanVzdGVkQXR0ckVudHJ5Lm5hbWVzcGFjZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmFkanVzdFRva2VuU1ZHVGFnTmFtZSA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgdmFyIGFkanVzdGVkVGFnTmFtZSA9IFNWR19UQUdfTkFNRVNfQURKVVNUTUVOVF9NQVBbdG9rZW4udGFnTmFtZV07XHJcblxyXG4gICAgaWYgKGFkanVzdGVkVGFnTmFtZSlcclxuICAgICAgICB0b2tlbi50YWdOYW1lID0gYWRqdXN0ZWRUYWdOYW1lO1xyXG59O1xyXG5cclxuLy9JbnRlZ3JhdGlvbiBwb2ludHNcclxuZXhwb3J0cy5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKHRuLCBucykge1xyXG4gICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUwgJiYgKHRuID09PSAkLk1JIHx8IHRuID09PSAkLk1PIHx8IHRuID09PSAkLk1OIHx8IHRuID09PSAkLk1TIHx8IHRuID09PSAkLk1URVhUKTtcclxufTtcclxuXHJcbmV4cG9ydHMuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uICh0biwgbnMsIGF0dHJzKSB7XHJcbiAgICBpZiAobnMgPT09IE5TLk1BVEhNTCAmJiB0biA9PT0gJC5BTk5PVEFUSU9OX1hNTCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWUgPT09IEFUVFJTLkVOQ09ESU5HKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhdHRyc1tpXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gTUlNRV9UWVBFUy5URVhUX0hUTUwgfHwgdmFsdWUgPT09IE1JTUVfVFlQRVMuQVBQTElDQVRJT05fWE1MO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBucyA9PT0gTlMuU1ZHICYmICh0biA9PT0gJC5GT1JFSUdOX09CSkVDVCB8fCB0biA9PT0gJC5ERVNDIHx8IHRuID09PSAkLlRJVExFKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIE5TID0gZXhwb3J0cy5OQU1FU1BBQ0VTID0ge1xyXG4gICAgSFRNTDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLFxyXG4gICAgTUFUSE1MOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCcsXHJcbiAgICBTVkc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXHJcbiAgICBYTElOSzogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLFxyXG4gICAgWE1MOiAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJyxcclxuICAgIFhNTE5TOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nXHJcbn07XHJcblxyXG5leHBvcnRzLkFUVFJTID0ge1xyXG4gICAgVFlQRTogJ3R5cGUnLFxyXG4gICAgQUNUSU9OOiAnYWN0aW9uJyxcclxuICAgIEVOQ09ESU5HOiAnZW5jb2RpbmcnLFxyXG4gICAgUFJPTVBUOiAncHJvbXB0JyxcclxuICAgIE5BTUU6ICduYW1lJyxcclxuICAgIENPTE9SOiAnY29sb3InLFxyXG4gICAgRkFDRTogJ2ZhY2UnLFxyXG4gICAgU0laRTogJ3NpemUnXHJcbn07XHJcblxyXG52YXIgJCA9IGV4cG9ydHMuVEFHX05BTUVTID0ge1xyXG4gICAgQTogJ2EnLFxyXG4gICAgQUREUkVTUzogJ2FkZHJlc3MnLFxyXG4gICAgQU5OT1RBVElPTl9YTUw6ICdhbm5vdGF0aW9uLXhtbCcsXHJcbiAgICBBUFBMRVQ6ICdhcHBsZXQnLFxyXG4gICAgQVJFQTogJ2FyZWEnLFxyXG4gICAgQVJUSUNMRTogJ2FydGljbGUnLFxyXG4gICAgQVNJREU6ICdhc2lkZScsXHJcblxyXG4gICAgQjogJ2InLFxyXG4gICAgQkFTRTogJ2Jhc2UnLFxyXG4gICAgQkFTRUZPTlQ6ICdiYXNlZm9udCcsXHJcbiAgICBCR1NPVU5EOiAnYmdzb3VuZCcsXHJcbiAgICBCSUc6ICdiaWcnLFxyXG4gICAgQkxPQ0tRVU9URTogJ2Jsb2NrcXVvdGUnLFxyXG4gICAgQk9EWTogJ2JvZHknLFxyXG4gICAgQlI6ICdicicsXHJcbiAgICBCVVRUT046ICdidXR0b24nLFxyXG5cclxuICAgIENBUFRJT046ICdjYXB0aW9uJyxcclxuICAgIENFTlRFUjogJ2NlbnRlcicsXHJcbiAgICBDT0RFOiAnY29kZScsXHJcbiAgICBDT0w6ICdjb2wnLFxyXG4gICAgQ09MR1JPVVA6ICdjb2xncm91cCcsXHJcbiAgICBDT01NQU5EOiAnY29tbWFuZCcsXHJcblxyXG4gICAgREQ6ICdkZCcsXHJcbiAgICBERVNDOiAnZGVzYycsXHJcbiAgICBERVRBSUxTOiAnZGV0YWlscycsXHJcbiAgICBESUFMT0c6ICdkaWFsb2cnLFxyXG4gICAgRElSOiAnZGlyJyxcclxuICAgIERJVjogJ2RpdicsXHJcbiAgICBETDogJ2RsJyxcclxuICAgIERUOiAnZHQnLFxyXG5cclxuICAgIEVNOiAnZW0nLFxyXG4gICAgRU1CRUQ6ICdlbWJlZCcsXHJcblxyXG4gICAgRklFTERTRVQ6ICdmaWVsZHNldCcsXHJcbiAgICBGSUdDQVBUSU9OOiAnZmlnY2FwdGlvbicsXHJcbiAgICBGSUdVUkU6ICdmaWd1cmUnLFxyXG4gICAgRk9OVDogJ2ZvbnQnLFxyXG4gICAgRk9PVEVSOiAnZm9vdGVyJyxcclxuICAgIEZPUkVJR05fT0JKRUNUOiAnZm9yZWlnbk9iamVjdCcsXHJcbiAgICBGT1JNOiAnZm9ybScsXHJcbiAgICBGUkFNRTogJ2ZyYW1lJyxcclxuICAgIEZSQU1FU0VUOiAnZnJhbWVzZXQnLFxyXG5cclxuICAgIEgxOiAnaDEnLFxyXG4gICAgSDI6ICdoMicsXHJcbiAgICBIMzogJ2gzJyxcclxuICAgIEg0OiAnaDQnLFxyXG4gICAgSDU6ICdoNScsXHJcbiAgICBINjogJ2g2JyxcclxuICAgIEhFQUQ6ICdoZWFkJyxcclxuICAgIEhFQURFUjogJ2hlYWRlcicsXHJcbiAgICBIR1JPVVA6ICdoZ3JvdXAnLFxyXG4gICAgSFI6ICdocicsXHJcbiAgICBIVE1MOiAnaHRtbCcsXHJcblxyXG4gICAgSTogJ2knLFxyXG4gICAgSU1HOiAnaW1nJyxcclxuICAgIElNQUdFOiAnaW1hZ2UnLFxyXG4gICAgSU5QVVQ6ICdpbnB1dCcsXHJcbiAgICBJRlJBTUU6ICdpZnJhbWUnLFxyXG4gICAgSVNJTkRFWDogJ2lzaW5kZXgnLFxyXG5cclxuICAgIEtFWUdFTjogJ2tleWdlbicsXHJcblxyXG4gICAgTEFCRUw6ICdsYWJlbCcsXHJcbiAgICBMSTogJ2xpJyxcclxuICAgIExJTks6ICdsaW5rJyxcclxuICAgIExJU1RJTkc6ICdsaXN0aW5nJyxcclxuXHJcbiAgICBNQUlOOiAnbWFpbicsXHJcbiAgICBNQUxJR05NQVJLOiAnbWFsaWdubWFyaycsXHJcbiAgICBNQVJRVUVFOiAnbWFycXVlZScsXHJcbiAgICBNQVRIOiAnbWF0aCcsXHJcbiAgICBNRU5VOiAnbWVudScsXHJcbiAgICBNRU5VSVRFTTogJ21lbnVpdGVtJyxcclxuICAgIE1FVEE6ICdtZXRhJyxcclxuICAgIE1HTFlQSDogJ21nbHlwaCcsXHJcbiAgICBNSTogJ21pJyxcclxuICAgIE1POiAnbW8nLFxyXG4gICAgTU46ICdtbicsXHJcbiAgICBNUzogJ21zJyxcclxuICAgIE1URVhUOiAnbXRleHQnLFxyXG5cclxuICAgIE5BVjogJ25hdicsXHJcbiAgICBOT0JSOiAnbm9icicsXHJcbiAgICBOT0ZSQU1FUzogJ25vZnJhbWVzJyxcclxuICAgIE5PRU1CRUQ6ICdub2VtYmVkJyxcclxuICAgIE5PU0NSSVBUOiAnbm9zY3JpcHQnLFxyXG5cclxuICAgIE9CSkVDVDogJ29iamVjdCcsXHJcbiAgICBPTDogJ29sJyxcclxuICAgIE9QVEdST1VQOiAnb3B0Z3JvdXAnLFxyXG4gICAgT1BUSU9OOiAnb3B0aW9uJyxcclxuXHJcbiAgICBQOiAncCcsXHJcbiAgICBQQVJBTTogJ3BhcmFtJyxcclxuICAgIFBMQUlOVEVYVDogJ3BsYWludGV4dCcsXHJcbiAgICBQUkU6ICdwcmUnLFxyXG5cclxuICAgIFJQOiAncnAnLFxyXG4gICAgUlQ6ICdydCcsXHJcbiAgICBSVUJZOiAncnVieScsXHJcblxyXG4gICAgUzogJ3MnLFxyXG4gICAgU0NSSVBUOiAnc2NyaXB0JyxcclxuICAgIFNFQ1RJT046ICdzZWN0aW9uJyxcclxuICAgIFNFTEVDVDogJ3NlbGVjdCcsXHJcbiAgICBTT1VSQ0U6ICdzb3VyY2UnLFxyXG4gICAgU01BTEw6ICdzbWFsbCcsXHJcbiAgICBTUEFOOiAnc3BhbicsXHJcbiAgICBTVFJJS0U6ICdzdHJpa2UnLFxyXG4gICAgU1RST05HOiAnc3Ryb25nJyxcclxuICAgIFNUWUxFOiAnc3R5bGUnLFxyXG4gICAgU1VCOiAnc3ViJyxcclxuICAgIFNVTU1BUlk6ICdzdW1tYXJ5JyxcclxuICAgIFNVUDogJ3N1cCcsXHJcblxyXG4gICAgVEFCTEU6ICd0YWJsZScsXHJcbiAgICBUQk9EWTogJ3Rib2R5JyxcclxuICAgIFRFTVBMQVRFOiAndGVtcGxhdGUnLFxyXG4gICAgVEVYVEFSRUE6ICd0ZXh0YXJlYScsXHJcbiAgICBURk9PVDogJ3Rmb290JyxcclxuICAgIFREOiAndGQnLFxyXG4gICAgVEg6ICd0aCcsXHJcbiAgICBUSEVBRDogJ3RoZWFkJyxcclxuICAgIFRJVExFOiAndGl0bGUnLFxyXG4gICAgVFI6ICd0cicsXHJcbiAgICBUUkFDSzogJ3RyYWNrJyxcclxuICAgIFRUOiAndHQnLFxyXG5cclxuICAgIFU6ICd1JyxcclxuICAgIFVMOiAndWwnLFxyXG5cclxuICAgIFNWRzogJ3N2ZycsXHJcblxyXG4gICAgVkFSOiAndmFyJyxcclxuXHJcbiAgICBXQlI6ICd3YnInLFxyXG5cclxuICAgIFhNUDogJ3htcCdcclxufTtcclxuXHJcbnZhciBTUEVDSUFMX0VMRU1FTlRTID0gZXhwb3J0cy5TUEVDSUFMX0VMRU1FTlRTID0ge307XHJcblxyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdID0ge307XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5BRERSRVNTXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5BUFBMRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFSRUFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFSVElDTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFTSURFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CQVNFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CQVNFRk9OVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQkdTT1VORF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQkxPQ0tRVU9URV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQk9EWV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQlJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJVVFRPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ0FQVElPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ0VOVEVSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DT0xdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkNPTEdST1VQXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ERF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuREVUQUlMU10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRElSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ESVZdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRMXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5EVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRU1CRURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJRUxEU0VUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GSUdDQVBUSU9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GSUdVUkVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZPT1RFUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRk9STV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRlJBTUVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZSQU1FU0VUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IMV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkgzXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5INF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkg2XSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IRUFEXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IRUFERVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhHUk9VUF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSFJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhUTUxdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLklGUkFNRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSU1HXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JTlBVVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSVNJTkRFWF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTEldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkxJTktdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkxJU1RJTkddID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1BSU5dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1BUlFVRUVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1FTlVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1FTlVJVEVNXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5NRVRBXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5OQVZdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5PRU1CRURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5PRlJBTUVTXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5OT1NDUklQVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuT0JKRUNUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5PTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUEFSQU1dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlBMQUlOVEVYVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUFJFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TQ1JJUFRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNFQ1RJT05dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNFTEVDVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU09VUkNFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TVFlMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU1VNTUFSWV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEFCTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRCT0RZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEVNUExBVEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRFWFRBUkVBXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URk9PVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEhdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRIRUFEXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5USVRMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVFJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRSQUNLXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5VTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuV0JSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5YTVBdID0gdHJ1ZTtcclxuXHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXSA9IHt9O1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NSV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NT10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NU10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5NVEVYVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF1bJC5BTk5PVEFUSU9OX1hNTF0gPSB0cnVlO1xyXG5cclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddID0ge307XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuU1ZHXVskLlRJVExFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuU1ZHXVskLkZPUkVJR05fT0JKRUNUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuU1ZHXVskLkRFU0NdID0gdHJ1ZTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5SRVBMQUNFTUVOVF9DSEFSQUNURVIgPSAnXFx1RkZGRCc7XHJcblxyXG5leHBvcnRzLkNPREVfUE9JTlRTID0ge1xyXG4gICAgRU9GOiAtMSxcclxuICAgIE5VTEw6IDB4MDAsXHJcbiAgICBUQUJVTEFUSU9OOiAweDA5LFxyXG4gICAgQ0FSUklBR0VfUkVUVVJOOiAweDBELFxyXG4gICAgTElORV9GRUVEOiAweDBBLFxyXG4gICAgRk9STV9GRUVEOiAweDBDLFxyXG4gICAgU1BBQ0U6IDB4MjAsXHJcbiAgICBFWENMQU1BVElPTl9NQVJLOiAweDIxLFxyXG4gICAgUVVPVEFUSU9OX01BUks6IDB4MjIsXHJcbiAgICBOVU1CRVJfU0lHTjogMHgyMyxcclxuICAgIEFNUEVSU0FORDogMHgyNixcclxuICAgIEFQT1NUUk9QSEU6IDB4MjcsXHJcbiAgICBIWVBIRU5fTUlOVVM6IDB4MkQsXHJcbiAgICBTT0xJRFVTOiAweDJGLFxyXG4gICAgRElHSVRfMDogMHgzMCxcclxuICAgIERJR0lUXzk6IDB4MzksXHJcbiAgICBTRU1JQ09MT046IDB4M0IsXHJcbiAgICBMRVNTX1RIQU5fU0lHTjogMHgzQyxcclxuICAgIEVRVUFMU19TSUdOOiAweDNELFxyXG4gICAgR1JFQVRFUl9USEFOX1NJR046IDB4M0UsXHJcbiAgICBRVUVTVElPTl9NQVJLOiAweDNGLFxyXG4gICAgTEFUSU5fQ0FQSVRBTF9BOiAweDQxLFxyXG4gICAgTEFUSU5fQ0FQSVRBTF9GOiAweDQ2LFxyXG4gICAgTEFUSU5fQ0FQSVRBTF9YOiAweDU4LFxyXG4gICAgTEFUSU5fQ0FQSVRBTF9aOiAweDVBLFxyXG4gICAgR1JBVkVfQUNDRU5UOiAweDYwLFxyXG4gICAgTEFUSU5fU01BTExfQTogMHg2MSxcclxuICAgIExBVElOX1NNQUxMX0Y6IDB4NjYsXHJcbiAgICBMQVRJTl9TTUFMTF9YOiAweDc4LFxyXG4gICAgTEFUSU5fU01BTExfWjogMHg3QSxcclxuICAgIEJPTTogMHhGRUZGLFxyXG4gICAgUkVQTEFDRU1FTlRfQ0hBUkFDVEVSOiAweEZGRkRcclxufTtcclxuXHJcbmV4cG9ydHMuQ09ERV9QT0lOVF9TRVFVRU5DRVMgPSB7XHJcbiAgICBEQVNIX0RBU0hfU1RSSU5HOiBbMHgyRCwgMHgyRF0sIC8vLS1cclxuICAgIERPQ1RZUEVfU1RSSU5HOiBbMHg0NCwgMHg0RiwgMHg0MywgMHg1NCwgMHg1OSwgMHg1MCwgMHg0NV0sIC8vRE9DVFlQRVxyXG4gICAgQ0RBVEFfU1RBUlRfU1RSSU5HOiBbMHg1QiwgMHg0MywgMHg0NCwgMHg0MSwgMHg1NCwgMHg0MSwgMHg1Ql0sIC8vW0NEQVRBW1xyXG4gICAgQ0RBVEFfRU5EX1NUUklORzogWzB4NUQsIDB4NUQsIDB4M0VdLCAvL11dPlxyXG4gICAgU0NSSVBUX1NUUklORzogWzB4NzMsIDB4NjMsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzRdLCAvL3NjcmlwdFxyXG4gICAgUFVCTElDX1NUUklORzogWzB4NTAsIDB4NTUsIDB4NDIsIDB4NEMsIDB4NDksIDB4NDNdLCAvL1BVQkxJQ1xyXG4gICAgU1lTVEVNX1NUUklORzogWzB4NTMsIDB4NTksIDB4NTMsIDB4NTQsIDB4NDUsIDB4NERdIC8vU1lTVEVNXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMubWVyZ2VPcHRpb25zID0gZnVuY3Rpb24gKGRlZmF1bHRzLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICByZXR1cm4gW2RlZmF1bHRzLCBvcHRpb25zXS5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgb3B0T2JqKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMob3B0T2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgbWVyZ2VkW2tleV0gPSBvcHRPYmpba2V5XTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcclxuICAgIH0sIHt9KTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFBhcnNlciA9IHJlcXVpcmUoJy4uL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlcicpLFxyXG4gICAgUGFyc2luZ1VuaXQgPSByZXF1aXJlKCcuL3BhcnNpbmdfdW5pdCcpO1xyXG5cclxuLy9BUElcclxuZXhwb3J0cy5wYXJzZURvY3VtZW50ID0gZnVuY3Rpb24gKGh0bWwsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpLFxyXG4gICAgICAgIHBhcnNpbmdVbml0ID0gbmV3IFBhcnNpbmdVbml0KHBhcnNlcik7XHJcblxyXG4gICAgLy9OT1RFOiBvdmVycmlkZSBwYXJzZXIgbG9vcCBtZXRob2RcclxuICAgIHBhcnNlci5fcnVuUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcGFyc2luZ1VuaXQucGFyc2luZ0xvb3BMb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgd2hpbGUgKCFwYXJzaW5nVW5pdC5zdXNwZW5kZWQgJiYgIXRoaXMuc3RvcHBlZClcclxuICAgICAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XHJcblxyXG4gICAgICAgIHBhcnNpbmdVbml0LnBhcnNpbmdMb29wTG9jayA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKVxyXG4gICAgICAgICAgICBwYXJzaW5nVW5pdC5jYWxsYmFjayh0aGlzLmRvY3VtZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiB3YWl0IHdoaWxlIHBhcnNlckNvbnRyb2xsZXIgd2lsbCBiZSBhZG9wdGVkIGJ5IGNhbGxpbmcgY29kZSwgdGhlblxyXG4gICAgLy9zdGFydCBwYXJzaW5nXHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBwYXJzZXIucGFyc2UoaHRtbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyc2luZ1VuaXQ7XHJcbn07XHJcblxyXG5leHBvcnRzLnBhcnNlSW5uZXJIdG1sID0gZnVuY3Rpb24gKGlubmVySHRtbCwgY29udGV4dEVsZW1lbnQsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpO1xyXG5cclxuICAgIHJldHVybiBwYXJzZXIucGFyc2VGcmFnbWVudChpbm5lckh0bWwsIGNvbnRleHRFbGVtZW50KTtcclxufTsiLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUGFyc2luZ1VuaXQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcclxuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xyXG4gICAgdGhpcy5zdXNwZW5kZWQgPSBmYWxzZTtcclxuICAgIHRoaXMucGFyc2luZ0xvb3BMb2NrID0gZmFsc2U7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5fc3RhdGVHdWFyZCA9IGZ1bmN0aW9uIChzdXNwZW5kKSB7XHJcbiAgICBpZiAodGhpcy5zdXNwZW5kZWQgJiYgc3VzcGVuZClcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcnNlNTogUGFyc2VyIHdhcyBhbHJlYWR5IHN1c3BlbmRlZC4gUGxlYXNlLCBjaGVjayB5b3VyIGNvbnRyb2wgZmxvdyBsb2dpYy4nKTtcclxuXHJcbiAgICBlbHNlIGlmICghdGhpcy5zdXNwZW5kZWQgJiYgIXN1c3BlbmQpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJzZTU6IFBhcnNlciB3YXMgYWxyZWFkeSByZXN1bWVkLiBQbGVhc2UsIGNoZWNrIHlvdXIgY29udHJvbCBmbG93IGxvZ2ljLicpO1xyXG5cclxuICAgIHJldHVybiBzdXNwZW5kO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLnN1c3BlbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IHRoaXMuX3N0YXRlR3VhcmQodHJ1ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5zdXNwZW5kZWQgPSB0aGlzLl9zdGF0ZUd1YXJkKGZhbHNlKTtcclxuXHJcbiAgICAvL05PVEU6IGRvbid0IGVudGVyIHBhcnNpbmcgbG9vcCBpZiBpdCBpcyBsb2NrZWQuIFdpdGhvdXQgdGhpcyBsb2NrIF9ydW5QYXJzaW5nTG9vcCgpIG1heSBiZSBjYWxsZWRcclxuICAgIC8vd2hpbGUgcGFyc2luZyBsb29wIGlzIHN0aWxsIHJ1bm5pbmcuIEUuZy4gd2hlbiBzdXNwZW5kKCkgYW5kIHJlc3VtZSgpIGNhbGxlZCBzeW5jaHJvbm91c2x5LlxyXG4gICAgaWYgKCF0aGlzLnBhcnNpbmdMb29wTG9jaylcclxuICAgICAgICB0aGlzLnBhcnNlci5fcnVuUGFyc2luZ0xvb3AoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5kb2N1bWVudFdyaXRlID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgIHRoaXMucGFyc2VyLnRva2VuaXplci5wcmVwcm9jZXNzb3Iud3JpdGUoaHRtbCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuaGFuZGxlU2NyaXB0cyA9IGZ1bmN0aW9uIChzY3JpcHRIYW5kbGVyKSB7XHJcbiAgICB0aGlzLnBhcnNlci5zY3JpcHRIYW5kbGVyID0gc2NyaXB0SGFuZGxlcjtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5kb25lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIERlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxuICAgIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpLFxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUztcblxuLy9EZWZhdWx0IHNlcmlhbGl6ZXIgb3B0aW9uc1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgICBlbmNvZGVIdG1sRW50aXRpZXM6IHRydWVcbn07XG5cbi8vRXNjYXBpbmcgcmVnZXhlc1xudmFyIEFNUF9SRUdFWCA9IC8mL2csXG4gICAgTkJTUF9SRUdFWCA9IC9cXHUwMGEwL2csXG4gICAgRE9VQkxFX1FVT1RFX1JFR0VYID0gL1wiL2csXG4gICAgTFRfUkVHRVggPSAvPC9nLFxuICAgIEdUX1JFR0VYID0gLz4vZztcblxuLy9Fc2NhcGUgc3RyaW5nXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyLCBhdHRyTW9kZSkge1xuICAgIHN0ciA9IHN0clxuICAgICAgICAucmVwbGFjZShBTVBfUkVHRVgsICcmYW1wOycpXG4gICAgICAgIC5yZXBsYWNlKE5CU1BfUkVHRVgsICcmbmJzcDsnKTtcblxuICAgIGlmIChhdHRyTW9kZSlcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoRE9VQkxFX1FVT1RFX1JFR0VYLCAnJnF1b3Q7Jyk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgc3RyID0gc3RyXG4gICAgICAgICAgICAucmVwbGFjZShMVF9SRUdFWCwgJyZsdDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoR1RfUkVHRVgsICcmZ3Q7Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbn1cblxuXG4vL0VucXVvdGUgZG9jdHlwZSBJRFxuXG5cblxuLy9TZXJpYWxpemVyXG52YXIgU2VyaWFsaXplciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyIHx8IERlZmF1bHRUcmVlQWRhcHRlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbn07XG5cblxuLy9BUElcblNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdGhpcy5odG1sID0gJyc7XG4gICAgdGhpcy5fc2VyaWFsaXplQ2hpbGROb2Rlcyhub2RlKTtcblxuICAgIHJldHVybiB0aGlzLmh0bWw7XG59O1xuXG5cbi8vSW50ZXJuYWxzXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplQ2hpbGROb2RlcyA9IGZ1bmN0aW9uIChwYXJlbnROb2RlKSB7XG4gICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50Tm9kZSk7XG5cbiAgICBpZiAoY2hpbGROb2Rlcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgY25MZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGNuTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Tm9kZSA9IGNoaWxkTm9kZXNbaV07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUVsZW1lbnQoY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzVGV4dE5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZVRleHROb2RlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlQWRhcHRlci5pc0NvbW1lbnROb2RlKGN1cnJlbnROb2RlKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVDb21tZW50Tm9kZShjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKGN1cnJlbnROb2RlKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVEb2N1bWVudFR5cGVOb2RlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobm9kZSksXG4gICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkobm9kZSksXG4gICAgICAgIHF1YWxpZmllZFRuID0gKG5zID09PSBOUy5IVE1MIHx8IG5zID09PSBOUy5TVkcgfHwgbnMgPT09IE5TLk1BVEhNTCkgPyB0biA6IChucyArICc6JyArIHRuKTtcblxuICAgIHRoaXMuaHRtbCArPSAnPCcgKyBxdWFsaWZpZWRUbjtcbiAgICB0aGlzLl9zZXJpYWxpemVBdHRyaWJ1dGVzKG5vZGUpO1xuICAgIHRoaXMuaHRtbCArPSAnPic7XG5cbiAgICBpZiAodG4gIT09ICQuQVJFQSAmJiB0biAhPT0gJC5CQVNFICYmIHRuICE9PSAkLkJBU0VGT05UICYmIHRuICE9PSAkLkJHU09VTkQgJiYgdG4gIT09ICQuQlIgJiYgdG4gIT09ICQuQlIgJiZcbiAgICAgICAgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkVNQkVEICYmIHRuICE9PSAkLkZSQU1FICYmIHRuICE9PSAkLkhSICYmIHRuICE9PSAkLklNRyAmJiB0biAhPT0gJC5JTlBVVCAmJlxuICAgICAgICB0biAhPT0gJC5LRVlHRU4gJiYgdG4gIT09ICQuTElOSyAmJiB0biAhPT0gJC5NRU5VSVRFTSAmJiB0biAhPT0gJC5NRVRBICYmIHRuICE9PSAkLlBBUkFNICYmIHRuICE9PSAkLlNPVVJDRSAmJlxuICAgICAgICB0biAhPT0gJC5UUkFDSyAmJiB0biAhPT0gJC5XQlIpIHtcblxuICAgICAgICBpZiAodG4gPT09ICQuUFJFIHx8IHRuID09PSAkLlRFWFRBUkVBIHx8IHRuID09PSAkLkxJU1RJTkcpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdENoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKG5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiB0aGlzLnRyZWVBZGFwdGVyLmlzVGV4dE5vZGUoZmlyc3RDaGlsZCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGV4dE5vZGVDb250ZW50KGZpcnN0Q2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRbMF0gPT09ICdcXG4nKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ1xcbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGROb2Rlc0hvbGRlciA9IHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMobm9kZSlbMF0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU7XG5cbiAgICAgICAgdGhpcy5fc2VyaWFsaXplQ2hpbGROb2RlcyhjaGlsZE5vZGVzSG9sZGVyKTtcbiAgICAgICAgdGhpcy5odG1sICs9ICc8LycgKyBxdWFsaWZpZWRUbiArICc+JztcbiAgICB9XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIGF0dHJzID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChub2RlKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBhdHRyc0xlbmd0aCA9IGF0dHJzLmxlbmd0aDsgaSA8IGF0dHJzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHIgPSBhdHRyc1tpXSxcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5vcHRpb25zLmVuY29kZUh0bWxFbnRpdGllcyA/IGVzY2FwZVN0cmluZyhhdHRyLnZhbHVlLCB0cnVlKSA6IGF0dHIudmFsdWU7XG5cbiAgICAgICAgdGhpcy5odG1sICs9ICcgJztcblxuICAgICAgICBpZiAoIWF0dHIubmFtZXNwYWNlKVxuICAgICAgICAgICAgdGhpcy5odG1sICs9IGF0dHIubmFtZTtcblxuICAgICAgICBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWE1MKVxuICAgICAgICAgICAgdGhpcy5odG1sICs9ICd4bWw6JyArIGF0dHIubmFtZTtcblxuICAgICAgICBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWE1MTlMpIHtcbiAgICAgICAgICAgIGlmIChhdHRyLm5hbWUgIT09ICd4bWxucycpXG4gICAgICAgICAgICAgICAgdGhpcy5odG1sICs9ICd4bWxuczonO1xuXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gYXR0ci5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoYXR0ci5uYW1lc3BhY2UgPT09IE5TLlhMSU5LKVxuICAgICAgICAgICAgdGhpcy5odG1sICs9ICd4bGluazonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLm5hbWVzcGFjZSArICc6JyArIGF0dHIubmFtZTtcblxuICAgICAgICB0aGlzLmh0bWwgKz0gJz1cIicgKyB2YWx1ZSArICdcIic7XG4gICAgfVxufTtcblxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZVRleHROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGV4dE5vZGVDb250ZW50KG5vZGUpLFxuICAgICAgICBwYXJlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUobm9kZSksXG4gICAgICAgIHBhcmVudFRuID0gdm9pZCAwO1xuXG4gICAgaWYgKHBhcmVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUocGFyZW50KSlcbiAgICAgICAgcGFyZW50VG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocGFyZW50KTtcblxuICAgIGlmIChwYXJlbnRUbiA9PT0gJC5TVFlMRSB8fCBwYXJlbnRUbiA9PT0gJC5TQ1JJUFQgfHwgcGFyZW50VG4gPT09ICQuWE1QIHx8IHBhcmVudFRuID09PSAkLklGUkFNRSB8fFxuICAgICAgICBwYXJlbnRUbiA9PT0gJC5OT0VNQkVEIHx8IHBhcmVudFRuID09PSAkLk5PRlJBTUVTIHx8IHBhcmVudFRuID09PSAkLlBMQUlOVEVYVCB8fCBwYXJlbnRUbiA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICB0aGlzLmh0bWwgKz0gY29udGVudDtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuaHRtbCArPSB0aGlzLm9wdGlvbnMuZW5jb2RlSHRtbEVudGl0aWVzID8gZXNjYXBlU3RyaW5nKGNvbnRlbnQsIGZhbHNlKSA6IGNvbnRlbnQ7XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHRoaXMuaHRtbCArPSAnPCEtLScgKyB0aGlzLnRyZWVBZGFwdGVyLmdldENvbW1lbnROb2RlQ29udGVudChub2RlKSArICctLT4nO1xufTtcblxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBuYW1lID0gdGhpcy50cmVlQWRhcHRlci5nZXREb2N1bWVudFR5cGVOb2RlTmFtZShub2RlKSxcbiAgICAgICAgcHVibGljSWQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZChub2RlKSxcbiAgICAgICAgc3lzdGVtSWQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVTeXN0ZW1JZChub2RlKTtcblxuICAgIHRoaXMuaHRtbCArPSAnPCcgKyBEb2N0eXBlLnNlcmlhbGl6ZUNvbnRlbnQobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSArICc+Jztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXG4gICAgVG9rZW5pemVyUHJveHkgPSByZXF1aXJlKCcuL3Rva2VuaXplcl9wcm94eScpLFxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyk7XG5cbi8vRGVmYXVsdCBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGRlY29kZUh0bWxFbnRpdGllczogdHJ1ZSxcbiAgICBsb2NhdGlvbkluZm86IGZhbHNlXG59O1xuXG4vL1NraXBwaW5nIGhhbmRsZXJcbmZ1bmN0aW9uIHNraXAoKSB7XG4gICAgLy9OT1RFOiBkbyBub3RoaW5nID0pXG59XG5cbi8vU2ltcGxlQXBpUGFyc2VyXG52YXIgU2ltcGxlQXBpUGFyc2VyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGFuZGxlcnMsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgICB0aGlzLmhhbmRsZXJzID0ge1xuICAgICAgICBkb2N0eXBlOiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5kb2N0eXBlKSxcbiAgICAgICAgc3RhcnRUYWc6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLnN0YXJ0VGFnKSxcbiAgICAgICAgZW5kVGFnOiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5lbmRUYWcpLFxuICAgICAgICB0ZXh0OiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy50ZXh0KSxcbiAgICAgICAgY29tbWVudDogdGhpcy5fd3JhcEhhbmRsZXIoaGFuZGxlcnMuY29tbWVudClcbiAgICB9O1xufTtcblxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fd3JhcEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgIHZhciBwYXJzZXIgPSB0aGlzO1xuXG4gICAgaGFuZGxlciA9IGhhbmRsZXIgfHwgc2tpcDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25JbmZvKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBhcmdzLnB1c2gocGFyc2VyLmN1cnJlbnRUb2tlbkxvY2F0aW9uKTtcbiAgICAgICAgICAgIGhhbmRsZXIuYXBwbHkoaGFuZGxlciwgYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZXI7XG59O1xuXG4vL0FQSVxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgdmFyIHRva2VuID0gbnVsbDtcblxuICAgIHRoaXMuX3Jlc2V0KGh0bWwpO1xuXG4gICAgZG8ge1xuICAgICAgICB0b2tlbiA9IHRoaXMudG9rZW5pemVyUHJveHkuZ2V0TmV4dFRva2VuKCk7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4gfHxcbiAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOKSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ1RleHQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcblxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5Mb2NhdGlvbi5lbmQgPSB0b2tlbi5sb2NhdGlvbi5lbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1RleHQgPSAodGhpcy5wZW5kaW5nVGV4dCB8fCAnJykgKyB0b2tlbi5jaGFycztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdFBlbmRpbmdUZXh0KCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlICh0b2tlbi50eXBlICE9PSBUb2tlbml6ZXIuRU9GX1RPS0VOKTtcbn07XG5cbi8vSW50ZXJuYWxzXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl9oYW5kbGVUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25JbmZvKVxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5zdGFydFRhZyh0b2tlbi50YWdOYW1lLCB0b2tlbi5hdHRycywgdG9rZW4uc2VsZkNsb3NpbmcpO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkVORF9UQUdfVE9LRU4pXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuZW5kVGFnKHRva2VuLnRhZ05hbWUpO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4pXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuY29tbWVudCh0b2tlbi5kYXRhKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5ET0NUWVBFX1RPS0VOKVxuICAgICAgICB0aGlzLmhhbmRsZXJzLmRvY3R5cGUodG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKTtcblxufTtcblxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIHRoaXMudG9rZW5pemVyUHJveHkgPSBuZXcgVG9rZW5pemVyUHJveHkoaHRtbCwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLnBlbmRpbmdUZXh0ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uID0gbnVsbDtcbn07XG5cblNpbXBsZUFwaVBhcnNlci5wcm90b3R5cGUuX2VtaXRQZW5kaW5nVGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nVGV4dCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmhhbmRsZXJzLnRleHQodGhpcy5wZW5kaW5nVGV4dCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1RleHQgPSBudWxsO1xuICAgIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXG4gICAgRm9yZWlnbkNvbnRlbnQgPSByZXF1aXJlKCcuLi9jb21tb24vZm9yZWlnbl9jb250ZW50JyksXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUztcblxuXG4vL1Rva2VuaXplciBwcm94eVxuLy9OT1RFOiB0aGlzIHByb3h5IHNpbXVsYXRlcyBhZGp1c3RtZW50IG9mIHRoZSBUb2tlbml6ZXIgd2hpY2ggcGVyZm9ybWVkIGJ5IHN0YW5kYXJkIHBhcnNlciBkdXJpbmcgdHJlZSBjb25zdHJ1Y3Rpb24uXG52YXIgVG9rZW5pemVyUHJveHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChodG1sLCBvcHRpb25zKSB7XG4gICAgdGhpcy50b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKGh0bWwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjayA9IFtdO1xuICAgIHRoaXMubmFtZXNwYWNlU3RhY2tUb3AgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPSBudWxsO1xuICAgIHRoaXMuaW5Gb3JlaWduQ29udGVudCA9IGZhbHNlO1xufTtcblxuLy9BUElcblRva2VuaXplclByb3h5LnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRva2VuID0gdGhpcy50b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5faGFuZGxlU3RhcnRUYWdUb2tlbih0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5faGFuZGxlRW5kVGFnVG9rZW4odG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOICYmIHRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICB0b2tlbi50eXBlID0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTjtcbiAgICAgICAgdG9rZW4uY2hhcnMgPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG59O1xuXG4vL05hbWVzcGFjZSBzdGFjayBtdXRhdGlvbnNcblRva2VuaXplclByb3h5LnByb3RvdHlwZS5fZW50ZXJOYW1lc3BhY2UgPSBmdW5jdGlvbiAobmFtZXNwYWNlKSB7XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFja1RvcCsrO1xuICAgIHRoaXMubmFtZXNwYWNlU3RhY2sucHVzaChuYW1lc3BhY2UpO1xuXG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gbmFtZXNwYWNlICE9PSBOUy5IVE1MO1xuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gdGhpcy5pbkZvcmVpZ25Db250ZW50O1xufTtcblxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9sZWF2ZUN1cnJlbnROYW1lc3BhY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFja1RvcC0tO1xuICAgIHRoaXMubmFtZXNwYWNlU3RhY2sucG9wKCk7XG5cbiAgICB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZVN0YWNrW3RoaXMubmFtZXNwYWNlU3RhY2tUb3BdO1xuICAgIHRoaXMuaW5Gb3JlaWduQ29udGVudCA9IHRoaXMuY3VycmVudE5hbWVzcGFjZSAhPT0gTlMuSFRNTDtcbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gdGhpcy5pbkZvcmVpZ25Db250ZW50O1xufTtcblxuLy9Ub2tlbiBoYW5kbGVyc1xuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9lbnN1cmVUb2tlbml6ZXJNb2RlID0gZnVuY3Rpb24gKHRuKSB7XG4gICAgaWYgKHRuID09PSAkLlRFWFRBUkVBIHx8IHRuID09PSAkLlRJVExFKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJDREFUQTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5QTEFJTlRFWFQ7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuU0NSSVBUX0RBVEE7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5JRlJBTUUgfHwgdG4gPT09ICQuWE1QIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuTk9FTUJFRCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJBV1RFWFQ7XG4gICAgfVxufTtcblxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9oYW5kbGVTdGFydFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5TVkcpXG4gICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLlNWRyk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5NQVRIKVxuICAgICAgICB0aGlzLl9lbnRlck5hbWVzcGFjZShOUy5NQVRITUwpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmluRm9yZWlnbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmIChGb3JlaWduQ29udGVudC5jYXVzZXNFeGl0KHRva2VuKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2ZUN1cnJlbnROYW1lc3BhY2UoKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAoRm9yZWlnbkNvbnRlbnQuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCh0biwgdGhpcy5jdXJyZW50TmFtZXNwYWNlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgdGhpcy5jdXJyZW50TmFtZXNwYWNlLCB0b2tlbi5hdHRycykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbnRlck5hbWVzcGFjZShOUy5IVE1MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRva2VuaXplck1vZGUodG4pO1xuICAgIH1cbn07XG5cblRva2VuaXplclByb3h5LnByb3RvdHlwZS5faGFuZGxlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKCF0aGlzLmluRm9yZWlnbkNvbnRlbnQpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzTnMgPSB0aGlzLm5hbWVzcGFjZVN0YWNrW3RoaXMubmFtZXNwYWNlU3RhY2tUb3AgLSAxXTtcblxuICAgICAgICAvL05PVEU6IGNoZWNrIGZvciBleGl0IGZyb20gaW50ZWdyYXRpb24gcG9pbnRcbiAgICAgICAgaWYgKEZvcmVpZ25Db250ZW50LmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIHByZXZpb3VzTnMpIHx8XG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCBwcmV2aW91c05zLCB0b2tlbi5hdHRycykpIHtcbiAgICAgICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5EQVRBO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKCh0biA9PT0gJC5TVkcgJiYgdGhpcy5jdXJyZW50TmFtZXNwYWNlID09PSBOUy5TVkcpIHx8XG4gICAgICAgICAgICAgKHRuID09PSAkLk1BVEggJiYgdGhpcy5jdXJyZW50TmFtZXNwYWNlID09PSBOUy5NQVRITUwpKVxuICAgICAgICB0aGlzLl9sZWF2ZUN1cnJlbnROYW1lc3BhY2UoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLmFzc2lnbiA9IGZ1bmN0aW9uICh0b2tlbml6ZXIpIHtcclxuICAgIC8vTk9URTogb2J0YWluIFRva2VuaXplciBwcm90byB0aGlzIHdheSB0byBhdm9pZCBtb2R1bGUgY2lyY3VsYXIgcmVmZXJlbmNlc1xyXG4gICAgdmFyIHRva2VuaXplclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRva2VuaXplcik7XHJcblxyXG4gICAgdG9rZW5pemVyLnRva2VuU3RhcnRMb2MgPSAtMTtcclxuXHJcbiAgICAvL05PVEU6IGFkZCBsb2NhdGlvbiBpbmZvIGJ1aWxkZXIgbWV0aG9kXHJcbiAgICB0b2tlbml6ZXIuX2F0dGFjaExvY2F0aW9uSW5mbyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgIHRva2VuLmxvY2F0aW9uID0ge1xyXG4gICAgICAgICAgICBzdGFydDogdGhpcy50b2tlblN0YXJ0TG9jLFxyXG4gICAgICAgICAgICBlbmQ6IC0xXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiBwYXRjaCB0b2tlbiBjcmVhdGlvbiBtZXRob2RzIGFuZCBhdHRhY2ggbG9jYXRpb24gb2JqZWN0c1xyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVTdGFydFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZVN0YXJ0VGFnVG9rZW4uY2FsbCh0aGlzLCB0YWdOYW1lRmlyc3RDaCk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVFbmRUYWdUb2tlbi5jYWxsKHRoaXMsIHRhZ05hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUNvbW1lbnRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlQ29tbWVudFRva2VuLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVEb2N0eXBlVG9rZW4gPSBmdW5jdGlvbiAoZG9jdHlwZU5hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZURvY3R5cGVUb2tlbi5jYWxsKHRoaXMsIGRvY3R5cGVOYW1lRmlyc3RDaCk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICh0eXBlLCBjaCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbi5jYWxsKHRoaXMsIHR5cGUsIGNoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHBhdGNoIHRva2VuIGVtaXNzaW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIGVuZCBsb2NhdGlvblxyXG4gICAgdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBwZW5kaW5nIGNoYXJhY3RlciB0b2tlbiBtYWtlIGl0J3MgZW5kIGxvY2F0aW9uIGVxdWFsIHRvIHRoZVxyXG4gICAgICAgIC8vY3VycmVudCB0b2tlbidzIHN0YXJ0IGxvY2F0aW9uLlxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbilcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5jdXJyZW50VG9rZW4ubG9jYXRpb24uc3RhcnQ7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmxvY2F0aW9uLmVuZCA9IHRoaXMucHJlcHJvY2Vzc29yLnBvcyArIDE7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2VtaXRDdXJyZW50VG9rZW4uY2FsbCh0aGlzKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBjaGFyYWN0ZXIgdG9rZW4gYW5kIGl0J3MgbG9jYXRpb24gd2Fzbid0IHNldCBpbiB0aGUgX2VtaXRDdXJyZW50VG9rZW4oKSxcclxuICAgICAgICAvL3RoZW4gc2V0IGl0J3MgbG9jYXRpb24gYXQgdGhlIGN1cnJlbnQgcHJlcHJvY2Vzc29yIHBvc2l0aW9uXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuICYmIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgLy9OT1RFOiB3ZSBkb24ndCBuZWVkIHRvIGluY3JlbWVudCBwcmVwcm9jZXNzb3IgcG9zaXRpb24sIHNpbmNlIGNoYXJhY3RlciB0b2tlblxyXG4gICAgICAgICAgICAvL2VtaXNzaW9uIGlzIGFsd2F5cyBmb3JjZWQgYnkgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0b2tlbiBoZXJlLlxyXG4gICAgICAgICAgICAvL1NvLCB3ZSBhbHJlYWR5IGhhdmUgYWR2YW5jZWQgcG9zaXRpb24uXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZCA9IHRoaXMucHJlcHJvY2Vzc29yLnBvcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuLmNhbGwodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vTk9URTogcGF0Y2ggaW5pdGlhbCBzdGF0ZXMgZm9yIGVhY2ggbW9kZSB0byBvYnRhaW4gdG9rZW4gc3RhcnQgcG9zaXRpb25cclxuICAgIE9iamVjdC5rZXlzKHRva2VuaXplclByb3RvLk1PREUpXHJcblxyXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKG1vZGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b2tlbml6ZXJQcm90by5NT0RFW21vZGVOYW1lXTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgdG9rZW5pemVyW3N0YXRlXSA9IGZ1bmN0aW9uIChjcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2tlblN0YXJ0TG9jID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zO1xyXG4gICAgICAgICAgICAgICAgdG9rZW5pemVyUHJvdG9bc3RhdGVdLmNhbGwodGhpcywgY3ApO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL05PVEU6IHRoaXMgZmlsZSBjb250YWlucyBhdXRvIGdlbmVyYXRlZCB0cmllIHN0cnVjdHVyZSB0aGF0IGlzIHVzZWQgZm9yIG5hbWVkIGVudGl0eSByZWZlcmVuY2VzIGNvbnN1bXB0aW9uXHJcbi8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjdG9rZW5pemluZy1jaGFyYWN0ZXItcmVmZXJlbmNlcyBhbmRcclxuLy9odHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlcy5odG1sI25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VzKVxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIDB4NDE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTkzXX19LCBjOiBbMTkzXX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjU4XX19fX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTk0XX19LCBjOiBbMTk0XX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0MF19fX19fSwgMHg0NToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzE5OF19fSwgYzogWzE5OF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNjhdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzE5Ml19fSwgYzogWzE5Ml19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3MDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTNdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjU2XX19fX19fX19fSwgMHg0RDoge2w6IHsweDUwOiB7bDogezB4M0I6IHtjOiBbMzhdfX0sIGM6IFszOF19fX0sIDB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODM1XX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjYwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyMF19fX19fX19LCAweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc5OiB7bDogezB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzgyODldfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzE5N119fSwgYzogWzE5N119fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk2NF19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3ODhdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzE5NV19fSwgYzogWzE5NV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTk2XX19LCBjOiBbMTk2XX19fX19fX0sXHJcbiAgICAweDYxOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyNV19fSwgYzogWzIyNV19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1OV19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDNCOiB7YzogWzg3NjZdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzg3NjddfX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODc2NiwgODE5XX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMjZdfX0sIGM6IFsyMjZdfX19fX0sIDB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTgwXX19LCBjOiBbMTgwXX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3Ml19fX19fSwgMHg2NToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzIzMF19fSwgYzogWzIzMF19fX19fX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbODI4OV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDk0XX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMjRdfX0sIGM6IFsyMjRdfX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDczOiB7bDogezB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg1MDFdfX19fX19fX19LCAweDcwOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NTAxXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ1XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI1N119fX19fSwgMHg2Qzoge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTA4MTVdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzM4XX19LCBjOiBbMzhdfX19LCAweDZFOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgzN119fX19fX19LCAweDNCOiB7YzogWzg3NDNdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwODQ0XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NDBdfX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDg0Ml19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg3MzZdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwNjYwXX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODczNl19fX19fSwgMHg2RDoge2w6IHsweDczOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA2NjRdfX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbMTA2NjVdfX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbMTA2NjZdfX19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NjddfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjhdfX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTA2NjldfX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbMTA2NzBdfX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbMTA2NzFdfX19fX0sIDB4M0I6IHtjOiBbODczN119fX19fX19LCAweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzM1XX0sIDB4NzY6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4OTRdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjUzXX19fX19fX19fX19LCAweDczOiB7bDogezB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg3MzhdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxOTddfX19fX0sIDB4N0E6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5MDg0XX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjFdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ2XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODYzXX19fX19fX19fSwgMHgzQjoge2M6IFs4Nzc2XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDg2NF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc4XX19fSwgMHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODc3OV19fX19fSwgMHg2Rjoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMzldfX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3NzhdfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjI5XX19LCBjOiBbMjI5XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTkwXX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNDJdfX19LCAweDc5OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3NzZdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4MV19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMjddfX0sIGM6IFsyMjddfX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIyOF19fSwgYzogWzIyOF19fX19fSwgMHg3Nzoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTVdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2OV19fX19fX19fX19fSxcclxuICAgIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg3ODBdfX19fX19fX19LCAweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTAxNF19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDVdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NV19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4OTA5XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTNdfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4OTY1XX0sIDB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5NjVdfX19fX19fX19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzkxNDFdfSwgMHg3NDoge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzkxNDJdfX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc4MF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3M119fX19fSwgMHg2NDoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMjJdfX19fX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzU3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU3XX19fX19fX19fX19LCAweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3Ml19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFsxMDE0XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2RToge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHgzQjoge2M6IFs4NDkyXX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ2XX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg1MDJdfX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODgxMl19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTVdfX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4OThdfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbOTcxMV19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODk5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc1Ml19fX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3NTNdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1NF19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDc1OF19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTczM119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTY2MV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzk2NTFdfX19fX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1Nl19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODk3XX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTZdfX19fX19fX19fX19fX19LCAweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUwOV19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg3QToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA3MzFdfX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2NDJdfX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY1Ml19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTY2Ml19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjY2XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTY1Nl19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5MjUxXX19fX19fX0sIDB4NkI6IHtsOiB7MHgzMToge2w6IHsweDMyOiB7bDogezB4M0I6IHtjOiBbOTYxOF19fX0sIDB4MzQ6IHtsOiB7MHgzQjoge2M6IFs5NjE3XX19fX19LCAweDMzOiB7bDogezB4MzQ6IHtsOiB7MHgzQjoge2M6IFs5NjE5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTYwOF19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzYxLCA4NDIxXX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODAxLCA4NDIxXX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTc2XX19fX19fX0sIDB4NEU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5ODldfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDddfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODY5XX0sIDB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODg2OV19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA0XX19fX19fX19fSwgMHg3ODoge2w6IHsweDYyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwNjk3XX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk0ODhdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU1N119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NDg0XX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NTRdfX19fX0sIDB4NDQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk1NThdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU1OV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NTU1XX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NTZdfX19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs5NDcyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5NTE2XX19fSwgMHg0NDoge2w6IHsweDNCOiB7YzogWzk1NzNdfX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTUyNF19fX0sIDB4NTU6IHtsOiB7MHgzQjoge2M6IFs5NTc2XX19fX19LCAweDQ4OiB7bDogezB4M0I6IHtjOiBbOTU1Ml19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbOTU3Ml19fX0sIDB4NDQ6IHtsOiB7MHgzQjoge2M6IFs5NTc0XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzk1NzVdfX19LCAweDU1OiB7bDogezB4M0I6IHtjOiBbOTU3N119fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg2M119fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NjJdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODY0XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs5NDk2XX19fSwgMHg0Qzoge2w6IHsweDNCOiB7YzogWzk1NjNdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbOTQ5Ml19fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFs5NTYwXX19fX19LCAweDU1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs5NTY0XX19fSwgMHg0Qzoge2w6IHsweDNCOiB7YzogWzk1NjVdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbOTU2MV19fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFs5NTYyXX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTQ3NF19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbOTUzMl19fX0sIDB4NDg6IHtsOiB7MHgzQjoge2M6IFs5NTc4XX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzk1MDhdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2OV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NTAwXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjZdfX19fX0sIDB4NTY6IHtsOiB7MHgzQjoge2M6IFs5NTUzXX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs5NTc5XX19fSwgMHg0ODoge2w6IHsweDNCOiB7YzogWzk1ODBdfX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbOTU3MF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTcxXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1NjddfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU2OF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDVdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MjhdfX19fX19fSwgMHg3Njoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzE2Nl19fSwgYzogWzE2Nl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTkxXX19fX19LCAweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzgyNzFdfX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODkwOV19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwNjkzXX19fSwgMHgzQjoge2M6IFs5Ml19LCAweDY4OiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTAxODRdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzgyMjZdfSwgMHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODIyNl19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODJdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTI2XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3ODNdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg3ODNdfX19fX19fX19fX19fSxcclxuICAgIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTgzXX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4OTY2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQxXX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NTddfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2RToge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0OTJdfX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxNF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNjldfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTIxXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MjhdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTJdfX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4Ml19fX19fX19fX19fX19LFxyXG4gICAgMHg0Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNjJdfX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODkxNF19LCAweDY5OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDQ6IHtsOiB7MHg2OToge2w6IHsweDY2OiB7bDogezB4NjY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NTE3XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4Nzk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0OTNdfX19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjY4XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzE5OV19fSwgYzogWzE5OV19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI2NF19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzUyXX19fX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjY2XX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTg0XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTgzXX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDkzXX19fX19LCAweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjNdfX19fX19fSwgMHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTM1XX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODU3XX19fX19fX0sIDB4NEQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NTRdfX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUzXX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg3Nzoge2w6IHsweDY5OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX19fX19fX19fX19fX19fX19fX19fX19LCAweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc1OV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NjhdfX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgwMV19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTFdfX19fX19fSwgMHg3NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDQ5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzUwXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ1MF19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDY0OiB7bDogezB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcyMF19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQzOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg3Nzoge2w6IHsweDY5OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTVdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0Rjoge2w6IHsweDUwOiB7bDogezB4NTk6IHtsOiB7MHgzQjoge2M6IFsxNjldfX0sIGM6IFsxNjldfX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc5OV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTY2XX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDQzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODFdfX19fX19fSwgMHgzQjoge2M6IFs4OTE1XX19fX19fX0sXHJcbiAgICAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI2M119fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgyMF19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyNV19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyN119fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4MjNdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ1XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4MTZdfX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NDUsIDY1MDI0XX19fX19LCAweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzgyNTddfX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzcxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgyOV19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjldfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjMxXX19LCBjOiBbMjMxXX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjY1XX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MjhdfSwgMHg3Mzoge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA4MzJdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyNjddfX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzE4NF19fSwgYzogWzE4NF19fX19fSwgMHg2RDoge2w6IHsweDcwOiB7bDogezB4NzQ6IHtsOiB7MHg3OToge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA2NzRdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE2Ml19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxODNdfX19fX19fX19fX19LCBjOiBbMTYyXX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5NV19fX19fSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDAwM119LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTAwMDNdfX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTY3XX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzcxMF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzkxXX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjM0XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzNV19fX19fX19fX19fX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODU5XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODU4XX19fX19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NjFdfX19fX19fX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbMTc0XX19fSwgMHg1Mzoge2w6IHsweDNCOiB7YzogWzk0MTZdfX19fX19fX19fX0sIDB4M0I6IHtjOiBbOTY3NV19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA2OTFdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc5MV19fX0sIDB4NjY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY4XX19fX19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwOTkxXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY5MF19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbOTgyN119LCAweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk4MjddfX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNThdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3ODhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg3ODhdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbNDRdfSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzY0XX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzA1XX0sIDB4NjY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3MjhdfX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcwNV19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ1MF19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg3NzNdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg2MV19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0OF19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODcyMF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTY5XX0sIDB4NzM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NzFdfX19fX19LCBjOiBbMTY5XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYyOV19fX19fX19LCAweDZGOiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwMDA3XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTJdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTU5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDk2MV19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTYwXX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDk2Ml19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTQzXX19fX19fX19fSwgMHg3NToge2w6IHsweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDU1Ml19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU0OV19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTI2XX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTI3XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjMwXX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDU1N119fX19fX19fX19fSwgMHg3MDoge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyNF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyMl19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4MjZdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ2XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0NV19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDgyMV19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NDYsIDY1MDI0XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYzMV19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbMTA1NTZdfX19fX19fX19LCAweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTI2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjddfX19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTEwXX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MTFdfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzE2NF19fSwgYzogWzE2NF19fX19fSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzMF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MTBdfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4OTExXX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTRdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzUzXX19fX19fX19fSwgMHg3OToge2w6IHsweDZDOiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbOTAwNV19fX19fX19fX19fX19LFxyXG4gICAgMHg2NDoge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI0XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg1MDRdfX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk1XX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4MjA4XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODY3XX19fX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjU5XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTA1MTFdfX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbNzMzXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjcxXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNzZdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDY3OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODIyNV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTBdfX19fX19fSwgMHgzQjoge2M6IFs4NTE4XX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwODcxXX19fX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzE3Nl19fSwgYzogWzE3Nl19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk0OF19fX19fX19LCAweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3M119fX19fX19fX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyM119fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTddfX19fX0sIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1OTddfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2NDNdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODY0Ml19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkwMF19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5MDBdfSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk4MzBdfX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbOTgzMF19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTY4XX19fSwgMHg2Nzoge2w6IHsweDYxOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTg5XX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5NDZdfX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzI0N119LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI0N119LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwM119fX19fX19fX19fX19fX19LCBjOiBbMjQ3XX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg5MDNdfX19fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwNl19fX19fX19LCAweDZDOiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTkwXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk3M119fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzZdfX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs3MjldfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4NF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3ODVdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NjBdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzI0XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODY1XX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTY2XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk1XX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY1MF19fX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2NDNdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjQyXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUxMl19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk5MV19fX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg5NzJdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTkzXX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDldfX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzQyXX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjczXX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0NV19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjYzXX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjYyXX19fX19fX19fSwgMHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2OTNdfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwN119fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjJdfX19fX19fX19fX19fSwgMHg3QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE5XX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjM5XX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg0NDoge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI1XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYwOV19fX19fSwgMHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDk4MF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI3MF19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ0XX19fX19LCAweDQ0OiB7bDogezB4M0I6IHtjOiBbODUxN119LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4Njg6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNTEzXX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODcxMV19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTZdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzFdfX19fX0sIDB4Njk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTgwXX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzcyOV19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNzMzXX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5Nl19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNzMyXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5MDBdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzg1MThdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDI2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTIzXX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTY4XX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQxMl19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDQ5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzUxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTY4XX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU2XX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA5ODBdfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMl19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjM0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4NzJdfX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU3XX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NjFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTE1XX19fX19fX0sIDB4M0I6IHtjOiBbODU5NV19LCAweDU1OiB7bDogezB4NzA6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY5M119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU5XX19fX19fX19fX19LCAweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3ODVdfX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzZdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1OTBdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4Ml19fX19fX19LCAweDNCOiB7YzogWzg2MzddfX19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5MV19fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTgzXX19fX19fX0sIDB4M0I6IHtjOiBbODY0MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxNV19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODY4XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTY3XX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjcyXX19fX19fX19fX19LCAweDUzOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjldfX19fX19fSwgMHg1QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM5XX19fX19fX19fSxcclxuICAgIDB4NDU6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjAxXX19LCBjOiBbMjAxXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjgyXX19fX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMDJdfX0sIGM6IFsyMDJdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY5XX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzI3OF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwMF19fSwgYzogWzIwMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcxMl19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjc0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NTM6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDUzOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3MjNdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4Nzk6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY0M119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEU6IHtsOiB7MHg0Nzoge2w6IHsweDNCOiB7YzogWzMzMF19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI4MF19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjRdfX19fX19fSwgMHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5MTddfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODY5XX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NjUyXX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDk2XX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDg2N119fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTldfX19fX0sIDB4NTQ6IHtsOiB7MHg0ODoge2w6IHsweDNCOiB7YzogWzIwOF19fSwgYzogWzIwOF19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjAzXX19LCBjOiBbMjAzXX19fX19LCAweDc4OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzA3XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzg1MTldfX19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjMzXX19LCBjOiBbMjMzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDg2Ml19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjgzXX19fX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMzRdfX0sIGM6IFsyMzRdfSwgMHgzQjoge2M6IFs4NzkwXX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc4OV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAxXX19fX19LCAweDQ0OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NzFdfX19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NV19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzI3OV19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODUxOV19fX0sIDB4NjY6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg2XX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOThdfX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDkwNl19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjMyXX19LCBjOiBbMjMyXX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkwMl19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTA0XX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MDVdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5MTkxXX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NDY3XX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAxXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MDNdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNzVdfX19fX19fSwgMHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcwOV19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODcwOV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDMxOiB7bDogezB4MzM6IHtsOiB7MHgzQjoge2M6IFs4MTk2XX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzgxOTddfX19fX0sIDB4M0I6IHtjOiBbODE5NV19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMzFdfX19LCAweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MTk0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODFdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTUwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODkxN119LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDcyM119fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4NjVdfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTQ5XX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTQ5XX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDEzXX19fX19fX19fSwgMHg3MToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbODc5MF19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc4OV19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzcwXX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njc6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MDJdfX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAxXX19fX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs2MV19fX19fX19LCAweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3OTldfX19fX19fSwgMHg2OToge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbODgwMV19LCAweDQ0OiB7bDogezB4NDQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3Ml19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDcyNV19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwOV19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3ODddfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTVdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NF19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzcwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1MV19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFsyNDBdfX0sIGM6IFsyNDBdfX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIzNV19fSwgYzogWzIzNV19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgzNjRdfX19fX19fSwgMHg3ODoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszM119fX19fSwgMHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA3XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODQ5Nl19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NTE5XX19fX19fX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDY2OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4Nl19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDkyXX19fX19LCAweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NzkyXX19fX19fX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1OV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNjQyNTZdfX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNjQyNjBdfX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDk5XX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNjQyNTddfX19fX19fX19LCAweDZBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyLCAxMDZdfX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk4MzddfX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNjQyNThdfX19fX19fSwgMHg3NDoge2w6IHsweDZFOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5NjQ5XX19fX19fX19fSwgMHg2RToge2w6IHsweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs0MDJdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTFdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzA0XX19fX19fX0sIDB4NkI6IHtsOiB7MHgzQjoge2M6IFs4OTE2XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDk2OV19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NV19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4MzE6IHtsOiB7MHgzMjoge2w6IHsweDNCOiB7YzogWzE4OV19fSwgYzogWzE4OV19LCAweDMzOiB7bDogezB4M0I6IHtjOiBbODUzMV19fX0sIDB4MzQ6IHtsOiB7MHgzQjoge2M6IFsxODhdfX0sIGM6IFsxODhdfSwgMHgzNToge2w6IHsweDNCOiB7YzogWzg1MzNdfX19LCAweDM2OiB7bDogezB4M0I6IHtjOiBbODUzN119fX0sIDB4Mzg6IHtsOiB7MHgzQjoge2M6IFs4NTM5XX19fX19LCAweDMyOiB7bDogezB4MzM6IHtsOiB7MHgzQjoge2M6IFs4NTMyXX19fSwgMHgzNToge2w6IHsweDNCOiB7YzogWzg1MzRdfX19fX0sIDB4MzM6IHtsOiB7MHgzNDoge2w6IHsweDNCOiB7YzogWzE5MF19fSwgYzogWzE5MF19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzNV19fX0sIDB4Mzg6IHtsOiB7MHgzQjoge2M6IFs4NTQwXX19fX19LCAweDM0OiB7bDogezB4MzU6IHtsOiB7MHgzQjoge2M6IFs4NTM2XX19fX19LCAweDM1OiB7bDogezB4MzY6IHtsOiB7MHgzQjoge2M6IFs4NTM4XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1NDFdfX19fX0sIDB4Mzc6IHtsOiB7MHgzODoge2w6IHsweDNCOiB7YzogWzg1NDJdfX19fX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODI2MF19fX19fX19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTRdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5NV19fX19fX19fX0sXHJcbiAgICAweDQ2OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjBdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3M119fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NTM6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDUzOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3MjRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4Nzk6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY0Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjVdfX19fX0sIDB4NzI6IHtsOiB7MHg0MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzA0XX19fX19fX19fSwgMHg3NToge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ5N119fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTddfX19fX19fX19LFxyXG4gICAgMHg2Nzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs1MDFdfX19fX19fX19LCAweDZEOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk0N119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbOTg5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwODg2XX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyODddfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyODVdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNzVdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjg5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODA1XX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDVdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDddfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3OF19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwOTIxXX19fX19LCAweDNCOiB7YzogWzEwODc4XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4ODBdfSwgMHg2Rjoge2w6IHsweDNCOiB7YzogWzEwODgyXX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg4NF19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjMsIDY1MDI0XX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAwXX19fX19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwN119LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4OTJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwMF19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg4MTFdfSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg5MjFdfX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NTAzXX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA3XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwOTE3XX19fSwgMHgzQjoge2M6IFs4ODIzXX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDg5OF19fX0sIDB4NkE6IHtsOiB7MHgzQjoge2M6IFsxMDkxNl19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDg5MF19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4OTBdfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwODg4XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDg4OF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOV19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNV19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTUyXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5Nl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ1OF19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgxOV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4OTRdfX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4OTZdfX19fX19fX19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwOTE5XX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NzRdfX19fX19fSwgMHgzQjoge2M6IFs2Ml19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTldfX19fX19fSwgMHg2Qzoge2w6IHsweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjQ1XX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NzZdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDg4Nl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTZdfX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTE5XX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkyM119fX19fX19fX0sIDB4NzE6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODkyXX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MjNdfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MTldfX19fX19fX19fSwgYzogWzYyXX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MDksIDY1MDI0XX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOSwgNjUwMjRdfX19fX19fX19LFxyXG4gICAgMHg0Nzoge2w6IHsweDYxOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE1XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5ODhdfX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI4Nl19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjkwXX19fX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyODRdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDNdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjg4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3NF19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg5MjFdfX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjddfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjZdfX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgwNV19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkyM119fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDddfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTE0XX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MjNdfX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NzhdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODE5XX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk3MF19fX19fX19LCAweDU0OiB7bDogezB4M0I6IHtjOiBbNjJdfX0sIGM6IFs2Ml19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMV19fX19fSxcclxuICAgIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzcxMV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbOTRdfX19fX0sIDB4NDE6IHtsOiB7MHg1Mjoge2w6IHsweDQ0OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyOTJdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDYwXX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Mjoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjFdfX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDdBOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTQ3Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ1OV19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzI5NF19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQ4OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4Ml19fX19fX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc4M119fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2ODoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTg5XX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ1OV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk4XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU2OF19fX19fX19LCAweDNCOiB7YzogWzg1OTZdfSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MjFdfX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjBdfX19fX19fSwgMHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDYzXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyOTNdfX19fX19fX19LCAweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODI5XX0sIDB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgyOV19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjMwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4ODldfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwMV19fX19fSwgMHg2Qjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTMzXX19fX19fX19fX19LCAweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUzNF19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NzAzXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzYzXX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZCOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxN119fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxOF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTNdfX19fX0sIDB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjEzXX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5N119fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg0NjNdfX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjk1XX19fX19fX19fX19LCAweDc5OiB7bDogezB4NjI6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4MjU5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzgyMDhdfX19fX19fX19fX19fSxcclxuICAgIDB4NDk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjA1XX19LCBjOiBbMjA1XX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIwNl19fSwgYzogWzIwNl19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDhdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzA0XX19fX19fX0sIDB4NDU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0NV19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDY1XX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDRdfX0sIGM6IFsyMDRdfX19fX19fX19LCAweDRBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzA2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI5OF19fX19fSwgMHg2Nzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Nzk6IHtsOiB7MHg0OToge2w6IHsweDNCOiB7YzogWzg1MjBdfX19fX19fX19fX19fX19fX0sIDB4M0I6IHtjOiBbODQ2NV19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NDhdfSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0N119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4OThdfX19fX19fX19fX19fX19fX19fX19LCAweDc2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZEOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzgyOTFdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzgyOTBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjVdfX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMwMl19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjhdfX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkyMV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjRdfX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjk2XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzMF19fX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMDddfX0sIGM6IFsyMDddfX19fX19fSxcclxuICAgIDB4Njk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjM3XX19LCBjOiBbMjM3XX19fX19fX19fSwgMHg2Mzoge2w6IHsweDNCOiB7YzogWzgyOTFdfSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMzhdfX0sIGM6IFsyMzhdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgwXX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNzddfX19fX0sIDB4Nzg6IHtsOiB7MHg2Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTYxXX19LCBjOiBbMTYxXX19fX19fX0sIDB4NjY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg2NjBdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAyXX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzZdfX0sIGM6IFsyMzZdfX19fX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbODUyMF19LCAweDY5OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NjRdfX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc0OV19fX19fX19LCAweDZFOiB7bDogezB4NjY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTA3MTZdfX19fX19fX19LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg0ODldfX19fX19fX19LCAweDZBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzA3XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI5OV19fX19fSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ2NV19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDY0XX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg0NjVdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzMwNV19fX19fX19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4ODg3XX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzQzN119fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NTNdfX19fX19fX19LCAweDNCOiB7YzogWzg3MTJdfSwgMHg2Njoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzM0XX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA3MTddfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzMwNV19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODkwXX19fX19fX0sIDB4M0I6IHtjOiBbODc0N119LCAweDY1OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDg0XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4OTBdfX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNzc1XX19fX19fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MTJdfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA1XX19fX19LCAweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMwM119fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTRdfX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1M119fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MTJdfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxOTFdfX0sIGM6IFsxOTFdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5OF19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcxMl19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDldfX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg5NTNdfX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODk0OF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODk0N119fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg3MTJdfX19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODI5MF19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjk3XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExMF19fX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMzldfX0sIGM6IFsyMzldfX19fX19fSxcclxuICAgIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzMwOF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0OV19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc3XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyOV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk3M119fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzJdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDI4XX19fX19fX19fX19LFxyXG4gICAgMHg2QToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzA5XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgxXX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDNdfX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs1NjddfX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1NV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5OV19fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTJdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA4XX19fX19fX19fX19LFxyXG4gICAgMHg0Qjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIyXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzEwXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTBdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3OF19fX19fSwgMHg0ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDYxXX19fX19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzNl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzMF19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk3NF19fX19fX19fX0sXHJcbiAgICAweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NTRdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwMDhdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMxMV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgyXX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDRdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMxMl19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDkzXX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExNl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1Nl19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMF19fX19fX19fX0sXHJcbiAgICAweDZDOiB7bDogezB4NDE6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjY2XX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTZdfX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDUyM119fX19fX19fX19fSwgMHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzE0XX19fX19fX19fSwgMHg2NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3Nl19fX19fX19fX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODQ2Nl19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Mjoge2w6IHsweDY0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NTVdfX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxNl19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NDFdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDIxNl19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDg4NV19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTcxXX19LCBjOiBbMTcxXX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg2NzZdfSwgMHg2Njoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA1MjddfX19fX19fSwgMHgzQjoge2M6IFs4NTkyXX0sIDB4NjY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNTI1XX19fX19LCAweDY4OiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4NjE3XX19fX19LCAweDZDOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjE5XX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDU1M119fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDYxMV19fX19fX19LCAweDc0OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NjEwXX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIxXX19fX19fX0sIDB4M0I6IHtjOiBbMTA5MjNdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI1XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkyNSwgNjUwMjRdfX19fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MDhdfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDA5OF19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTIzXX19fSwgMHg2Qjoge2w6IHsweDNCOiB7YzogWzkxXX19fX19fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwNjM1XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYzOV19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDYzN119fX19fX19fX19fX19LCAweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTBdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMThdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzE2XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5NjhdfX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTIzXX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA4M119fX19fSwgMHg2NDoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDU1MF19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjIwXX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjIyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY0OiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1OTldfX19fX19fX19LCAweDc1OiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3MV19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NjI2XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODA0XX0sIDB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkyXX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NjEwXX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg2MzddfX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjM2XX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ3XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTZdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDZdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY1MV19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MjFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5MDddfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg5MjJdfX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwNF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwNl19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc3XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MjBdfX19fX0sIDB4M0I6IHtjOiBbMTA4NzddfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3OV19LCAweDZGOiB7bDogezB4M0I6IHtjOiBbMTA4ODFdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODgzXX19fX19fX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMiwgNjUwMjRdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4OTldfX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwODg1XX19fX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkxOF19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg2Nzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTIyXX19fX19fX0sIDB4NzE6IHtsOiB7MHg2Nzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDg5MV19fX19fX19fX19fX19LCAweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjJdfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA2XX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDg5MV19fX19fSwgMHg2Njoge2w6IHsweDY5OiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2MjBdfX19fX19fX19LCAweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk3MF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDVdfX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFs4ODIyXX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDg5N119fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5NF19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODYzN119fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs4NjM2XX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDYwMl19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTYwNF19fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExM119fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0N119fX19fX19LCAweDNCOiB7YzogWzg4MTBdfSwgMHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTkwXX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwM119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTcyMl19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzMyMF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzkxMzZdfX19fX19fX19LCAweDNCOiB7YzogWzkxMzZdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4ODldfSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwODg5XX19fX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg4N119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA4ODddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDhdfX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg4MDhdfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzRdfX19fX19fX19LCAweDZGOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMjBdfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MDFdfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDIxNF19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIyOV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzEwMjM2XX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjE5XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYyMF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjI5XX19fX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU3XX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc5N119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA0XX19fX19fX19fX19LCAweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcyN119fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzk1XX19fX19fX19fSwgMHg3QToge2w6IHsweDNCOiB7YzogWzk2NzRdfSwgMHg2NToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2NzRdfX19fX19fX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTA3MzFdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs0MF19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0M119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDZdfX19fX19fSwgMHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTkxXX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1MV19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2MDVdfX19fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbODIwNl19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODg5NV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyNDldfX19fX19fX19LCAweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDFdfX19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NjI0XX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgxOF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4OTNdfX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbMTA4OTVdfX19fX19fSwgMHg3MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOTFdfX19LCAweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjE2XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjE4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzMyMl19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYzOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDkxOF19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODczXX19fX19fX0sIDB4M0I6IHtjOiBbNjBdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTE4XX19fX19fX0sIDB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA3XX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5MDVdfX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTRdfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3NV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2N119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg4NF19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjY2XX19fX19LCAweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjQ2XX19fX19fX19fX0sIGM6IFs2MF19LCAweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzBdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5OF19fX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA4LCA2NTAyNF19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzg4MDgsIDY1MDI0XX19fX19fX19fSxcclxuICAgIDB4NEM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzEzXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYyOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkyM119fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzEwMjE4XX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA2XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMxN119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTVdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1MV19fX19fSwgMHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDIxNl19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NzZdfX19fX19fSwgMHgzQjoge2M6IFs4NTkyXX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ2XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTZdfX19fX19fX19fX0sIDB4NDM6IHtsOiB7MHg2NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTY4XX19fX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE0XX19fX19fX19fX19fX19fX19fX19fX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5M119fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg1XX19fX19fX0sIDB4M0I6IHtjOiBbODY0M119fX19fX19fX19fX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5NzBdfX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk2XX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc0XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MTJdfX19fX19fX19fX0sIDB4M0I6IHtjOiBbODg2N119LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg2XX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3MDNdfX19fX19fSwgMHgzQjoge2M6IFs4ODgyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4ODRdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDU1OiB7bDogezB4NzA6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc3XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5Ml19fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg0XX19fX19fX0sIDB4M0I6IHtjOiBbODYzOV19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3OF19fX19fX19LCAweDNCOiB7YzogWzg2MzZdfX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0Njoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA2XX19fX19fX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODIyXX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTEzXX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc3XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgxOF19fX19fX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc5XX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzNdfX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjBdfSwgMHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2Nl19fX19fX19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszMTldfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMjldfX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjM0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzBdfX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzNdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMxXX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDFdfX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ2Nl19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjRdfX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzIxXX19fX19fX19fX19LCAweDU0OiB7bDogezB4M0I6IHtjOiBbNjBdfX0sIGM6IFs2MF19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMF19fX19fSxcclxuICAgIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxNzVdfX0sIGM6IFsxNzVdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5Nzk0XX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEwMDE2XX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTAwMTZdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX0sIDB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODYxNF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODYxNV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjEyXX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODYxM119fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NkI6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTY0Nl19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA3OTNdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA4NF19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzgyMTJdfX19fX19fX19LCAweDQ0OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc2Ml19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODczN119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg0ODddfX19fX0sIDB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFsxODFdfX0sIGM6IFsxODFdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs0Ml19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTkyXX19fX19fX0sIDB4M0I6IHtjOiBbODczOV19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE4M119fSwgYzogWzE4M119fX19fX19LCAweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg2M119fX0sIDB4M0I6IHtjOiBbODcyMl19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbODc2MF19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbMTA3OTRdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYzOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDk3MV19fX19fSwgMHg2NDoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODIzMF19fX19fX19LCAweDZFOiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzIzXX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODcxXX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU4XX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzIzXX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDJdfX19fX0sIDB4NzQ6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzY2XX19fX19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU2XX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg4OF19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4ODhdfX19fX19fX19fX0sXHJcbiAgICAweDREOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNTAxXX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDUyXX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI4N119fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ5OV19fX19fX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgwXX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NTA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzIzXX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzMl19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTldfX19fX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzkyNF19fX19fSxcclxuICAgIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg3MTFdfX19fX19fSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzMyNF19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg3MzYsIDg0MDJdfX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4Nzc3XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDg2NCwgODI0XX19fSwgMHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODc3OSwgODI0XX19fX19LCAweDZGOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFszMjldfX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4Nzc3XX19fX19fX19fX19LCAweDc0OiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs5ODM4XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDY5XX19fX19fX0sIDB4M0I6IHtjOiBbOTgzOF19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTYwXX19LCBjOiBbMTYwXX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzgyLCA4MjRdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3ODMsIDgyNF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgxOV19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzI4XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMyNl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc3NV19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODYxLCA4MjRdfX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4MThdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg1XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODIxMV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTMyXX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODU5OV19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk5XX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjNdfX19fX19fSwgMHgzQjoge2M6IFs4ODAwXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NCwgODI0XX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODAyXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTM2XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzAsIDgyNF19fX19fX19LCAweDc4OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcwOF19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODcwOF19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDddfX19fX0sIDB4Njc6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzg4MDcsIDgyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODE3XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODE3XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA3LCA4MjRdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3OCwgODI0XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg3OCwgODI0XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MjFdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4MTVdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTVdfX19fX19fSwgMHg0Nzoge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMSwgODI0XX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4MTEsIDg0MDJdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4MTEsIDgyNF19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYyMl19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTRdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDk5NF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTU2XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4OTU0XX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODcxNV19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE0XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjAyXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1M119fX19fX19LCAweDY0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI5XX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwNiwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MTZdfSwgMHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDJdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjIyXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODE2XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA2LCA4MjRdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3NywgODI0XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg3NywgODI0XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODE0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgyMF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxNF19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4OTM4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTNdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU0XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjAsIDgyNF19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEwLCA4NDAyXX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODEwLCA4MjRdfX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzQwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU5XX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTcyXX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3MTNdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTQ5LCA4MjRdfX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg5NTMsIDgyNF19fX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg3MTNdfX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODk1MV19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTUwXX19fX19fX19fSwgMHg2RToge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODcxNl19LCAweDc2OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs4NzE2XX19fSwgMHg2Mjoge2w6IHsweDNCOiB7YzogWzg5NThdfX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODk1N119fX19fX19fX19LCBjOiBbMTcyXX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fSwgMHgzQjoge2M6IFs4NzQyXX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzExMDA1LCA4NDIxXX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODcwNiwgODI0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzcyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODgzMl19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MjhdfX19fX19fSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbODgzMl19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDkyNywgODI0XX19fX19fX0sIDB4M0I6IHtjOiBbMTA5MjcsIDgyNF19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDU0NywgODI0XX19fSwgMHgzQjoge2M6IFs4NjAzXX0sIDB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjA1LCA4MjRdfX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTVdfX19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAzXX19fX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODkzOV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTVdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODMzXX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkyOV19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA5MjgsIDgyNF19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDNdfX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzQwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NDJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2OV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc3Ml19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc3Ml19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODc0MF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NDJdfX19fX19fSwgMHg3MToge2w6IHsweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkzMF19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkzMV19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODgzNl19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NDksIDgyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQwXX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM0LCA4NDAyXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDBdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTQ5LCA4MjRdfX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODMzXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI4LCA4MjRdfX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODgzN119LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NTAsIDgyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQxXX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1LCA4NDAyXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDFdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTUwLCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODI1XX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQxXX19LCBjOiBbMjQxXX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg4MjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MzhdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODk0MF19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTM5XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg5NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzk1N119LCAweDZEOiB7bDogezB4M0I6IHtjOiBbMzVdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NDcwXX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgxOTldfX19fX19fX19LCAweDc2OiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODEsIDg0MDJdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODc2XX19fX19fX19fSwgMHg0NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzddfX19fX19fX19LCAweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODA1LCA4NDAyXX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzYyLCA4NDAyXX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MDBdfX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Njoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDcxOF19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNDk4XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODA0LCA4NDAyXX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzYwLCA4NDAyXX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg4NCwgODQwMl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNDk5XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg1LCA4NDAyXX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjQsIDg0MDJdfX19fX19fX19LCAweDU2OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODc4XX19fX19fX19fSwgMHg0NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzldfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTMxXX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODU5OF19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk4XX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjJdfX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTM1XX19fX19fX19fX19fX0sXHJcbiAgICAweDRFOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzMyM119fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzI3XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMyNV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDUzXX19fX19LCAweDY1OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4NEQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2ODoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAzXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAzXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4Nzk6IHtsOiB7MHg1NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODExXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODEwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg0Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4MV19fX19fSwgMHg0QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODI4OF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NkI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTYwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDY5XX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5ODhdfSwgMHg0Mzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODAyXX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg0Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODEzXX19fX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NDJdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzEzXX19fX19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODAwXX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NzAsIDgyNF19fX19fX19fX19fX19fX19fX19LCAweDc4OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODE1XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MTddfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgwNywgODI0XX19fX19fX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODExLCA4MjRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyNV19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg3OCwgODI0XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgyMV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ4OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0ODoge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODIsIDgyNF19fX19fX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc4MywgODI0XX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg1NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3MDMsIDgyNF19fX19fX19LCAweDNCOiB7YzogWzg5MzhdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk0MF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODE0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MTZdfX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODI0XX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTAsIDgyNF19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg3NywgODI0XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgyMF19fX19fX19fX19fX19fX19fX19LCAweDRFOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDkxNCwgODI0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkxMywgODI0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUwOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTI3LCA4MjRdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTI4XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTZdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NTQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzA0LCA4MjRdfX19fX19fSwgMHgzQjoge2M6IFs4OTM5XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg1Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ3LCA4MjRdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODkzMF19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDgsIDgyNF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg0MF19fX19fX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjgsIDgyNF19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjldfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODMxLCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNSwgODQwMl19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODQxXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2OV19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzVdfX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3N119fX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk3N119fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDldfX0sIGM6IFsyMDldfX19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTI1XX19fX19LFxyXG4gICAgMHg0Rjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTFdfX0sIGM6IFsyMTFdfX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjEyXX19LCBjOiBbMjEyXX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1NF19fX19fSwgMHg2NDoge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzM2XX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzM4XX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgyXX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTBdfX0sIGM6IFsyMTBdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzMyXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTM3XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzkyN119fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzNF19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDQzOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg1MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIyMF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIxNl19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDgzNl19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc4XX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbMjE2XX19LCBjOiBbMjE2XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjEzXX19LCBjOiBbMjEzXX19fX19LCAweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA3XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIxNF19fSwgYzogWzIxNF19fX19fSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjU0XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTE4Ml19fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTE0MF19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxODBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQzXX19LCBjOiBbMjQzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTldfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI0NF19fSwgYzogWzI0NF19LCAweDNCOiB7YzogWzg4NThdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg2XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2MV19fX19fX19LCAweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzM3XX19fX19fX19fSwgMHg2OToge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA4MDhdfX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTddfX19fX0sIDB4NzM6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY4NF19fX19fX19fX19fSwgMHg2NToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzMzOV19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY4N119fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTA4XX19fX19LCAweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzczMV19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI0Ml19fSwgYzogWzI0Ml19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2ODldfX19fX0sIDB4Njg6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY3N119fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbOTM3XX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTBdfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MzRdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY4Nl19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNjgzXX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNTRdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjg4XX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzMzXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTY5XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzk1OV19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY3OF19fX0sIDB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1NF19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDY3OV19fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDY4MV19fX19fX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NTNdfX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYzNV19fX19fX19LCAweDNCOiB7YzogWzg3NDRdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwODQ1XX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1MDBdfSwgMHg2Rjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODUwMF19fX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxNzBdfX0sIGM6IFsxNzBdfSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzE4Nl19fSwgYzogWzE4Nl19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4ODg2XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4MzhdfX19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwODM5XX19fX19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTA4NDNdfX19fX0sIDB4NTM6IHtsOiB7MHgzQjoge2M6IFs5NDE2XX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTAwXX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbMjQ4XX19LCBjOiBbMjQ4XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NTZdfX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ1XX19LCBjOiBbMjQ1XX19fX19LCAweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgwNl19fX19fSwgMHgzQjoge2M6IFs4ODU1XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzI0Nl19fSwgYzogWzI0Nl19fX19fSwgMHg3Njoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwMjFdfX19fX19fX19fX0sXHJcbiAgICAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTgyXX0sIDB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQxXX19fX19fX19fX0sIGM6IFsxODJdfSwgMHgzQjoge2M6IFs4NzQxXX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA5OTVdfX19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMTAwNV19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg3MDZdfX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA4N119fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzddfX19fX19fSwgMHg2OToge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs0Nl19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzgyNDBdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg4NjldfX19LCAweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODI0MV19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDldfX19fX0sIDB4Njg6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2Nl19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTgxXX19fX19LCAweDZEOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ5OV19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTc0Ml19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjBdfSwgMHg3NDoge2w6IHsweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2Njoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg5MTZdfX19fX19fX19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTgyXX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4NDYzXX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NDYyXX19fX19fX0sIDB4NkI6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg0NjNdfX19fX19fX19LCAweDc1OiB7bDogezB4NzM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzg3XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDNCOiB7YzogWzg4NjJdfX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzg2XX19fX19fX0sIDB4M0I6IHtjOiBbNDNdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODcyNF19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDc4OV19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwODY2XX19fSwgMHg2RDoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTc3XX19LCBjOiBbMTc3XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDc5MF19fX19fX19LCAweDc0OiB7bDogezB4Nzc6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzEwNzkxXX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxNzddfX19LCAweDZGOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzNdfX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTYxXX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzE2M119fSwgYzogWzE2M119fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTM1XX19fX19LCAweDNCOiB7YzogWzg4MjZdfSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODI4XX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwOTM1XX19fX19fX19fX19fX0sIDB4M0I6IHtjOiBbODgyNl19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgyOF19fX19fX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI3XX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzddfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDkzM119fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzZdfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fX19LCAweDNCOiB7YzogWzEwOTI3XX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTMxXX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjQyXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDczXX19fX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDkzN119fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTMzXX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM2XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODcxOV19fX0sIDB4NjY6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwMDZdfX19fX19fX19LCAweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk3OF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4OTc5XX19fX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODczM119LCAweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODMwXX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODgwXX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwNV19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzk2OF19fX19fSwgMHg3NToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODIwMF19fX19fX19fX19fX19LFxyXG4gICAgMHg1MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ0OiB7bDogezB4M0I6IHtjOiBbODcwNl19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNTVdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4M119fX19fSwgMHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTM0XX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTI4XX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg0RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTc3XX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NjBdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NzNdfX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTM5XX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyNl19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkyN119fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MjhdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODMwXX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDNdfX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcxOV19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODczM119fX19fSwgMHgzQjoge2M6IFs4NzU5XX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc5XX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTM2XX19fX19fX0sXHJcbiAgICAweDUxOiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4NF19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDc0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTgwXX19fX19fX0sIDB4NTU6IHtsOiB7MHg0Rjoge2w6IHsweDU0OiB7bDogezB4M0I6IHtjOiBbMzRdfX0sIGM6IFszNF19fX19fX19LFxyXG4gICAgMHg3MToge2w6IHsweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTBdfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NjRdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjJdfX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI3OV19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDZdfX19fX19fSwgMHg3NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NjFdfX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzc0XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzYzXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3OTldfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzM0XX19LCBjOiBbMzRdfX19fX19fSxcclxuICAgIDB4NzI6IHtsOiB7MHg0MToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjddfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1OF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTI0XX19fX19fX19fX19LCAweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NjUsIDgxN119fX0sIDB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQxXX19fX19fX19fSwgMHg2NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4NzMwXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4NzQ6IHtsOiB7MHg3OToge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA2NzVdfX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMTddfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjQyXX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwNjYxXX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTAyMTddfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzE4N119fSwgYzogWzE4N119fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNjEzXX19fX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODY3N119LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyOF19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbMTA1NDddfX19LCAweDNCOiB7YzogWzg1OTRdfSwgMHg2Njoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA1MjZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg2MThdfX19fX0sIDB4NkM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MjBdfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTY1XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjEyXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTFdfX19fX0sIDB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjA1XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDUyMl19fX19fX19LCAweDY5OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzU4XX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDc0XX19fX19fX19fX19fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MDldfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDA5OV19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTI1XX19fSwgMHg2Qjoge2w6IHsweDNCOiB7YzogWzkzXX19fX19fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwNjM2XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYzOF19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDY0MF19fX19fX19fX19fX19LCAweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTFdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNDVdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzQzXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5NjldfX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTI1XX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA4OF19fX19fSwgMHg2NDoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDU1MV19fX19fSwgMHg2Qzoge2w6IHsweDY0OiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MDFdfX19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIyMV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODIyMV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjddfX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NDc2XX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ3NV19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ3Nl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDc3XX19fX19fX0sIDB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NDVdfX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxNzRdfX0sIGM6IFsxNzRdfX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyMV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcxXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMV19fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5Nl19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODY0MV19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs4NjQwXX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDYwNF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHgzQjoge2M6IFs5NjFdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwMDldfX19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk0XX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NjExXX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg2NDFdfX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjQwXX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ0XX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NTJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY0OV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDVdfX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwOF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzczMF19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3ODddfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1Ml19fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbODIwN119fX19fSwgMHg2RDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY4OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5MTM3XX19fX19fX19fSwgMHgzQjoge2M6IFs5MTM3XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA5OTBdfX19fX19fX19LCAweDZGOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMjFdfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MDJdfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDIxNV19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjMwXX19fX19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTYzXX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc5OF19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA1XX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbNDFdfSwgMHg2Nzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2NDRdfX19fX19fX19LCAweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzcwXX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDldfX19fX19fX19LCAweDczOiB7bDogezB4NjE6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjUwXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA3XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNV19fX0sIDB4NzE6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzkzXX19fSwgMHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIxN119LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODIxN119fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkwOF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTA2XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1N119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg4NV19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjU2XX19fSwgMHg2Qzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzEwNzAyXX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwMF19fX19fX19fX19fX19LCAweDc4OiB7bDogezB4M0I6IHtjOiBbODQ3OF19fX19fSxcclxuICAgIDB4NTI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQwXX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMTldfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDhdfSwgMHg3NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MThdfX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMl19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM0NF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNDJdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1Nl19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg0NzZdfSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX19fX19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX19fX19fX19fX19fX19fX19fX19fX19LCAweDU1OiB7bDogezB4NzA6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Mjoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA2MDddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NDc6IHtsOiB7MHgzQjoge2M6IFsxNzRdfX0sIGM6IFsxNzRdfX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDc2XX19fX19LCAweDY4OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs5MjldfX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NzddfX19fX19fSwgMHgzQjoge2M6IFs4NTk0XX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY0NF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1OF19fX19fX19fX19fSwgMHg0Mzoge2w6IHsweDY1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg5NjldfX19fX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTAyMTVdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg5XX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODFdfX19fX19fSwgMHgzQjoge2M6IFs4NjQyXX19fX19fX19fX19fX19fX19fX19fSwgMHg0Njoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk3MV19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxNF19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODY2XX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODddfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwNF19fX19fX19LCAweDNCOiB7YzogWzg4ODNdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg4NV19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzVdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTg4XX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODBdfX19fX19fSwgMHgzQjoge2M6IFs4NjM4XX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc5XX19fX19fX0sIDB4M0I6IHtjOiBbODY0MF19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ3N119fX19fSwgMHg3NToge2w6IHsweDZFOiB7bDogezB4NjQ6IHtsOiB7MHg0OToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNjA4XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2N119fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ3NV19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjVdfX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDQ6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDc0MF19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NTM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQ2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNTJdfX19fX19fX19LCAweDNCOiB7YzogWzEwOTQwXX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTBdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM0OF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1N119fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg2XX19fX19LCAweDQ4OiB7bDogezB4NDM6IHtsOiB7MHg0ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY1XX19fX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2NF19fX19fX19LCAweDY4OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5NV19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTJdfX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTRdfX19fX19fX19fX19fX19fX19fX19LCAweDU1OiB7bDogezB4NzA6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5M119fX19fX19fX19fX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkzMV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzI4XX19fX19fX19fX19fX19fX19fX19fSwgMHg0Rjoge2w6IHsweDQ2OiB7bDogezB4NTQ6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2OF19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMzhdfX19fX19fSwgMHg3MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzMwXX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTYzM119LCAweDQ5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4NTFdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ3XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NDldfX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NTBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDU1OiB7bDogezB4NkU6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4ODUyXX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODJdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTAyXX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg5MTJdfSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTEyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MzhdfX19fX19fX19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI3XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTI4XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgyOV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzFdfX19fX19fX19fX19fX19fX19fX19LCAweDY4OiB7bDogezB4NTQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzIxXX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg5MTNdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNV19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODM5XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTEzXX19fX19fX19fX19fX0sXHJcbiAgICAweDczOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM0N119fX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMThdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTM2XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNTNdfX19fX19fX19LCAweDNCOiB7YzogWzg4MjddfSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDkyOF19LCAweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM1MV19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDkzMl19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzhdfX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDkzNF19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzN119fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzFdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODMxXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg5XX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg2NV19fX0sIDB4M0I6IHtjOiBbODkwMV19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NTRdfX19fX19fX19LCAweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY4OiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDUzM119fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDBdfSwgMHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMF19fX19fX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjY0XX19fX19fX0sIDB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE2N119fSwgYzogWzE2N119fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzU5XX19fX19LCAweDczOiB7bDogezB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzddfX19fX19fX19LCAweDc0OiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjZdfX19fX19fX19LCAweDZFOiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19LCAweDc4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDAzOF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTJdfSwgMHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTk0XX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbOTgzOV19fX19fX19LCAweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5N119fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5Nl19fX19fSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzM5XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NDFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxNzNdfX0sIGM6IFsxNzNdfX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTYzXX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjJdfX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTYyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjRdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg1OF19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc3MV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwOTEwXX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDkxMl19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTA5XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDkxMV19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3NF19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzg4XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjEwXX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTkyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgwM119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA3MjRdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODczOV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5OTVdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTIyXX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDkyNF19LCAweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MjQsIDY1MDI0XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5MDIzXX19fX19LCAweDNCOiB7YzogWzEwNjkyXX19fSwgMHgzQjoge2M6IFs0N119fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2NF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODI0XX0sIDB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgyNF19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19LCAweDcxOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg1MV19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODg1MSwgNjUwMjRdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg1Ml19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODg1MiwgNjUwMjRdfX19fX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4NDddfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDldfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0OV19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODg0OF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg1MF19fX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0OF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODUwXX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTYzM119fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX0sIDB4M0I6IHtjOiBbOTYzM119LCAweDY2OiB7bDogezB4M0I6IHtjOiBbOTY0Ml19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODU5NF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA4XX19fX19LCAweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTk1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg5MDJdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTczNF19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbOTczM119fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTAxM119fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTgxXX19fX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxNzVdfX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODM0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5NDFdfX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTQ5XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MzhdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0N119fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0NV19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU1XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDJdfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDk0M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxN119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODM4XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk0OV19fX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDJdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTU1XX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwOTUxXX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDk2NV19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDk2M119fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwOTM2XX19fX19fX19fX19fX0sIDB4M0I6IHtjOiBbODgyN119LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgyOV19fX19fX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI4XX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzhdfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDkzNF19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzddfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzFdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzIxXX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbOTgzNF19fX19fSwgMHg3MDoge2w6IHsweDMxOiB7bDogezB4M0I6IHtjOiBbMTg1XX19LCBjOiBbMTg1XX0sIDB4MzI6IHtsOiB7MHgzQjoge2M6IFsxNzhdfX0sIGM6IFsxNzhdfSwgMHgzMzoge2w6IHsweDNCOiB7YzogWzE3OV19fSwgYzogWzE3OV19LCAweDNCOiB7YzogWzg4MzVdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0Ml19fX19fSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDk2OF19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1MF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODM5XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5NDhdfX19fX19fX19LCAweDY4OiB7bDogezB4NzM6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTAxODVdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY3XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjE5XX19fX19fX19fSwgMHg2RDoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ2XX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NTZdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0M119fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTQ0XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MzldfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTUwXX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTZdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA5NTJdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY0XX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTY2XX19fX19fX19fX19LCAweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY4OiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDUzNF19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDFdfSwgMHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMV19fX19fX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjY1XX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUzOF19fX19fX19fX19fSwgMHg3QToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzIyM119fSwgYzogWzIyM119fX19fX19fX0sXHJcbiAgICAweDU0OiB7bDogezB4NjE6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzldfX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTMyXX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNTZdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzU0XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNThdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4N119fX19fSwgMHg2ODoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc1Nl19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MjBdfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI4NywgODIwMl19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIwMV19fX19fX19fX19fX19fX19fSwgMHg0ODoge2w6IHsweDRGOiB7bDogezB4NTI6IHtsOiB7MHg0RToge2w6IHsweDNCOiB7YzogWzIyMl19fSwgYzogWzIyMl19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2NF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzNdfX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3Nl19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzOV19fX19fX19LCAweDUyOiB7bDogezB4NDE6IHtsOiB7MHg0NDoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODQ4Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDcwOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg0MTFdfX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTgzXX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzU4XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjJdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzNV19fX19fX19fX19fSxcclxuICAgIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk4Ml19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NjRdfX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0MF19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNTddfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzU1XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwOTBdfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQxMV19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTgxXX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTNdfX19fX0sIDB4Njg6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzNDoge2w6IHsweDNCOiB7YzogWzg3NTZdfX19LCAweDY2OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc1Nl19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NTJdfSwgMHg3Mzoge2w6IHsweDc5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5NzddfX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzk3N119fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbODc3Nl19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjRdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODIwMV19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc3Nl19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY0XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNTRdfX0sIGM6IFsyNTRdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzczMl19fX19fX19LCAweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODAxXX19fX19LCAweDNCOiB7YzogWzg4NjRdfX19LCAweDNCOiB7YzogWzIxNV19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MDBdfX19fSwgYzogWzIxNV19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc0OV19fX19fX19LCAweDZGOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTM2XX19fX19LCAweDcwOiB7bDogezB4NjI6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTAxNF19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTkzXX19fX19fX0sIDB4M0I6IHtjOiBbODg2OF19LCAweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY1XX0sIDB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA5NzBdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTM3XX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDRdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDgyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY1M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTY2M119fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjY3XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4ODRdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg3OTZdfX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjU3XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4ODVdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NzA4XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzk2XX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MTBdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgwOV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwNzAxXX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4MTFdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDdBOiB7bDogezB4Njk6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbOTE4Nl19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA5XX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwOTRdfX19fX0sIDB4Njg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExNV19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzU5XX19fX19fX19fX19LCAweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMl19fX19fX19LCAweDZGOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NjQ6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjA2XX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjA4XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg1NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMThdfX0sIGM6IFsyMThdfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYwN119LCAweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NjldfX19fX19fX19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzOF19fX19fSwgMHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjRdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMTldfX0sIGM6IFsyMTldfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU5XX19fX19LCAweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNjhdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4OF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjE3XX19LCBjOiBbMjE3XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzM2Ml19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NV19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzkxODNdfX19LCAweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzkxNDFdfX19fX19fX19fX19fX19LCAweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5MTgxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4OTldfSwgMHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NDZdfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNzBdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTRdfX19fX19fSwgMHgzQjoge2M6IFs4NTkzXX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY0NV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1N119fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk3XX19fX19fX19fX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MV19fX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwNl19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk4XX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk5XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTc4XX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTMzXX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjEzXX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjldfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzY2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODRdfX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzYwXX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIyMF19fSwgYzogWzIyMF19fX19fX19LFxyXG4gICAgMHg3NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNTBdfX0sIGM6IFsyNTBdfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODU5M119fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTddfX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMThdfX19fX0sIDB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzY1XX19fX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjUxXX19LCBjOiBbMjUxXX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5MV19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDVdfX19fX19fSwgMHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM2OV19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MDZdfX19fX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyMl19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTRdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI0OV19fSwgYzogWzI0OV19fX19fX19fX0sIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1OTVdfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MzldfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYzOF19fX19fX19LCAweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzk2MDBdfX19fX19fX19LCAweDZDOiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTg4XX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5ODhdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk3NV19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTcyMF19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszNjNdfX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzE2OF19fSwgYzogWzE2OF19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszNzFdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY2XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5M119fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk3XX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzldfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjM4XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg0Nl19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjVdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk3OF19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTY1XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ4XX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5ODldfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk4OV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTc0XX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszNjddfX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIxXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTBdfX19fX19fSwgMHg3NDoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDRdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM2MV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NTNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NTJdfX19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0OF19fX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyNTJdfX0sIGM6IFsyNTJdfX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjNdfX19fX19fX19fX19fX19LFxyXG4gICAgMHg3Njoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY1Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzEwMTNdfX19fX19fX19fX19fX19LCAweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDA4XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODcwOV19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTgxXX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTgyXX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODczM119fX19fX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODU5N119LCAweDY4OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFsxMDA5XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk2Ml19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDIsIDY1MDI0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1NSwgNjUwMjRdfX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQzLCA2NTAyNF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTYsIDY1MDI0XX19fX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTc3XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg4Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4ODNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjYxXX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5ODRdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTg1XX19fX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3NF19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NjZdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3Ml19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NToge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4OTFdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ0XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3OTRdfX19fX19fSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg5NDJdfX19fX19fX19LCAweDcyOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTI0XX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMjRdfX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTE1XX19fX19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODg4Ml19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODM0LCA4NDAyXX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg4MzUsIDg0MDJdfX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2N119fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODczM119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODgzXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTFdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1NSwgNjUwMjRdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0MiwgNjUwMjRdfX19fX19fSwgMHg3MDoge2w6IHsweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1NiwgNjUwMjRdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0MywgNjUwMjRdfX19fX19fX19fX0sIDB4N0E6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4N0E6IHtsOiB7MHg2MToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTA2NTBdfX19fX19fX19fX19fX19LFxyXG4gICAgMHg1Njoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTg3XX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNDJdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODczXX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDk4Ml19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzVdfX19fX19fX19LCAweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODk3XX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMTRdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzgyMTRdfSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MzldfX19fX19fSwgMHg0Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEyNF19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2NToge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAwNzJdfX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2OF19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHg1NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAyXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA4OV19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDFdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODVdfX19fX19fSwgMHg3Njoge2w6IHsweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3NF19fX19fX19fX19fX19LFxyXG4gICAgMHg1Nzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzcyXX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTZdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTBdfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQyXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg2XX19fX19fX19fSxcclxuICAgIDB4Nzc6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM3M119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODQ3XX19fX19fX0sIDB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3NDNdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg3OTNdfX19fX19fX19LCAweDY5OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODQ3Ml19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTE2XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2OF19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODQ3Ml19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NzY4XX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NzY4XX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMl19fX19fX19fX0sXHJcbiAgICAweDc4OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs5NzExXX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4OTldfX19fX19fSwgMHg2NDoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NjFdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTddfX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDIzMV19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjM0XX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzk1OF19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDIyOV19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDIzNl19fX19fX19LCAweDZFOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5NTVdfX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzUyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2OV19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3NTNdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA3NTRdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDIzMF19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMzXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTNdfX19fX0sIDB4NzE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDc1OF19fX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3NTZdfX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NTFdfX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX19fX19LFxyXG4gICAgMHg1ODoge2w6IHsweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTFdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MjZdfX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0M119fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4N119fX19fX19fX0sXHJcbiAgICAweDU5OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyMV19fSwgYzogWzIyMV19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3MV19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzc0XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY3XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTJdfX19fX0sIDB4NDk6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzMV19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0NF19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4OF19fX19fX19LCAweDU1OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNzBdfX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNzZdfX19fX19fX19LFxyXG4gICAgMHg3OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNTNdfX0sIGM6IFsyNTNdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAzXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzVdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwOTldfX19fX0sIDB4NjU6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzE2NV19fSwgYzogWzE2NV19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExOF19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTExXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTcwXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDE0XX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwMl19fX19fSwgMHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjU1XX19LCBjOiBbMjU1XX19fX19fX0sXHJcbiAgICAweDVBOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM3N119fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzgxXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDddfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzc5XX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NTc6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAzXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxOF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDg4XX19fX19LCAweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNDZdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDg0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg5XX19fX19fX19fSxcclxuICAgIDB4N0E6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzc4XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszODJdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3OV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszODBdfX19fX19fSwgMHg2NToge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ4OF19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1MF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTldfX19fX0sIDB4Njg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3OF19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjldfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNzFdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTVdfX19fX19fSwgMHg3Nzoge2w6IHsweDZBOiB7bDogezB4M0I6IHtjOiBbODIwNV19fX0sIDB4NkU6IHtsOiB7MHg2QToge2w6IHsweDNCOiB7YzogWzgyMDRdfX19fX19fX19XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBVTklDT0RFLkNPREVfUE9JTlRTO1xuXG4vL1V0aWxzXG5cbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcbi8vdGhpcyBmdW5jdGlvbnMgaWYgdGhleSB3aWxsIGJlIHNpdHVhdGVkIGluIGFub3RoZXIgbW9kdWxlIGR1ZSB0byBjb250ZXh0IHN3aXRjaC5cbi8vQWx3YXlzIHBlcmZvcm0gaW5saW5pbmcgY2hlY2sgYmVmb3JlIG1vZGlmeWluZyB0aGlzIGZ1bmN0aW9ucyAoJ25vZGUgLS10cmFjZS1pbmxpbmluZycpLlxuZnVuY3Rpb24gaXNSZXNlcnZlZENvZGVQb2ludChjcCkge1xuICAgIHJldHVybiBjcCA+PSAweEQ4MDAgJiYgY3AgPD0gMHhERkZGIHx8IGNwID4gMHgxMEZGRkY7XG59XG5cbmZ1bmN0aW9uIGlzU3Vycm9nYXRlUGFpcihjcDEsIGNwMikge1xuICAgIHJldHVybiBjcDEgPj0gMHhEODAwICYmIGNwMSA8PSAweERCRkYgJiYgY3AyID49IDB4REMwMCAmJiBjcDIgPD0gMHhERkZGO1xufVxuXG5mdW5jdGlvbiBnZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50KGNwMSwgY3AyKSB7XG4gICAgcmV0dXJuIChjcDEgLSAweEQ4MDApICogMHg0MDAgKyAweDI0MDAgKyBjcDI7XG59XG5cbi8vUHJlcHJvY2Vzc29yXG4vL05PVEU6IEhUTUwgaW5wdXQgcHJlcHJvY2Vzc2luZ1xuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtKVxudmFyIFByZXByb2Nlc3NvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB0aGlzLndyaXRlKGh0bWwpO1xuXG4gICAgLy9OT1RFOiBvbmUgbGVhZGluZyBVK0ZFRkYgQllURSBPUkRFUiBNQVJLIGNoYXJhY3RlciBtdXN0IGJlIGlnbm9yZWQgaWYgYW55IGFyZSBwcmVzZW50IGluIHRoZSBpbnB1dCBzdHJlYW0uXG4gICAgdGhpcy5wb3MgPSB0aGlzLmh0bWwuY2hhckNvZGVBdCgwKSA9PT0gJC5CT00gPyAwIDogLTE7XG5cbiAgICB0aGlzLmdhcFN0YWNrID0gW107XG4gICAgdGhpcy5sYXN0R2FwUG9zID0gLTE7XG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbn07XG5cblByZXByb2Nlc3Nvci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIGlmICh0aGlzLmh0bWwpIHtcbiAgICAgICAgdGhpcy5odG1sID0gdGhpcy5odG1sLnN1YnN0cmluZygwLCB0aGlzLnBvcyArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbC5zdWJzdHJpbmcodGhpcy5wb3MgKyAxLCB0aGlzLmh0bWwubGVuZ3RoKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuaHRtbCA9IGh0bWw7XG5cblxuICAgIHRoaXMubGFzdENoYXJQb3MgPSB0aGlzLmh0bWwubGVuZ3RoIC0gMTtcbn07XG5cblByZXByb2Nlc3Nvci5wcm90b3R5cGUuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb3MrKztcblxuICAgIGlmICh0aGlzLnBvcyA+IHRoaXMubGFzdENoYXJQb3MpXG4gICAgICAgIHJldHVybiAkLkVPRjtcblxuICAgIHZhciBjcCA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcblxuICAgIC8vTk9URTogYW55IFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXJzIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93IGEgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpIGNoYXJhY3RlclxuICAgIC8vbXVzdCBiZSBpZ25vcmVkLlxuICAgIGlmICh0aGlzLnNraXBOZXh0TmV3TGluZSAmJiBjcCA9PT0gJC5MSU5FX0ZFRUQpIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWRkR2FwKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VBbmRQZWVrQ29kZVBvaW50KCk7XG4gICAgfVxuXG4gICAgLy9OT1RFOiBhbGwgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpIGNoYXJhY3RlcnMgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlcnNcbiAgICBpZiAoY3AgPT09ICQuQ0FSUklBR0VfUkVUVVJOKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICQuTElORV9GRUVEO1xuICAgIH1cblxuICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG5cbiAgICAvL09QVElNSVpBVElPTjogZmlyc3QgcGVyZm9ybSBjaGVjayBpZiB0aGUgY29kZSBwb2ludCBpbiB0aGUgYWxsb3dlZCByYW5nZSB0aGF0IGNvdmVycyBtb3N0IGNvbW1vblxuICAgIC8vSFRNTCBpbnB1dCAoZS5nLiBBU0NJSSBjb2RlcykgdG8gYXZvaWQgcGVyZm9ybWFuY2UtY29zdCBvcGVyYXRpb25zIGZvciBoaWdoLXJhbmdlIGNvZGUgcG9pbnRzLlxuICAgIHJldHVybiBjcCA+PSAweEQ4MDAgPyB0aGlzLl9wcm9jZXNzSGlnaFJhbmdlQ29kZVBvaW50KGNwKSA6IGNwO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5fcHJvY2Vzc0hpZ2hSYW5nZUNvZGVQb2ludCA9IGZ1bmN0aW9uIChjcCkge1xuICAgIC8vTk9URTogdHJ5IHRvIHBlZWsgYSBzdXJyb2dhdGUgcGFpclxuICAgIGlmICh0aGlzLnBvcyAhPT0gdGhpcy5sYXN0Q2hhclBvcykge1xuICAgICAgICB2YXIgbmV4dENwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcblxuICAgICAgICBpZiAoaXNTdXJyb2dhdGVQYWlyKGNwLCBuZXh0Q3ApKSB7XG4gICAgICAgICAgICAvL05PVEU6IHdlIGhhdmUgYSBzdXJyb2dhdGUgcGFpci4gUGVlayBwYWlyIGNoYXJhY3RlciBhbmQgcmVjYWxjdWxhdGUgY29kZSBwb2ludC5cbiAgICAgICAgICAgIHRoaXMucG9zKys7XG4gICAgICAgICAgICBjcCA9IGdldFN1cnJvZ2F0ZVBhaXJDb2RlUG9pbnQoY3AsIG5leHRDcCk7XG5cbiAgICAgICAgICAgIC8vTk9URTogYWRkIGdhcCB0aGF0IHNob3VsZCBiZSBhdm9pZGVkIGR1cmluZyByZXRyZWF0XG4gICAgICAgICAgICB0aGlzLl9hZGRHYXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSlcbiAgICAgICAgY3AgPSAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcblxuICAgIHJldHVybiBjcDtcbn07XG5cblByZXByb2Nlc3Nvci5wcm90b3R5cGUuX2FkZEdhcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmdhcFN0YWNrLnB1c2godGhpcy5sYXN0R2FwUG9zKTtcbiAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLnBvcztcbn07XG5cblByZXByb2Nlc3Nvci5wcm90b3R5cGUucmV0cmVhdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5wb3MgPT09IHRoaXMubGFzdEdhcFBvcykge1xuICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLmdhcFN0YWNrLnBvcCgpO1xuICAgICAgICB0aGlzLnBvcy0tO1xuICAgIH1cblxuICAgIHRoaXMucG9zLS07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFByZXByb2Nlc3NvciA9IHJlcXVpcmUoJy4vcHJlcHJvY2Vzc29yJyksXHJcbiAgICBMb2NhdGlvbkluZm9NaXhpbiA9IHJlcXVpcmUoJy4vbG9jYXRpb25faW5mb19taXhpbicpLFxyXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXHJcbiAgICBOQU1FRF9FTlRJVFlfVFJJRSA9IHJlcXVpcmUoJy4vbmFtZWRfZW50aXR5X3RyaWUnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IFVOSUNPREUuQ09ERV9QT0lOVFMsXHJcbiAgICAkJCA9IFVOSUNPREUuQ09ERV9QT0lOVF9TRVFVRU5DRVM7XHJcblxyXG4vL1JlcGxhY2VtZW50IGNvZGUgcG9pbnRzIGZvciBudW1lcmljIGVudGl0aWVzXHJcbnZhciBOVU1FUklDX0VOVElUWV9SRVBMQUNFTUVOVFMgPSB7XHJcbiAgICAweDAwOiAweEZGRkQsIDB4MEQ6IDB4MDAwRCwgMHg4MDogMHgyMEFDLCAweDgxOiAweDAwODEsIDB4ODI6IDB4MjAxQSwgMHg4MzogMHgwMTkyLCAweDg0OiAweDIwMUUsXHJcbiAgICAweDg1OiAweDIwMjYsIDB4ODY6IDB4MjAyMCwgMHg4NzogMHgyMDIxLCAweDg4OiAweDAyQzYsIDB4ODk6IDB4MjAzMCwgMHg4QTogMHgwMTYwLCAweDhCOiAweDIwMzksXHJcbiAgICAweDhDOiAweDAxNTIsIDB4OEQ6IDB4MDA4RCwgMHg4RTogMHgwMTdELCAweDhGOiAweDAwOEYsIDB4OTA6IDB4MDA5MCwgMHg5MTogMHgyMDE4LCAweDkyOiAweDIwMTksXHJcbiAgICAweDkzOiAweDIwMUMsIDB4OTQ6IDB4MjAxRCwgMHg5NTogMHgyMDIyLCAweDk2OiAweDIwMTMsIDB4OTc6IDB4MjAxNCwgMHg5ODogMHgwMkRDLCAweDk5OiAweDIxMjIsXHJcbiAgICAweDlBOiAweDAxNjEsIDB4OUI6IDB4MjAzQSwgMHg5QzogMHgwMTUzLCAweDlEOiAweDAwOUQsIDB4OUU6IDB4MDE3RSwgMHg5RjogMHgwMTc4XHJcbn07XHJcblxyXG4vL1N0YXRlc1xyXG52YXIgREFUQV9TVEFURSA9ICdEQVRBX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURSA9ICdDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0RBVEFfU1RBVEUnLFxyXG4gICAgUkNEQVRBX1NUQVRFID0gJ1JDREFUQV9TVEFURScsXHJcbiAgICBDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURSA9ICdDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURScsXHJcbiAgICBSQVdURVhUX1NUQVRFID0gJ1JBV1RFWFRfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfU1RBVEUgPSAnU0NSSVBUX0RBVEFfU1RBVEUnLFxyXG4gICAgUExBSU5URVhUX1NUQVRFID0gJ1BMQUlOVEVYVF9TVEFURScsXHJcbiAgICBUQUdfT1BFTl9TVEFURSA9ICdUQUdfT1BFTl9TVEFURScsXHJcbiAgICBFTkRfVEFHX09QRU5fU1RBVEUgPSAnRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFRBR19OQU1FX1NUQVRFID0gJ1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFJDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdSQ0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURSA9ICdSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEUgPSAnUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURScsXHJcbiAgICBSQVdURVhUX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1JBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEUgPSAnUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEUgPSAnUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VORF9UQUdfT1BFTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURScsXHJcbiAgICBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9OQU1FX1NUQVRFID0gJ0FUVFJJQlVURV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0FUVFJJQlVURV9OQU1FX1NUQVRFID0gJ0FGVEVSX0FUVFJJQlVURV9OQU1FX1NUQVRFJyxcclxuICAgIEJFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEUgPSAnQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURScsXHJcbiAgICBBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEUgPSAnQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFJyxcclxuICAgIEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEUgPSAnQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURScsXHJcbiAgICBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFID0gJ1NFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUnLFxyXG4gICAgQk9HVVNfQ09NTUVOVF9TVEFURSA9ICdCT0dVU19DT01NRU5UX1NUQVRFJyxcclxuICAgIE1BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFID0gJ01BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBUlRfU1RBVEUgPSAnQ09NTUVOVF9TVEFSVF9TVEFURScsXHJcbiAgICBDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEUgPSAnQ09NTUVOVF9TVEFSVF9EQVNIX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBVEUgPSAnQ09NTUVOVF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9EQVNIX1NUQVRFID0gJ0NPTU1FTlRfRU5EX0RBU0hfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9FTkRfU1RBVEUgPSAnQ09NTUVOVF9FTkRfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9FTkRfQkFOR19TVEFURSA9ICdDT01NRU5UX0VORF9CQU5HX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfU1RBVEUgPSAnRE9DVFlQRV9TVEFURScsXHJcbiAgICBCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9OQU1FX1NUQVRFID0gJ0RPQ1RZUEVfTkFNRV9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURScsXHJcbiAgICBCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURSA9ICdCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURScsXHJcbiAgICBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUgPSAnRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIEJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURSA9ICdCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9TWVNURU1fS0VZV09SRF9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgQk9HVVNfRE9DVFlQRV9TVEFURSA9ICdCT0dVU19ET0NUWVBFX1NUQVRFJyxcclxuICAgIENEQVRBX1NFQ1RJT05fU1RBVEUgPSAnQ0RBVEFfU0VDVElPTl9TVEFURSc7XHJcblxyXG4vL1V0aWxzXHJcblxyXG4vL09QVElNSVpBVElPTjogdGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBtb3ZlZCBvdXQgb2YgdGhpcyBtb2R1bGUuIFY4IENyYW5rc2hhZnQgd2lsbCBub3QgaW5saW5lXHJcbi8vdGhpcyBmdW5jdGlvbnMgaWYgdGhleSB3aWxsIGJlIHNpdHVhdGVkIGluIGFub3RoZXIgbW9kdWxlIGR1ZSB0byBjb250ZXh0IHN3aXRjaC5cclxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXHJcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjcCkge1xyXG4gICAgcmV0dXJuIGNwID09PSAkLlNQQUNFIHx8IGNwID09PSAkLkxJTkVfRkVFRCB8fCBjcCA9PT0gJC5UQUJVTEFUSU9OIHx8IGNwID09PSAkLkZPUk1fRkVFRDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaURpZ2l0KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5ESUdJVF8wICYmIGNwIDw9ICQuRElHSVRfOTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaVVwcGVyKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5MQVRJTl9DQVBJVEFMX0EgJiYgY3AgPD0gJC5MQVRJTl9DQVBJVEFMX1o7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXNjaWlMb3dlcihjcCkge1xyXG4gICAgcmV0dXJuIGNwID49ICQuTEFUSU5fU01BTExfQSAmJiBjcCA8PSAkLkxBVElOX1NNQUxMX1o7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXNjaWlBbHBoYU51bWVyaWMoY3ApIHtcclxuICAgIHJldHVybiBpc0FzY2lpRGlnaXQoY3ApIHx8IGlzQXNjaWlVcHBlcihjcCkgfHwgaXNBc2NpaUxvd2VyKGNwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEaWdpdChjcCwgaXNIZXgpIHtcclxuICAgIHJldHVybiBpc0FzY2lpRGlnaXQoY3ApIHx8IChpc0hleCAmJiAoKGNwID49ICQuTEFUSU5fQ0FQSVRBTF9BICYmIGNwIDw9ICQuTEFUSU5fQ0FQSVRBTF9GKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3AgPj0gJC5MQVRJTl9TTUFMTF9BICYmIGNwIDw9ICQuTEFUSU5fU01BTExfRikpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNSZXNlcnZlZENvZGVQb2ludChjcCkge1xyXG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCAmJiBjcCA8PSAweERGRkYgfHwgY3AgPiAweDEwRkZGRjtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgKyAweDAwMjA7XHJcbn1cclxuXHJcbi8vTk9URTogU3RyaW5nLmZyb21DaGFyQ29kZSgpIGZ1bmN0aW9uIGNhbiBoYW5kbGUgb25seSBjaGFyYWN0ZXJzIGZyb20gQk1QIHN1YnNldC5cclxuLy9Tbywgd2UgbmVlZCB0byB3b3JrYXJvdW5kIHRoaXMgbWFudWFsbHkuXHJcbi8vKHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvZnJvbUNoYXJDb2RlI0dldHRpbmdfaXRfdG9fd29ya193aXRoX2hpZ2hlcl92YWx1ZXMpXHJcbmZ1bmN0aW9uIHRvQ2hhcihjcCkge1xyXG4gICAgaWYgKGNwIDw9IDB4RkZGRilcclxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjcCk7XHJcblxyXG4gICAgY3AgLT0gMHgxMDAwMDtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEQzAwIHwgY3AgJiAweDNGRik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvQXNjaWlMb3dlckNoYXIoY3ApIHtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xyXG59XHJcblxyXG4vL1Rva2VuaXplclxyXG52YXIgVG9rZW5pemVyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaHRtbCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMucHJlcHJvY2Vzc29yID0gbmV3IFByZXByb2Nlc3NvcihodG1sKTtcclxuXHJcbiAgICB0aGlzLnRva2VuUXVldWUgPSBbXTtcclxuXHJcbiAgICB0aGlzLmFsbG93Q0RBVEEgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIHRoaXMucmV0dXJuU3RhdGUgPSAnJztcclxuXHJcbiAgICB0aGlzLmNvbnN1bXB0aW9uUG9zID0gMDtcclxuXHJcbiAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSB2b2lkIDA7XHJcbiAgICB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPSAnJztcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRBdHRyID0gbnVsbDtcclxuXHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUVudGl0aWVzRGVjb2RpbmcgPSAhb3B0aW9ucy5kZWNvZGVIdG1sRW50aXRpZXM7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmxvY2F0aW9uSW5mbylcclxuICAgICAgICAgICAgTG9jYXRpb25JbmZvTWl4aW4uYXNzaWduKHRoaXMpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy9Ub2tlbiB0eXBlc1xyXG5Ub2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOID0gJ0NIQVJBQ1RFUl9UT0tFTic7XHJcblRva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTiA9ICdOVUxMX0NIQVJBQ1RFUl9UT0tFTic7XHJcblRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiA9ICdXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTic7XHJcblRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gPSAnU1RBUlRfVEFHX1RPS0VOJztcclxuVG9rZW5pemVyLkVORF9UQUdfVE9LRU4gPSAnRU5EX1RBR19UT0tFTic7XHJcblRva2VuaXplci5DT01NRU5UX1RPS0VOID0gJ0NPTU1FTlRfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRE9DVFlQRV9UT0tFTiA9ICdET0NUWVBFX1RPS0VOJztcclxuVG9rZW5pemVyLkVPRl9UT0tFTiA9ICdFT0ZfVE9LRU4nO1xyXG5cclxuLy9Ub2tlbml6ZXIgaW5pdGlhbCBzdGF0ZXMgZm9yIGRpZmZlcmVudCBtb2Rlc1xyXG5Ub2tlbml6ZXIuTU9ERSA9IFRva2VuaXplci5wcm90b3R5cGUuTU9ERSA9IHtcclxuICAgIERBVEE6IERBVEFfU1RBVEUsXHJcbiAgICBSQ0RBVEE6IFJDREFUQV9TVEFURSxcclxuICAgIFJBV1RFWFQ6IFJBV1RFWFRfU1RBVEUsXHJcbiAgICBTQ1JJUFRfREFUQTogU0NSSVBUX0RBVEFfU1RBVEUsXHJcbiAgICBQTEFJTlRFWFQ6IFBMQUlOVEVYVF9TVEFURVxyXG59O1xyXG5cclxuLy9TdGF0aWNcclxuVG9rZW5pemVyLmdldFRva2VuQXR0ciA9IGZ1bmN0aW9uICh0b2tlbiwgYXR0ck5hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0b2tlbi5hdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBhdHRyTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRva2VuLmF0dHJzW2ldLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLy9HZXQgdG9rZW5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5RdWV1ZS5sZW5ndGgpXHJcbiAgICAgICAgdGhpc1t0aGlzLnN0YXRlXSh0aGlzLl9jb25zdW1lKCkpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRva2VuUXVldWUuc2hpZnQoKTtcclxufTtcclxuXHJcbi8vQ29uc3VtcHRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY29uc3VtcHRpb25Qb3MrKztcclxuICAgIHJldHVybiB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fdW5jb25zdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jb25zdW1wdGlvblBvcy0tO1xyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fdW5jb25zdW1lU2V2ZXJhbCA9IGZ1bmN0aW9uIChjb3VudCkge1xyXG4gICAgd2hpbGUgKGNvdW50LS0pXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWNvbnN1bWVJblN0YXRlID0gZnVuY3Rpb24gKHN0YXRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICB0aGlzLl91bmNvbnN1bWUoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBzdGFydENwLCBjYXNlU2Vuc2l0aXZlKSB7XHJcbiAgICB2YXIgcm9sbGJhY2tQb3MgPSB0aGlzLmNvbnN1bXB0aW9uUG9zLFxyXG4gICAgICAgIGlzTWF0Y2ggPSB0cnVlLFxyXG4gICAgICAgIHBhdHRlcm5MZW5ndGggPSBwYXR0ZXJuLmxlbmd0aCxcclxuICAgICAgICBwYXR0ZXJuUG9zID0gMCxcclxuICAgICAgICBjcCA9IHN0YXJ0Q3AsXHJcbiAgICAgICAgcGF0dGVybkNwID0gdm9pZCAwO1xyXG5cclxuICAgIGZvciAoOyBwYXR0ZXJuUG9zIDwgcGF0dGVybkxlbmd0aDsgcGF0dGVyblBvcysrKSB7XHJcbiAgICAgICAgaWYgKHBhdHRlcm5Qb3MgPiAwKVxyXG4gICAgICAgICAgICBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcclxuXHJcbiAgICAgICAgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGF0dGVybkNwID0gcGF0dGVybltwYXR0ZXJuUG9zXTtcclxuXHJcbiAgICAgICAgaWYgKGNwICE9PSBwYXR0ZXJuQ3AgJiYgKGNhc2VTZW5zaXRpdmUgfHwgY3AgIT09IHRvQXNjaWlMb3dlckNvZGVQb2ludChwYXR0ZXJuQ3ApKSkge1xyXG4gICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTWF0Y2gpXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbCh0aGlzLmNvbnN1bXB0aW9uUG9zIC0gcm9sbGJhY2tQb3MpO1xyXG5cclxuICAgIHJldHVybiBpc01hdGNoO1xyXG59O1xyXG5cclxuLy9Mb29rYWhlYWRcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fbG9va2FoZWFkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNwID0gdGhpcy5wcmVwcm9jZXNzb3IuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQoKTtcclxuICAgIHRoaXMucHJlcHJvY2Vzc29yLnJldHJlYXQoKTtcclxuXHJcbiAgICByZXR1cm4gY3A7XHJcbn07XHJcblxyXG4vL1RlbXAgYnVmZmVyXHJcblRva2VuaXplci5wcm90b3R5cGUuaXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnRlbXBCdWZmLmxlbmd0aCAhPT0gJCQuU0NSSVBUX1NUUklORy5sZW5ndGgpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZW1wQnVmZi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLnRlbXBCdWZmW2ldICE9PSAkJC5TQ1JJUFRfU1RSSU5HW2ldKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vL1Rva2VuIGNyZWF0aW9uXHJcblRva2VuaXplci5wcm90b3R5cGUuYnVpbGRTdGFydFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTixcclxuICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIHNlbGZDbG9zaW5nOiBmYWxzZSxcclxuICAgICAgICBhdHRyczogW11cclxuICAgIH07XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLmJ1aWxkRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTixcclxuICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIGlnbm9yZWQ6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gdGhpcy5idWlsZFN0YXJ0VGFnVG9rZW4odGFnTmFtZUZpcnN0Q2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gdGhpcy5idWlsZEVuZFRhZ1Rva2VuKHRhZ05hbWVGaXJzdENoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZUNvbW1lbnRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xyXG4gICAgICAgIHR5cGU6IFRva2VuaXplci5DT01NRU5UX1RPS0VOLFxyXG4gICAgICAgIGRhdGE6ICcnXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlRG9jdHlwZVRva2VuID0gZnVuY3Rpb24gKGRvY3R5cGVOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4sXHJcbiAgICAgICAgbmFtZTogZG9jdHlwZU5hbWVGaXJzdENoIHx8ICcnLFxyXG4gICAgICAgIGZvcmNlUXVpcmtzOiBmYWxzZSxcclxuICAgICAgICBwdWJsaWNJZDogbnVsbCxcclxuICAgICAgICBzeXN0ZW1JZDogbnVsbFxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZUNoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IHtcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIGNoYXJzOiBjaFxyXG4gICAgfTtcclxufTtcclxuXHJcbi8vVGFnIGF0dHJpYnV0ZXNcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQXR0ciA9IGZ1bmN0aW9uIChhdHRyTmFtZUZpcnN0Q2gpIHtcclxuICAgIHRoaXMuY3VycmVudEF0dHIgPSB7XHJcbiAgICAgICAgbmFtZTogYXR0ck5hbWVGaXJzdENoLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2lzRHVwbGljYXRlQXR0ciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRoaXMuY3VycmVudFRva2VuLCB0aGlzLmN1cnJlbnRBdHRyLm5hbWUpICE9PSBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fbGVhdmVBdHRyTmFtZSA9IGZ1bmN0aW9uICh0b1N0YXRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gdG9TdGF0ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2lzRHVwbGljYXRlQXR0cigpKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmF0dHJzLnB1c2godGhpcy5jdXJyZW50QXR0cik7XHJcbn07XHJcblxyXG4vL0FwcHJvcHJpYXRlIGVuZCB0YWcgdG9rZW5cclxuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCNhcHByb3ByaWF0ZS1lbmQtdGFnLXRva2VuKVxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXN0U3RhcnRUYWdOYW1lID09PSB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lO1xyXG59O1xyXG5cclxuLy9Ub2tlbiBlbWlzc2lvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q3VycmVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbigpO1xyXG5cclxuICAgIC8vTk9URTogc3RvcmUgZW1pdGVkIHN0YXJ0IHRhZydzIHRhZ05hbWUgdG8gZGV0ZXJtaW5lIGlzIHRoZSBmb2xsb3dpbmcgZW5kIHRhZyB0b2tlbiBpcyBhcHByb3ByaWF0ZS5cclxuICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxyXG4gICAgICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgdGhpcy50b2tlblF1ZXVlLnB1c2godGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbikge1xyXG4gICAgICAgIHRoaXMudG9rZW5RdWV1ZS5wdXNoKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0RU9GVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcbiAgICB0aGlzLnRva2VuUXVldWUucHVzaCh7dHlwZTogVG9rZW5pemVyLkVPRl9UT0tFTn0pO1xyXG59O1xyXG5cclxuLy9DaGFyYWN0ZXJzIGVtaXNzaW9uXHJcblxyXG4vL09QVElNSVpBVElPTjogc3BlY2lmaWNhdGlvbiB1c2VzIG9ubHkgb25lIHR5cGUgb2YgY2hhcmFjdGVyIHRva2VucyAob25lIHRva2VuIHBlciBjaGFyYWN0ZXIpLlxyXG4vL1RoaXMgY2F1c2VzIGEgaHVnZSBtZW1vcnkgb3ZlcmhlYWQgYW5kIGEgbG90IG9mIHVubmVjZXNzYXJ5IHBhcnNlciBsb29wcy4gcGFyc2U1IHVzZXMgMyBncm91cHMgb2YgY2hhcmFjdGVycy5cclxuLy9JZiB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGJlbG9uZyB0byB0aGUgc2FtZSBncm91cCwgcGFyc2VyIGNhbiBwcm9jZXNzIGl0XHJcbi8vYXMgYSBzaW5nbGUgc29saWQgY2hhcmFjdGVyIHRva2VuLlxyXG4vL1NvLCB0aGVyZSBhcmUgMyB0eXBlcyBvZiBjaGFyYWN0ZXIgdG9rZW5zIGluIHBhcnNlNTpcclxuLy8xKU5VTExfQ0hBUkFDVEVSX1RPS0VOIC0gXFx1MDAwMC1jaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXHUwMDAwXFx1MDAwMFxcdTAwMDAnKVxyXG4vLzIpV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4gLSBhbnkgd2hpdGVzcGFjZS9uZXctbGluZSBjaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXG4gIFxcclxcdCAgIFxcZicpXHJcbi8vMylDSEFSQUNURVJfVE9LRU4gLSBhbnkgY2hhcmFjdGVyIHNlcXVlbmNlIHdoaWNoIGRvbid0IGJlbG9uZyB0byBncm91cHMgMSBhbmQgMiAoZS5nLiAnYWJjZGVmMTIzNEBAIyQlXicpXHJcblRva2VuaXplci5wcm90b3R5cGUuX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICh0eXBlLCBjaCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuICYmIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLnR5cGUgIT09IHR5cGUpXHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbigpO1xyXG5cclxuICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbilcclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5jaGFycyArPSBjaDtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4odHlwZSwgY2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdENvZGVQb2ludCA9IGZ1bmN0aW9uIChjcCkge1xyXG4gICAgdmFyIHR5cGUgPSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOO1xyXG5cclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHR5cGUgPSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0eXBlID0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOO1xyXG5cclxuICAgIHRoaXMuX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbih0eXBlLCB0b0NoYXIoY3ApKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyA9IGZ1bmN0aW9uIChjb2RlUG9pbnRzKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVQb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjb2RlUG9pbnRzW2ldKTtcclxufTtcclxuXHJcbi8vTk9URTogdXNlZCB0aGVuIHdlIGVtaXQgY2hhcmFjdGVyIGV4cGxpY2l0bHkuIFRoaXMgaXMgYWx3YXlzIGEgbm9uLXdoaXRlc3BhY2UgYW5kIGEgbm9uLW51bGwgY2hhcmFjdGVyLlxyXG4vL1NvIHdlIGNhbiBhdm9pZCBhZGRpdGlvbmFsIGNoZWNrcyBoZXJlLlxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q2hhciA9IGZ1bmN0aW9uIChjaCkge1xyXG4gICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4sIGNoKTtcclxufTtcclxuXHJcbi8vQ2hhcmFjdGVyIHJlZmVyZW5jZSB0b2tlbml6YXRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZU51bWVyaWNFbnRpdHkgPSBmdW5jdGlvbiAoaXNIZXgpIHtcclxuICAgIHZhciBkaWdpdHMgPSAnJyxcclxuICAgICAgICBuZXh0Q3AgPSB2b2lkIDA7XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICAgIGRpZ2l0cyArPSB0b0NoYXIodGhpcy5fY29uc3VtZSgpKTtcclxuICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuICAgIH0gd2hpbGUgKG5leHRDcCAhPT0gJC5FT0YgJiYgaXNEaWdpdChuZXh0Q3AsIGlzSGV4KSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2xvb2thaGVhZCgpID09PSAkLlNFTUlDT0xPTilcclxuICAgICAgICB0aGlzLl9jb25zdW1lKCk7XHJcblxyXG4gICAgdmFyIHJlZmVyZW5jZWRDcCA9IHBhcnNlSW50KGRpZ2l0cywgaXNIZXggPyAxNiA6IDEwKSxcclxuICAgICAgICByZXBsYWNlbWVudCA9IE5VTUVSSUNfRU5USVRZX1JFUExBQ0VNRU5UU1tyZWZlcmVuY2VkQ3BdO1xyXG5cclxuICAgIGlmIChyZXBsYWNlbWVudClcclxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XHJcblxyXG4gICAgaWYgKGlzUmVzZXJ2ZWRDb2RlUG9pbnQocmVmZXJlbmNlZENwKSlcclxuICAgICAgICByZXR1cm4gJC5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgcmV0dXJuIHJlZmVyZW5jZWRDcDtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NvbnN1bWVOYW1lZEVudGl0eSA9IGZ1bmN0aW9uIChzdGFydENwLCBpbkF0dHIpIHtcclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IG51bGwsXHJcbiAgICAgICAgZW50aXR5Q29kZVBvaW50c0NvdW50ID0gMCxcclxuICAgICAgICBjcCA9IHN0YXJ0Q3AsXHJcbiAgICAgICAgbGVhZiA9IE5BTUVEX0VOVElUWV9UUklFW2NwXSxcclxuICAgICAgICBjb25zdW1lZENvdW50ID0gMSxcclxuICAgICAgICBzZW1pY29sb25UZXJtaW5hdGVkID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICg7IGxlYWYgJiYgY3AgIT09ICQuRU9GOyBjcCA9IHRoaXMuX2NvbnN1bWUoKSwgY29uc3VtZWRDb3VudCsrLCBsZWFmID0gbGVhZi5sICYmIGxlYWYubFtjcF0pIHtcclxuICAgICAgICBpZiAobGVhZi5jKSB7XHJcbiAgICAgICAgICAgIC8vTk9URTogd2UgaGF2ZSBhdCBsZWFzdCBvbmUgbmFtZWQgcmVmZXJlbmNlIG1hdGNoLiBCdXQgd2UgZG9uJ3Qgc3RvcCBsb29rdXAgYXQgdGhpcyBwb2ludCxcclxuICAgICAgICAgICAgLy9iZWNhdXNlIGxvbmdlciBtYXRjaGVzIHN0aWxsIGNhbiBiZSBmb3VuZCAoZS5nLiAnJm5vdCcgYW5kICcmbm90aW47JykgZXhjZXB0IHRoZSBjYXNlXHJcbiAgICAgICAgICAgIC8vdGhlbiBmb3VuZCBtYXRjaCBpcyB0ZXJtaW5hdGVkIGJ5IHNlbWljb2xvbi5cclxuICAgICAgICAgICAgcmVmZXJlbmNlZENvZGVQb2ludHMgPSBsZWFmLmM7XHJcbiAgICAgICAgICAgIGVudGl0eUNvZGVQb2ludHNDb3VudCA9IGNvbnN1bWVkQ291bnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU0VNSUNPTE9OKSB7XHJcbiAgICAgICAgICAgICAgICBzZW1pY29sb25UZXJtaW5hdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWZlcmVuY2VkQ29kZVBvaW50cykge1xyXG4gICAgICAgIGlmICghc2VtaWNvbG9uVGVybWluYXRlZCkge1xyXG4gICAgICAgICAgICAvL05PVEU6IHVuY29uc3VtZSBleGNlc3MgKGUuZy4gJ2l0JyBpbiAnJm5vdGl0JylcclxuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChjb25zdW1lZENvdW50IC0gZW50aXR5Q29kZVBvaW50c0NvdW50KTtcclxuXHJcbiAgICAgICAgICAgIC8vTk9URTogSWYgdGhlIGNoYXJhY3RlciByZWZlcmVuY2UgaXMgYmVpbmcgY29uc3VtZWQgYXMgcGFydCBvZiBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBuZXh0IGNoYXJhY3RlclxyXG4gICAgICAgICAgICAvL2lzIGVpdGhlciBhIFUrMDAzRCBFUVVBTFMgU0lHTiBjaGFyYWN0ZXIgKD0pIG9yIGFuIGFscGhhbnVtZXJpYyBBU0NJSSBjaGFyYWN0ZXIsIHRoZW4sIGZvciBoaXN0b3JpY2FsXHJcbiAgICAgICAgICAgIC8vcmVhc29ucywgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBtYXRjaGVkIGFmdGVyIHRoZSBVKzAwMjYgQU1QRVJTQU5EIGNoYXJhY3RlciAoJikgbXVzdCBiZVxyXG4gICAgICAgICAgICAvL3VuY29uc3VtZWQsIGFuZCBub3RoaW5nIGlzIHJldHVybmVkLlxyXG4gICAgICAgICAgICAvL0hvd2V2ZXIsIGlmIHRoaXMgbmV4dCBjaGFyYWN0ZXIgaXMgaW4gZmFjdCBhIFUrMDAzRCBFUVVBTFMgU0lHTiBjaGFyYWN0ZXIgKD0pLCB0aGVuIHRoaXMgaXMgYVxyXG4gICAgICAgICAgICAvL3BhcnNlIGVycm9yLCBiZWNhdXNlIHNvbWUgbGVnYWN5IHVzZXIgYWdlbnRzIHdpbGwgbWlzaW50ZXJwcmV0IHRoZSBtYXJrdXAgaW4gdGhvc2UgY2FzZXMuXHJcbiAgICAgICAgICAgIC8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjdG9rZW5pemluZy1jaGFyYWN0ZXItcmVmZXJlbmNlcylcclxuICAgICAgICAgICAgaWYgKGluQXR0cikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5leHRDcCA9IHRoaXMuX2xvb2thaGVhZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuZXh0Q3AgPT09ICQuRVFVQUxTX1NJR04gfHwgaXNBc2NpaUFscGhhTnVtZXJpYyhuZXh0Q3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChlbnRpdHlDb2RlUG9pbnRzQ291bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlZENvZGVQb2ludHM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChjb25zdW1lZENvdW50KTtcclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UgPSBmdW5jdGlvbiAoc3RhcnRDcCwgaW5BdHRyKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyB8fCBpc1doaXRlc3BhY2Uoc3RhcnRDcCkgfHwgc3RhcnRDcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTiB8fFxyXG4gICAgICAgIHN0YXJ0Q3AgPT09ICQuQU1QRVJTQU5EIHx8IHN0YXJ0Q3AgPT09IHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCB8fCBzdGFydENwID09PSAkLkVPRikge1xyXG4gICAgICAgIC8vTk9URTogbm90IGEgY2hhcmFjdGVyIHJlZmVyZW5jZS4gTm8gY2hhcmFjdGVycyBhcmUgY29uc3VtZWQsIGFuZCBub3RoaW5nIGlzIHJldHVybmVkLlxyXG4gICAgICAgIHRoaXMuX3VuY29uc3VtZSgpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHN0YXJ0Q3AgPT09ICQuTlVNQkVSX1NJR04pIHtcclxuICAgICAgICAvL05PVEU6IHdlIGhhdmUgYSBudW1lcmljIGVudGl0eSBjYW5kaWRhdGUsIG5vdyB3ZSBzaG91bGQgZGV0ZXJtaW5lIGlmIGl0J3MgaGV4IG9yIGRlY2ltYWxcclxuICAgICAgICB2YXIgaXNIZXggPSBmYWxzZSxcclxuICAgICAgICAgICAgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0Q3AgPT09ICQuTEFUSU5fU01BTExfWCB8fCBuZXh0Q3AgPT09ICQuTEFUSU5fQ0FQSVRBTF9YKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcclxuICAgICAgICAgICAgaXNIZXggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgZGlnaXQgdGhpcyBpcyBhIG51bWVyaWMgZW50aXR5IGZvciBzdXJlLCBzbyB3ZSBjb25zdW1lIGl0XHJcbiAgICAgICAgaWYgKG5leHRDcCAhPT0gJC5FT0YgJiYgaXNEaWdpdChuZXh0Q3AsIGlzSGV4KSlcclxuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLl9jb25zdW1lTnVtZXJpY0VudGl0eShpc0hleCldO1xyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy9OT1RFOiBvdGhlcndpc2UgdGhpcyBpcyBhIGJvZ3VzIG51bWJlciBlbnRpdHkgYW5kIGEgcGFyc2UgZXJyb3IuIFVuY29uc3VtZSB0aGUgbnVtYmVyIHNpZ25cclxuICAgICAgICAgICAgLy9hbmQgdGhlICd4Jy1jaGFyYWN0ZXIgaWYgYXBwcm9wcmlhdGUuXHJcbiAgICAgICAgICAgIHRoaXMuX3VuY29uc3VtZVNldmVyYWwoaXNIZXggPyAyIDogMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN1bWVOYW1lZEVudGl0eShzdGFydENwLCBpbkF0dHIpO1xyXG59O1xyXG5cclxuLy9TdGF0ZSBtYWNoaW5lXHJcbnZhciBfID0gVG9rZW5pemVyLnByb3RvdHlwZTtcclxuXHJcbi8vMTIuMi40LjEgRGF0YSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gZGF0YVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0RBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRBR19PUEVOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yIENoYXJhY3RlciByZWZlcmVuY2UgaW4gZGF0YSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJbkRhdGFTdGF0ZShjcCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSB2b2lkIDA7XHJcblxyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gdGhpcy5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShjcCwgZmFsc2UpO1xyXG5cclxuICAgIGlmIChyZWZlcmVuY2VkQ29kZVBvaW50cylcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHMocmVmZXJlbmNlZENvZGVQb2ludHMpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcmJyk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMyBSQ0RBVEEgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tSQ0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gcmNkYXRhU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40IENoYXJhY3RlciByZWZlcmVuY2UgaW4gUkNEQVRBIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9SQ0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gY2hhcmFjdGVyUmVmZXJlbmNlSW5SY2RhdGFTdGF0ZShjcCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9TVEFURTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENvZGVQb2ludHMgPSB0aGlzLl9jb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKGNwLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKVxyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyhyZWZlcmVuY2VkQ29kZVBvaW50cyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyYnKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41IFJBV1RFWFQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tSQVdURVhUX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQVdURVhUX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNiBTY3JpcHQgZGF0YSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjcgUExBSU5URVhUIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUExBSU5URVhUX1NUQVRFXSA9IGZ1bmN0aW9uIHBsYWludGV4dFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC44IFRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gdGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gRU5EX1RBR19PUEVOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVTdGFydFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVRVNUSU9OX01BUkspIHtcclxuICAgICAgICAvL05PVEU6IGNhbGwgYm9ndXMgY29tbWVudCBzdGF0ZSBkaXJlY3RseSB3aXRoIGN1cnJlbnQgY29uc3VtZWQgY2hhcmFjdGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlY29uc3VtcHRpb24uXHJcbiAgICAgICAgdGhpc1tCT0dVU19DT01NRU5UX1NUQVRFXShjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjkgRW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIGVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy9OT1RFOiBjYWxsIGJvZ3VzIGNvbW1lbnQgc3RhdGUgZGlyZWN0bHkgd2l0aCBjdXJyZW50IGNvbnN1bWVkIGNoYXJhY3RlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWNvbnN1bXB0aW9uLlxyXG4gICAgICAgIHRoaXNbQk9HVVNfQ09NTUVOVF9TVEFURV0oY3ApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjEwIFRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gdGFnTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjExIFJDREFUQSBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFMZXNzVGhhblNpZ25TdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTIgUkNEQVRBIGVuZCB0YWcgb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gcmNkYXRhRW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTMgUkNEQVRBIGVuZCB0YWcgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gcmNkYXRhRW5kVGFnTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHModGhpcy50ZW1wQnVmZik7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQ0RBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE0IFJBV1RFWFQgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tSQVdURVhUX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRMZXNzVGhhblNpZ25TdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19PUEVOX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQVdURVhUX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xNSBSQVdURVhUIGVuZCB0YWcgb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQVdURVhUX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xNiBSQVdURVhUIGVuZCB0YWcgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE3IFNjcmlwdCBkYXRhIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUxlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVYQ0xBTUFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyEnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE4IFNjcmlwdCBkYXRhIGVuZCB0YWcgb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTkgU2NyaXB0IGRhdGEgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHModGhpcy50ZW1wQnVmZik7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjAgU2NyaXB0IGRhdGEgZXNjYXBlIHN0YXJ0IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIxIFNjcmlwdCBkYXRhIGVzY2FwZSBzdGFydCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZVN0YXJ0RGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIyIFNjcmlwdCBkYXRhIGVzY2FwZWQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIzIFNjcmlwdCBkYXRhIGVzY2FwZWQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjQgU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZERhc2hEYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjUgU2NyaXB0IGRhdGEgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRMZXNzVGhhblNpZ25TdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI2IFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNyBTY3JpcHQgZGF0YSBlc2NhcGVkIGVuZCB0YWcgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRW5kVGFnTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHModGhpcy50ZW1wQnVmZik7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yOCBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlIHN0YXJ0IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlU3RhcnRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkgfHwgY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmlzVGVtcEJ1ZmZlckVxdWFsVG9TY3JpcHRTdHJpbmcoKSA/IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFIDogU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI5IFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGVkIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzAgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzEgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgZGFzaCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJz4nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzIgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9FTkRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzMgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZSBlbmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApIHx8IGNwID09PSAkLlNPTElEVVMgfHwgY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5pc1RlbXBCdWZmZXJFcXVhbFRvU2NyaXB0U3RyaW5nKCkgPyBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFIDogU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM0IEJlZm9yZSBhdHRyaWJ1dGUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVBdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTiB8fCBjcCA9PT0gJC5FUVVBTFNfU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM1IEF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQVRUUklCVVRFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLl9sZWF2ZUF0dHJOYW1lKEFGVEVSX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURSk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVFVQUxTX1NJR04pXHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLIHx8IGNwID09PSAkLkFQT1NUUk9QSEUgfHwgY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM2IEFmdGVyIGF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJBdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FUVVBTFNfU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM3IEJlZm9yZSBhdHRyaWJ1dGUgdmFsdWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZUF0dHJpYnV0ZVZhbHVlU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORClcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTiB8fCBjcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBjcCA9PT0gJC5HUkFWRV9BQ0NFTlQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zOCBBdHRyaWJ1dGUgdmFsdWUgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuUVVPVEFUSU9OX01BUks7XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM5IEF0dHJpYnV0ZSB2YWx1ZSAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpIHtcclxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSAkLkFQT1NUUk9QSEU7XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQwIEF0dHJpYnV0ZSB2YWx1ZSAodW5xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGF0dHJpYnV0ZVZhbHVlVW5xdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpIHtcclxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSAkLkdSRUFURVJfVEhBTl9TSUdOO1xyXG4gICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0FUVFJJQlVURV9WQUxVRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTiB8fFxyXG4gICAgICAgICAgICAgY3AgPT09ICQuRVFVQUxTX1NJR04gfHwgY3AgPT09ICQuR1JBVkVfQUNDRU5UKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDEgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBhdHRyaWJ1dGUgdmFsdWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0FUVFJJQlVURV9WQUxVRV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUoY3ApIHtcclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IHRoaXMuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoY3AsIHRydWUpO1xyXG5cclxuICAgIGlmIChyZWZlcmVuY2VkQ29kZVBvaW50cykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVmZXJlbmNlZENvZGVQb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKHJlZmVyZW5jZWRDb2RlUG9pbnRzW2ldKTtcclxuICAgIH0gZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gJyYnO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnJldHVyblN0YXRlO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQyIEFmdGVyIGF0dHJpYnV0ZSB2YWx1ZSAocXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40MyBTZWxmLWNsb3Npbmcgc3RhcnQgdGFnIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURV0gPSBmdW5jdGlvbiBzZWxmQ2xvc2luZ1N0YXJ0VGFnU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnNlbGZDbG9zaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NCBCb2d1cyBjb21tZW50IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQk9HVVNfQ09NTUVOVF9TVEFURV0gPSBmdW5jdGlvbiBib2d1c0NvbW1lbnRTdGF0ZShjcCkge1xyXG4gICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XHJcblxyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gY3AgPT09ICQuTlVMTCA/IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSIDogdG9DaGFyKGNwKTtcclxuICAgICAgICAgICAgY3AgPSB0aGlzLl9jb25zdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NSBNYXJrdXAgZGVjbGFyYXRpb24gb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW01BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIG1hcmt1cERlY2xhcmF0aW9uT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkRBU0hfREFTSF9TVFJJTkcsIGNwLCB0cnVlKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUNvbW1lbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCgkJC5ET0NUWVBFX1NUUklORywgY3AsIGZhbHNlKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmICh0aGlzLmFsbG93Q0RBVEEgJiYgdGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkNEQVRBX1NUQVJUX1NUUklORywgY3AsIHRydWUpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDREFUQV9TRUNUSU9OX1NUQVRFO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vTk9URTogY2FsbCBib2d1cyBjb21tZW50IHN0YXRlIGRpcmVjdGx5IHdpdGggY3VycmVudCBjb25zdW1lZCBjaGFyYWN0ZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVjb25zdW1wdGlvbi5cclxuICAgICAgICB0aGlzW0JPR1VTX0NPTU1FTlRfU1RBVEVdKGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NiBDb21tZW50IHN0YXJ0IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9TVEFSVF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhcnRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFSVF9EQVNIX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NyBDb21tZW50IHN0YXJ0IGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudFN0YXJ0RGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDggQ29tbWVudCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9EQVNIX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ5IENvbW1lbnQgZW5kIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX0VORF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRFbmREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MCBDb21tZW50IGVuZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRFbmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVYQ0xBTUFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0JBTkdfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUxIENvbW1lbnQgZW5kIGJhbmcgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX0VORF9CQU5HX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRFbmRCYW5nU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9EQVNIX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLS0hJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTIgRE9DVFlQRSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTMgQmVmb3JlIERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlRG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41NCBET0NUWVBFIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLm5hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubmFtZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU1IEFmdGVyIERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCgkJC5QVUJMSUNfU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCgkJC5TWVNURU1fU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41NiBBZnRlciBET0NUWVBFIHB1YmxpYyBrZXl3b3JkIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU3IEJlZm9yZSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU4IERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGRvY3R5cGVQdWJsaWNJZGVudGlmaWVyRG91YmxlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTkgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjYwIEFmdGVyIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjEgQmV0d2VlbiBET0NUWVBFIHB1YmxpYyBhbmQgc3lzdGVtIGlkZW50aWZpZXJzIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFXSA9IGZ1bmN0aW9uIGJldHdlZW5Eb2N0eXBlUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnNTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjYyIEFmdGVyIERPQ1RZUEUgc3lzdGVtIGtleXdvcmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjMgQmVmb3JlIERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjQgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVN5c3RlbUlkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NSBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjYgQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjcgQm9ndXMgRE9DVFlQRSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JPR1VTX0RPQ1RZUEVfU1RBVEVdID0gZnVuY3Rpb24gYm9ndXNEb2N0eXBlU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42OCBDREFUQSBzZWN0aW9uIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0RBVEFfU0VDVElPTl9TVEFURV0gPSBmdW5jdGlvbiBjZGF0YVNlY3Rpb25TdGF0ZShjcCkge1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkNEQVRBX0VORF9TVFJJTkcsIGNwLCB0cnVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICAgICAgICAgIGNwID0gdGhpcy5fY29uc3VtZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy9Ob2RlIGNvbnN0cnVjdGlvblxyXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudCcsXHJcbiAgICAgICAgcXVpcmtzTW9kZTogZmFsc2UsXHJcbiAgICAgICAgY2hpbGROb2RlczogW11cclxuICAgIH07XHJcbn07XHJcblxyXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50LWZyYWdtZW50JyxcclxuICAgICAgICBxdWlya3NNb2RlOiBmYWxzZSxcclxuICAgICAgICBjaGlsZE5vZGVzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0YWdOYW1lLCBuYW1lc3BhY2VVUkksIGF0dHJzKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgYXR0cnM6IGF0dHJzLFxyXG4gICAgICAgIG5hbWVzcGFjZVVSSTogbmFtZXNwYWNlVVJJLFxyXG4gICAgICAgIGNoaWxkTm9kZXM6IFtdLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH07XHJcbn07XHJcblxyXG5leHBvcnRzLmNyZWF0ZUNvbW1lbnROb2RlID0gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjY29tbWVudCcsXHJcbiAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICBwYXJlbnROb2RlOiBudWxsXHJcbiAgICB9O1xyXG59O1xyXG5cclxudmFyIGNyZWF0ZVRleHROb2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI3RleHQnLFxyXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICBwYXJlbnROb2RlOiBudWxsXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy9UcmVlIG11dGF0aW9uXHJcbmV4cG9ydHMuc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKGRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcclxuICAgIHZhciBkb2N0eXBlTm9kZSA9IG51bGw7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmNoaWxkTm9kZXNbaV0ubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJykge1xyXG4gICAgICAgICAgICBkb2N0eXBlTm9kZSA9IGRvY3VtZW50LmNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG9jdHlwZU5vZGUpIHtcclxuICAgICAgICBkb2N0eXBlTm9kZS5uYW1lID0gbmFtZTtcclxuICAgICAgICBkb2N0eXBlTm9kZS5wdWJsaWNJZCA9IHB1YmxpY0lkO1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLnN5c3RlbUlkID0gc3lzdGVtSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQsIHtcclxuICAgICAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnRUeXBlJyxcclxuICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgcHVibGljSWQ6IHB1YmxpY0lkLFxyXG4gICAgICAgICAgICBzeXN0ZW1JZDogc3lzdGVtSWRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuc2V0UXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xyXG4gICAgZG9jdW1lbnQucXVpcmtzTW9kZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzUXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LnF1aXJrc01vZGU7XHJcbn07XHJcblxyXG52YXIgYXBwZW5kQ2hpbGQgPSBleHBvcnRzLmFwcGVuZENoaWxkID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUpIHtcclxuICAgIHBhcmVudE5vZGUuY2hpbGROb2Rlcy5wdXNoKG5ld05vZGUpO1xyXG4gICAgbmV3Tm9kZS5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxufTtcclxuXHJcbnZhciBpbnNlcnRCZWZvcmUgPSBleHBvcnRzLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgaW5zZXJ0aW9uSWR4ID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2YocmVmZXJlbmNlTm9kZSk7XHJcblxyXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xyXG4gICAgbmV3Tm9kZS5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxufTtcclxuXHJcbmV4cG9ydHMuZGV0YWNoTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgdmFyIGlkeCA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2Yobm9kZSk7XHJcblxyXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZSA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmluc2VydFRleHQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgdGV4dCkge1xyXG4gICAgaWYgKHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBpZiAocHJldk5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCcpIHtcclxuICAgICAgICAgICAgcHJldk5vZGUudmFsdWUgKz0gdGV4dDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhcHBlbmRDaGlsZChwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XHJcbn07XHJcblxyXG5leHBvcnRzLmluc2VydFRleHRCZWZvcmUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgdGV4dCwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgdmFyIHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzW3BhcmVudE5vZGUuY2hpbGROb2Rlcy5pbmRleE9mKHJlZmVyZW5jZU5vZGUpIC0gMV07XHJcblxyXG4gICAgaWYgKHByZXZOb2RlICYmIHByZXZOb2RlLm5vZGVOYW1lID09PSAnI3RleHQnKVxyXG4gICAgICAgIHByZXZOb2RlLnZhbHVlICs9IHRleHQ7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcclxufTtcclxuXHJcbmV4cG9ydHMuYWRvcHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHJlY2lwaWVudE5vZGUsIGF0dHJzKSB7XHJcbiAgICB2YXIgcmVjaXBpZW50QXR0cnNNYXAgPSBbXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY2lwaWVudE5vZGUuYXR0cnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgcmVjaXBpZW50QXR0cnNNYXAucHVzaChyZWNpcGllbnROb2RlLmF0dHJzW2ldLm5hbWUpO1xyXG5cclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAocmVjaXBpZW50QXR0cnNNYXAuaW5kZXhPZihhdHRyc1tqXS5uYW1lKSA9PT0gLTEpXHJcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGUuYXR0cnMucHVzaChhdHRyc1tqXSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy9UcmVlIHRyYXZlcnNpbmdcclxuZXhwb3J0cy5nZXRGaXJzdENoaWxkID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmNoaWxkTm9kZXNbMF07XHJcbn07XHJcblxyXG5leHBvcnRzLmdldENoaWxkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGROb2RlcztcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0UGFyZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRBdHRyTGlzdCA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5hdHRycztcclxufTtcclxuXHJcbi8vTm9kZSBkYXRhXHJcbmV4cG9ydHMuZ2V0VGFnTmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC50YWdOYW1lO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQubmFtZXNwYWNlVVJJO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRUZXh0Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAodGV4dE5vZGUpIHtcclxuICAgIHJldHVybiB0ZXh0Tm9kZS52YWx1ZTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q29tbWVudE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKGNvbW1lbnROb2RlKSB7XHJcbiAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZU5hbWUgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5uYW1lO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlUHVibGljSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5wdWJsaWNJZDtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkID0gZnVuY3Rpb24gKGRvY3R5cGVOb2RlKSB7XHJcbiAgICByZXR1cm4gZG9jdHlwZU5vZGUuc3lzdGVtSWQ7XHJcbn07XHJcblxyXG4vL05vZGUgdHlwZXNcclxuZXhwb3J0cy5pc1RleHROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI3RleHQnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0NvbW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2NvbW1lbnQnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJztcclxufTtcclxuXHJcbmV4cG9ydHMuaXNFbGVtZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gISFub2RlLnRhZ05hbWU7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpO1xuXG4vL0NvbnZlcnNpb24gdGFibGVzIGZvciBET00gTGV2ZWwxIHN0cnVjdHVyZSBlbXVsYXRpb25cbnZhciBub2RlVHlwZXMgPSB7XG4gICAgZWxlbWVudDogMSxcbiAgICB0ZXh0OiAzLFxuICAgIGNkYXRhOiA0LFxuICAgIGNvbW1lbnQ6IDhcbn07XG5cbnZhciBub2RlUHJvcGVydHlTaG9ydGhhbmRzID0ge1xuICAgIHRhZ05hbWU6ICduYW1lJyxcbiAgICBjaGlsZE5vZGVzOiAnY2hpbGRyZW4nLFxuICAgIHBhcmVudE5vZGU6ICdwYXJlbnQnLFxuICAgIHByZXZpb3VzU2libGluZzogJ3ByZXYnLFxuICAgIG5leHRTaWJsaW5nOiAnbmV4dCcsXG4gICAgbm9kZVZhbHVlOiAnZGF0YSdcbn07XG5cbi8vTm9kZVxudmFyIE5vZGUgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbn07XG5cbk5vZGUucHJvdG90eXBlID0ge1xuICAgIGdldCBmaXJzdENoaWxkKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW5bMF0gfHwgbnVsbDtcbiAgICB9LFxuXG4gICAgZ2V0IGxhc3RDaGlsZCgpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdIHx8IG51bGw7XG4gICAgfSxcblxuICAgIGdldCBub2RlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVUeXBlc1t0aGlzLnR5cGVdIHx8IG5vZGVUeXBlcy5lbGVtZW50O1xuICAgIH1cbn07XG5cbk9iamVjdC5rZXlzKG5vZGVQcm9wZXJ0eVNob3J0aGFuZHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzaG9ydGhhbmQgPSBub2RlUHJvcGVydHlTaG9ydGhhbmRzW2tleV07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIGtleSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3Nob3J0aGFuZF0gfHwgbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzW3Nob3J0aGFuZF0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuXG4vL05vZGUgY29uc3RydWN0aW9uXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50ID1cbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAncm9vdCcsXG4gICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICBjaGlsZHJlbjogW11cbiAgICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0YWdOYW1lLCBuYW1lc3BhY2VVUkksIGF0dHJzKSB7XG4gICAgdmFyIGF0dHJpYnMgPSB7fSxcbiAgICAgICAgYXR0cmlic05hbWVzcGFjZSA9IHt9LFxuICAgICAgICBhdHRyaWJzUHJlZml4ID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJzW2ldLm5hbWU7XG5cbiAgICAgICAgYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgYXR0cmlic05hbWVzcGFjZVthdHRyTmFtZV0gPSBhdHRyc1tpXS5uYW1lc3BhY2U7XG4gICAgICAgIGF0dHJpYnNQcmVmaXhbYXR0ck5hbWVdID0gYXR0cnNbaV0ucHJlZml4O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6IHRhZ05hbWUgPT09ICdzY3JpcHQnIHx8IHRhZ05hbWUgPT09ICdzdHlsZScgPyB0YWdOYW1lIDogJ3RhZycsXG4gICAgICAgIG5hbWU6IHRhZ05hbWUsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlVVJJLFxuICAgICAgICBhdHRyaWJzOiBhdHRyaWJzLFxuICAgICAgICAneC1hdHRyaWJzTmFtZXNwYWNlJzogYXR0cmlic05hbWVzcGFjZSxcbiAgICAgICAgJ3gtYXR0cmlic1ByZWZpeCc6IGF0dHJpYnNQcmVmaXgsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZUNvbW1lbnROb2RlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgcHJldjogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgIH0pO1xufTtcblxudmFyIGNyZWF0ZVRleHROb2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBOb2RlKHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICBkYXRhOiB2YWx1ZSxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG59O1xuXG5cbi8vVHJlZSBtdXRhdGlvblxuZXhwb3J0cy5zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIHZhciBkYXRhID0gRG9jdHlwZS5zZXJpYWxpemVDb250ZW50KG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCksXG4gICAgICAgIGRvY3R5cGVOb2RlID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LmNoaWxkcmVuW2ldLnR5cGUgPT09ICdkaXJlY3RpdmUnICYmIGRvY3VtZW50LmNoaWxkcmVuW2ldLm5hbWUgPT09ICchZG9jdHlwZScpIHtcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlID0gZG9jdW1lbnQuY2hpbGRyZW5baV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkb2N0eXBlTm9kZSkge1xuICAgICAgICBkb2N0eXBlTm9kZS5kYXRhID0gZGF0YTtcbiAgICAgICAgZG9jdHlwZU5vZGVbJ3gtbmFtZSddID0gbmFtZTtcbiAgICAgICAgZG9jdHlwZU5vZGVbJ3gtcHVibGljSWQnXSA9IHB1YmxpY0lkO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1zeXN0ZW1JZCddID0gc3lzdGVtSWQ7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50LCBuZXcgTm9kZSh7XG4gICAgICAgICAgICB0eXBlOiAnZGlyZWN0aXZlJyxcbiAgICAgICAgICAgIG5hbWU6ICchZG9jdHlwZScsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgJ3gtbmFtZSc6IG5hbWUsXG4gICAgICAgICAgICAneC1wdWJsaWNJZCc6IHB1YmxpY0lkLFxuICAgICAgICAgICAgJ3gtc3lzdGVtSWQnOiBzeXN0ZW1JZFxuICAgICAgICB9KSk7XG4gICAgfVxuXG59O1xuXG5leHBvcnRzLnNldFF1aXJrc01vZGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQpIHtcbiAgICBkb2N1bWVudC5xdWlya3NNb2RlID0gdHJ1ZTtcbn07XG5cbmV4cG9ydHMuaXNRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1aXJrc01vZGU7XG59O1xuXG52YXIgYXBwZW5kQ2hpbGQgPSBleHBvcnRzLmFwcGVuZENoaWxkID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUpIHtcbiAgICB2YXIgcHJldiA9IHBhcmVudE5vZGUuY2hpbGRyZW5bcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXTtcblxuICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgIG5ld05vZGUucHJldiA9IHByZXY7XG4gICAgfVxuXG4gICAgcGFyZW50Tm9kZS5jaGlsZHJlbi5wdXNoKG5ld05vZGUpO1xuICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbn07XG5cbnZhciBpbnNlcnRCZWZvcmUgPSBleHBvcnRzLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgdmFyIGluc2VydGlvbklkeCA9IHBhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcHJldiA9IHJlZmVyZW5jZU5vZGUucHJldjtcblxuICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgIG5ld05vZGUucHJldiA9IHByZXY7XG4gICAgfVxuXG4gICAgcmVmZXJlbmNlTm9kZS5wcmV2ID0gbmV3Tm9kZTtcbiAgICBuZXdOb2RlLm5leHQgPSByZWZlcmVuY2VOb2RlO1xuXG4gICAgcGFyZW50Tm9kZS5jaGlsZHJlbi5zcGxpY2UoaW5zZXJ0aW9uSWR4LCAwLCBuZXdOb2RlKTtcbiAgICBuZXdOb2RlLnBhcmVudCA9IHBhcmVudE5vZGU7XG59O1xuXG5leHBvcnRzLmRldGFjaE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmIChub2RlLnBhcmVudCkge1xuICAgICAgICB2YXIgaWR4ID0gbm9kZS5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlKSxcbiAgICAgICAgICAgIHByZXYgPSBub2RlLnByZXYsXG4gICAgICAgICAgICBuZXh0ID0gbm9kZS5uZXh0O1xuXG4gICAgICAgIG5vZGUucHJldiA9IG51bGw7XG4gICAgICAgIG5vZGUubmV4dCA9IG51bGw7XG5cbiAgICAgICAgaWYgKHByZXYpXG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXh0O1xuXG4gICAgICAgIGlmIChuZXh0KVxuICAgICAgICAgICAgbmV4dC5wcmV2ID0gcHJldjtcblxuICAgICAgICBub2RlLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgbm9kZS5wYXJlbnQgPSBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0KSB7XG4gICAgdmFyIGxhc3RDaGlsZCA9IHBhcmVudE5vZGUuY2hpbGRyZW5bcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXTtcblxuICAgIGlmIChsYXN0Q2hpbGQgJiYgbGFzdENoaWxkLnR5cGUgPT09ICd0ZXh0JylcbiAgICAgICAgbGFzdENoaWxkLmRhdGEgKz0gdGV4dDtcbiAgICBlbHNlXG4gICAgICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpKTtcbn07XG5cbmV4cG9ydHMuaW5zZXJ0VGV4dEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XG4gICAgdmFyIHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcblxuICAgIGlmIChwcmV2Tm9kZSAmJiBwcmV2Tm9kZS50eXBlID09PSAndGV4dCcpXG4gICAgICAgIHByZXZOb2RlLmRhdGEgKz0gdGV4dDtcbiAgICBlbHNlXG4gICAgICAgIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgcmVmZXJlbmNlTm9kZSk7XG59O1xuXG5leHBvcnRzLmFkb3B0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIChyZWNpcGllbnROb2RlLCBhdHRycykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHJOYW1lID0gYXR0cnNbaV0ubmFtZTtcblxuICAgICAgICBpZiAodHlwZW9mIHJlY2lwaWVudE5vZGUuYXR0cmlic1thdHRyTmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZWNpcGllbnROb2RlLmF0dHJpYnNbYXR0ck5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gICAgICAgICAgICByZWNpcGllbnROb2RlWyd4LWF0dHJpYnNOYW1lc3BhY2UnXVthdHRyTmFtZV0gPSBhdHRyc1tpXS5uYW1lc3BhY2U7XG4gICAgICAgICAgICByZWNpcGllbnROb2RlWyd4LWF0dHJpYnNQcmVmaXgnXVthdHRyTmFtZV0gPSBhdHRyc1tpXS5wcmVmaXg7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8vVHJlZSB0cmF2ZXJzaW5nXG5leHBvcnRzLmdldEZpcnN0Q2hpbGQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuWzBdO1xufTtcblxuZXhwb3J0cy5nZXRDaGlsZE5vZGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbjtcbn07XG5cbmV4cG9ydHMuZ2V0UGFyZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUucGFyZW50O1xufTtcblxuZXhwb3J0cy5nZXRBdHRyTGlzdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIGF0dHJMaXN0ID0gW107XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIG5vZGUuYXR0cmlicykge1xuICAgICAgICBpZiAobm9kZS5hdHRyaWJzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICBhdHRyTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBub2RlLmF0dHJpYnNbbmFtZV0sXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBub2RlWyd4LWF0dHJpYnNOYW1lc3BhY2UnXVtuYW1lXSxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IG5vZGVbJ3gtYXR0cmlic1ByZWZpeCddW25hbWVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhdHRyTGlzdDtcbn07XG5cblxuLy9Ob2RlIGRhdGFcbmV4cG9ydHMuZ2V0VGFnTmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQubmFtZTtcbn07XG5cbmV4cG9ydHMuZ2V0TmFtZXNwYWNlVVJJID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lc3BhY2U7XG59O1xuXG5leHBvcnRzLmdldFRleHROb2RlQ29udGVudCA9IGZ1bmN0aW9uICh0ZXh0Tm9kZSkge1xuICAgIHJldHVybiB0ZXh0Tm9kZS5kYXRhO1xufTtcblxuZXhwb3J0cy5nZXRDb21tZW50Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoY29tbWVudE5vZGUpIHtcbiAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcbn07XG5cbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZU5hbWUgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtbmFtZSddO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlUHVibGljSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtcHVibGljSWQnXTtcbn07XG5cbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkID0gZnVuY3Rpb24gKGRvY3R5cGVOb2RlKSB7XG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlWyd4LXN5c3RlbUlkJ107XG59O1xuXG5cbi8vTm9kZSB0eXBlc1xuZXhwb3J0cy5pc1RleHROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSAndGV4dCc7XG59O1xuXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdjb21tZW50Jztcbn07XG5cbmV4cG9ydHMuaXNEb2N1bWVudFR5cGVOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSAnZGlyZWN0aXZlJyAmJiBub2RlLm5hbWUgPT09ICchZG9jdHlwZSc7XG59O1xuXG5leHBvcnRzLmlzRWxlbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiAhIW5vZGUuYXR0cmlicztcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL0NvbnN0XHJcbnZhciBOT0FIX0FSS19DQVBBQ0lUWSA9IDM7XHJcblxyXG4vL0xpc3Qgb2YgZm9ybWF0dGluZyBlbGVtZW50c1xyXG52YXIgRm9ybWF0dGluZ0VsZW1lbnRMaXN0ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodHJlZUFkYXB0ZXIpIHtcclxuICAgIHRoaXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZW50cmllcyA9IFtdO1xyXG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyO1xyXG4gICAgdGhpcy5ib29rbWFyayA9IG51bGw7XHJcbn07XHJcblxyXG4vL0VudHJ5IHR5cGVzXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkgPSAnTUFSS0VSX0VOVFJZJztcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LkVMRU1FTlRfRU5UUlkgPSAnRUxFTUVOVF9FTlRSWSc7XHJcblxyXG4vL05vYWggQXJrJ3MgY29uZGl0aW9uXHJcbi8vT1BUSU1JWkFUSU9OOiBhdCBmaXJzdCB3ZSB0cnkgdG8gZmluZCBwb3NzaWJsZSBjYW5kaWRhdGVzIGZvciBleGNsdXNpb24gdXNpbmdcclxuLy9saWdodHdlaWdodCBoZXVyaXN0aWNzIHdpdGhvdXQgdGhvcm91Z2ggYXR0cmlidXRlcyBjaGVjay5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5fZ2V0Tm9haEFya0NvbmRpdGlvbkNhbmRpZGF0ZXMgPSBmdW5jdGlvbiAobmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGNhbmRpZGF0ZXMgPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5sZW5ndGggPj0gTk9BSF9BUktfQ0FQQUNJVFkpIHtcclxuICAgICAgICB2YXIgbmVBdHRyc0xlbmd0aCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCkubGVuZ3RoLFxyXG4gICAgICAgICAgICBuZVRhZ05hbWUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobmV3RWxlbWVudCksXHJcbiAgICAgICAgICAgIG5lTmFtZXNwYWNlVVJJID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkobmV3RWxlbWVudCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGVudHJ5LmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50QXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gbmVUYWdOYW1lICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gbmVOYW1lc3BhY2VVUkkgJiZcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRBdHRycy5sZW5ndGggPT09IG5lQXR0cnNMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7aWR4OiBpLCBhdHRyczogZWxlbWVudEF0dHJzfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkgPyBbXSA6IGNhbmRpZGF0ZXM7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLl9lbnN1cmVOb2FoQXJrQ29uZGl0aW9uID0gZnVuY3Rpb24gKG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBjYW5kaWRhdGVzID0gdGhpcy5fZ2V0Tm9haEFya0NvbmRpdGlvbkNhbmRpZGF0ZXMobmV3RWxlbWVudCksXHJcbiAgICAgICAgY0xlbmd0aCA9IGNhbmRpZGF0ZXMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChjTGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIG5lQXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KG5ld0VsZW1lbnQpLFxyXG4gICAgICAgICAgICBuZUF0dHJzTGVuZ3RoID0gbmVBdHRycy5sZW5ndGgsXHJcbiAgICAgICAgICAgIG5lQXR0cnNNYXAgPSB7fTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBidWlsZCBhdHRycyBtYXAgZm9yIHRoZSBuZXcgZWxlbWVudCBzbyB3ZSBjYW4gcGVyZm9ybSBmYXN0IGxvb2t1cHNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lQXR0cnNMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmVBdHRyID0gbmVBdHRyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIG5lQXR0cnNNYXBbbmVBdHRyLm5hbWVdID0gbmVBdHRyLnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZUF0dHJzTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjTGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjQXR0ciA9IGNhbmRpZGF0ZXNbal0uYXR0cnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5lQXR0cnNNYXBbY0F0dHIubmFtZV0gIT09IGNBdHRyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5zcGxpY2UoaiwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY0xlbmd0aC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA8IE5PQUhfQVJLX0NBUEFDSVRZKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9OT1RFOiByZW1vdmUgYm90dG9tbW9zdCBjYW5kaWRhdGVzIHVudGlsIE5vYWgncyBBcmsgY29uZGl0aW9uIHdpbGwgbm90IGJlIG1ldFxyXG4gICAgICAgIGZvciAodmFyIGkgPSBjTGVuZ3RoIC0gMTsgaSA+PSBOT0FIX0FSS19DQVBBQ0lUWSAtIDE7IGktLSkge1xyXG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGNhbmRpZGF0ZXNbaV0uaWR4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGgtLTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL011dGF0aW9uc1xyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmluc2VydE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZW50cmllcy5wdXNoKHt0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZfSk7XHJcbiAgICB0aGlzLmxlbmd0aCsrO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5wdXNoRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCB0b2tlbikge1xyXG4gICAgdGhpcy5fZW5zdXJlTm9haEFya0NvbmRpdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XHJcbiAgICAgICAgdHlwZTogRm9ybWF0dGluZ0VsZW1lbnRMaXN0LkVMRU1FTlRfRU5UUlksXHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICB0b2tlbjogdG9rZW5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGVuZ3RoKys7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrID0gZnVuY3Rpb24gKGVsZW1lbnQsIHRva2VuKSB7XHJcbiAgICB2YXIgYm9va21hcmtJZHggPSB0aGlzLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgZm9yICg7IGJvb2ttYXJrSWR4ID49IDA7IGJvb2ttYXJrSWR4LS0pIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRyaWVzW2Jvb2ttYXJrSWR4XSA9PT0gdGhpcy5ib29rbWFyaylcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRyaWVzLnNwbGljZShib29rbWFya0lkeCArIDEsIDAsIHtcclxuICAgICAgICB0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSxcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIHRva2VuOiB0b2tlblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sZW5ndGgrKztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUucmVtb3ZlRW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50cmllc1tpXSA9PT0gZW50cnkpIHtcclxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGgtLTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5jbGVhclRvTGFzdE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllcy5wb3AoKTtcclxuXHJcbiAgICAgICAgdGhpcy5sZW5ndGgtLTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy9TZWFyY2hcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5nZXRFbGVtZW50RW50cnlJblNjb3BlV2l0aFRhZ05hbWUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJpZXNbaV07XHJcblxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbnRyeS5lbGVtZW50KSA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5nZXRFbGVtZW50RW50cnkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJpZXNbaV07XHJcblxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSAmJiBlbnRyeS5lbGVtZW50ID09IGVsZW1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgT3BlbkVsZW1lbnRTdGFjayA9IHJlcXVpcmUoJy4vb3Blbl9lbGVtZW50X3N0YWNrJyksXG4gICAgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxuICAgIEhUTUwgPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xuXG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUztcblxuXG5mdW5jdGlvbiBzZXRFbmRMb2NhdGlvbihlbGVtZW50LCBlbmRUYWdUb2tlbikge1xuICAgIGlmIChlbGVtZW50Ll9fbG9jYXRpb24pXG4gICAgICAgIGVsZW1lbnQuX19sb2NhdGlvbi5lbmQgPSBlbmRUYWdUb2tlbi5sb2NhdGlvbi5lbmQ7XG59XG5cbi8vTk9URTogcGF0Y2ggb3BlbiBlbGVtZW50cyBzdGFjaywgc28gd2UgY2FuIGFzc2lnbiBlbmQgbG9jYXRpb24gZm9yIHRoZSBlbGVtZW50c1xuZnVuY3Rpb24gcGF0Y2hPcGVuRWxlbWVudHNTdGFjayhzdGFjaywgcGFyc2VyKSB7XG4gICAgc3RhY2sucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLmN1cnJlbnQsIHBhcnNlci5jdXJyZW50VG9rZW4pO1xuICAgICAgICBPcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3AuY2FsbCh0aGlzKTtcbiAgICB9O1xuXG4gICAgc3RhY2sucG9wQWxsVXBUb0h0bWxFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+IDA7IGktLSlcbiAgICAgICAgICAgIHNldEVuZExvY2F0aW9uKHRoaXMuaXRlbXNbaV0sIHBhcnNlci5jdXJyZW50VG9rZW4pO1xuXG4gICAgICAgIE9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcEFsbFVwVG9IdG1sRWxlbWVudC5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICBzdGFjay5yZW1vdmUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBzZXRFbmRMb2NhdGlvbihlbGVtZW50LCBwYXJzZXIuY3VycmVudFRva2VuKTtcbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcbn1cblxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgLy9OT1RFOiBvYnRhaW4gUGFyc2VyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgdmFyIHBhcnNlclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcnNlcik7XG5cbiAgICAvL05PVEU6IHBhdGNoIF9yZXNldCBtZXRob2RcbiAgICBwYXJzZXIuX3Jlc2V0ID0gZnVuY3Rpb24gKGh0bWwsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgcGFyc2VyUHJvdG8uX3Jlc2V0LmNhbGwodGhpcywgaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG5cbiAgICAgICAgcGF0Y2hPcGVuRWxlbWVudHNTdGFjayh0aGlzLm9wZW5FbGVtZW50cywgcGFyc2VyKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XG4gICAgICAgIHBhcnNlclByb3RvLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50LmNhbGwodGhpcywgdG9rZW4pO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX3Byb2Nlc3NUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICBwYXJzZXJQcm90by5fcHJvY2Vzc1Rva2VuLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIC8vTk9URTogPGJvZHk+IGFuZCA8aHRtbD4gYXJlIG5ldmVyIHBvcHBlZCBmcm9tIHRoZSBzdGFjaywgc28gd2UgbmVlZCB0byB1cGRhdGVkXG4gICAgICAgIC8vdGhlaXIgZW5kIGxvY2F0aW9uIGV4cGxpY2l0bHkuXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTCB8fFxuICAgICAgICAgICAgICh0b2tlbi50YWdOYW1lID09PSAkLkJPRFkgJiYgdGhpcy5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJPRFkpKSkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gdG9rZW4udGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRFbmRMb2NhdGlvbihlbGVtZW50LCB0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvL0RvY3R5cGVcbiAgICBwYXJzZXIuX3NldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICBwYXJzZXJQcm90by5fc2V0RG9jdW1lbnRUeXBlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBkb2N1bWVudENoaWxkcmVuID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHRoaXMuZG9jdW1lbnQpLFxuICAgICAgICAgICAgY25MZW5ndGggPSBkb2N1bWVudENoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNuTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnRDaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy9FbGVtZW50c1xuICAgIHBhcnNlci5fYXR0YWNoRWxlbWVudFRvVHJlZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIC8vTk9URTogX2F0dGFjaEVsZW1lbnRUb1RyZWUgaXMgY2FsbGVkIGZyb20gX2FwcGVuZEVsZW1lbnQsIF9pbnNlcnRFbGVtZW50IGFuZCBfaW5zZXJ0VGVtcGxhdGUgbWV0aG9kcy5cbiAgICAgICAgLy9TbyB3ZSB3aWxsIHVzZSB0b2tlbiBsb2NhdGlvbiBzdG9yZWQgaW4gdGhpcyBtZXRob2RzIGZvciB0aGUgZWxlbWVudC5cbiAgICAgICAgZWxlbWVudC5fX2xvY2F0aW9uID0gdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uIHx8IG51bGw7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IG51bGw7XG4gICAgICAgIHBhcnNlclByb3RvLl9hdHRhY2hFbGVtZW50VG9UcmVlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcblxuICAgIHBhcnNlci5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kRWxlbWVudC5jYWxsKHRoaXMsIHRva2VuLCBuYW1lc3BhY2VVUkkpO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX2luc2VydEVsZW1lbnQgPSBmdW5jdGlvbiAodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydEVsZW1lbnQuY2FsbCh0aGlzLCB0b2tlbiwgbmFtZXNwYWNlVVJJKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydFRlbXBsYXRlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciB0bXBsQ29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50KVswXTtcblxuICAgICAgICB0bXBsQ29udGVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy9Db21tZW50c1xuICAgIHBhcnNlci5fYXBwZW5kQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAodG9rZW4sIHBhcmVudCkge1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kQ29tbWVudE5vZGUuY2FsbCh0aGlzLCB0b2tlbiwgcGFyZW50KTtcblxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIGNvbW1lbnROb2RlID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgY29tbWVudE5vZGUuX19sb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgIH07XG5cbiAgICAvL1RleHRcbiAgICBwYXJzZXIuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9OT1RFOiBzdG9yZSBsYXN0IGZvc3RlciBwYXJlbnRpbmcgbG9jYXRpb24sIHNvIHdlIHdpbGwgYmUgYWJsZSB0byBmaW5kIGluc2VydGVkIHRleHRcbiAgICAgICAgLy9pbiBjYXNlIG9mIGZvc3RlciBwYXJlbnRpbmdcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBwYXJzZXJQcm90by5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbjtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRDaGFyYWN0ZXJzLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBoYXNGb3N0ZXJQYXJlbnQgPSB0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpLFxuICAgICAgICAgICAgcGFyZW50aW5nTG9jYXRpb24gPSB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbixcbiAgICAgICAgICAgIHBhcmVudCA9IChoYXNGb3N0ZXJQYXJlbnQgJiYgcGFyZW50aW5nTG9jYXRpb24ucGFyZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50IHx8XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50LFxuICAgICAgICAgICAgc2libGluZ3MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIHRleHROb2RlSWR4ID0gaGFzRm9zdGVyUGFyZW50ICYmIHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5ncy5pbmRleE9mKHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQpIC0gMSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICB0ZXh0Tm9kZSA9IHNpYmxpbmdzW3RleHROb2RlSWR4XTtcblxuICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgbG9jYXRpb24gYXNzaWduZWQgYnkgYW5vdGhlciB0b2tlbiwgdGhlbiBqdXN0IHVwZGF0ZSBlbmQgcG9zaXRpb25cbiAgICAgICAgaWYgKHRleHROb2RlLl9fbG9jYXRpb24pXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgfTtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxyXG4gICAgTlMgPSBIVE1MLk5BTUVTUEFDRVM7XHJcblxyXG4vL0VsZW1lbnQgdXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBJbnRlZ2VyIGNvbXBhcmlzb25zIGFyZSBsb3ctY29zdCwgc28gd2UgY2FuIHVzZSB2ZXJ5IGZhc3QgdGFnIG5hbWUgbGVuZ3RoIGZpbHRlcnMgaGVyZS5cclxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXHJcbmZ1bmN0aW9uIGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRuKSB7XHJcbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlA7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlJQIHx8IHRuID09PSAkLlJUIHx8IHRuID09PSAkLkREIHx8IHRuID09PSAkLkRUIHx8IHRuID09PSAkLkxJO1xyXG5cclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5PUFRJT047XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVEdST1VQO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTY29waW5nRWxlbWVudCh0biwgbnMpIHtcclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NSSB8fCB0biA9PT0gJC5NTyB8fCB0biA9PSAkLk1OIHx8IHRuID09PSAkLk1TKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRFU0MpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1URVhUKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5USVRMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgcmV0dXJuICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKSAmJiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXR1cm4gKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuTUFSUVVFRSkgJiYgbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuRk9SRUlHTl9PQkpFQ1QgJiYgbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLkFOTk9UQVRJT05fWE1MICYmIG5zID09PSBOUy5NQVRITUw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vL1N0YWNrIG9mIG9wZW4gZWxlbWVudHNcclxudmFyIE9wZW5FbGVtZW50U3RhY2sgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb2N1bWVudCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AgPSAtMTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IGRvY3VtZW50O1xyXG4gICAgdGhpcy5jdXJyZW50VGFnTmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUbXBsQ29udGVudCA9IG51bGw7XHJcbiAgICB0aGlzLnRtcGxDb3VudCA9IDA7XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbn07XHJcblxyXG4vL0luZGV4IG9mIGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2luZGV4T2YgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IC0xO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlkeCA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZHg7XHJcbn07XHJcblxyXG4vL1VwZGF0ZSBjdXJyZW50IGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2lzSW5UZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KSA9PT0gTlMuSFRNTDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLl91cGRhdGVDdXJyZW50RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuaXRlbXNbdGhpcy5zdGFja1RvcF07XHJcbiAgICB0aGlzLmN1cnJlbnRUYWdOYW1lID0gdGhpcy5jdXJyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLmN1cnJlbnQpO1xyXG5cclxuICAgIHRoaXMuY3VycmVudFRtcGxDb250ZW50ID0gdGhpcy5faXNJblRlbXBsYXRlKCkgPyB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5jdXJyZW50KVswXSA6IG51bGw7XHJcbn07XHJcblxyXG4vL011dGF0aW9uc1xyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHRoaXMuaXRlbXNbKyt0aGlzLnN0YWNrVG9wXSA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc0luVGVtcGxhdGUoKSlcclxuICAgICAgICB0aGlzLnRtcGxDb3VudCsrO1xyXG5cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AtLTtcclxuXHJcbiAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKVxyXG4gICAgICAgIHRoaXMudG1wbENvdW50LS07XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAob2xkRWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IHRoaXMuX2luZGV4T2Yob2xkRWxlbWVudCk7XHJcbiAgICB0aGlzLml0ZW1zW2lkeF0gPSBuZXdFbGVtZW50O1xyXG5cclxuICAgIGlmIChpZHggPT09IHRoaXMuc3RhY2tUb3ApXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24gKHJlZmVyZW5jZUVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSB0aGlzLl9pbmRleE9mKHJlZmVyZW5jZUVsZW1lbnQpICsgMTtcclxuXHJcbiAgICB0aGlzLml0ZW1zLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld0VsZW1lbnQpO1xyXG5cclxuICAgIGlmIChpbnNlcnRpb25JZHggPT0gKyt0aGlzLnN0YWNrVG9wKVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRhZ05hbWVQb3BwZWQgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWU7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWUsXHJcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsRWxlbWVudFBvcHBlZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHBvcHBlZEVsZW1lbnQgPSB0aGlzLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChwb3BwZWRFbGVtZW50ID09PSBlbGVtZW50KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsTnVtYmVyZWRIZWFkZXJQb3BwZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcEFsbFVwVG9IdG1sRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCByb290IDxodG1sPiBlbGVtZW50IGlzIGFsd2F5cyBmaXJzdCBpbiB0aGUgb3BlbiBlbGVtZW50IHN0YWNrLCBzb1xyXG4gICAgLy93ZSBwZXJmb3JtIHRoaXMgZmFzdCBzdGFjayBjbGVhbiB1cC5cclxuICAgIHRoaXMuc3RhY2tUb3AgPSAwO1xyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEFCTEUgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URU1QTEFURSAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRCT0RZICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEZPT1QgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRIRUFEICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpIHtcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5UUiAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTClcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YWNrVG9wLS07XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vU2VhcmNoXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLy9Qcm9wZXJseSBuZXN0ZWQgPGJvZHk+IGVsZW1lbnQgKHNob3VsZCBiZSBzZWNvbmQgZWxlbWVudCBpbiBzdGFjaykuXHJcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuaXRlbXNbMV07XHJcbiAgICByZXR1cm4gZWxlbWVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09ICQuQk9EWSA/IGVsZW1lbnQgOiBudWxsO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGV4T2YoZWxlbWVudCkgPiAtMTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmdldENvbW1vbkFuY2VzdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHZhciBlbGVtZW50SWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gLS1lbGVtZW50SWR4ID49IDAgPyB0aGlzLml0ZW1zW2VsZW1lbnRJZHhdIDogbnVsbDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuY3VycmVudFRhZ05hbWUgPT09ICQuSFRNTDtcclxufTtcclxuXHJcbi8vRWxlbWVudCBpbiBzY29wZVxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmIChpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc051bWJlcmVkSGVhZGVySW5TY29wZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGlzU2NvcGluZ0VsZW1lbnQodG4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5MaXN0SXRlbVNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgoKHRuID09PSAkLlVMIHx8IHRuID09PSAkLk9MKSAmJiBucyA9PT0gTlMuSFRNTCkgfHwgaXNTY29waW5nRWxlbWVudCh0biwgbnMpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJbkJ1dHRvblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgodG4gPT09ICQuQlVUVE9OICYmIG5zID09PSBOUy5IVE1MKSB8fCBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luVGFibGVTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAoKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLkhUTUwpICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVEZPT1QpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5IVE1MKSAmJiBucyA9PT0gTlMuSFRNTClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5TZWxlY3RTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gIT09ICQuT1BUSU9OICYmIHRuICE9PSAkLk9QVEdST1VQICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vL0ltcGxpZWQgZW5kIHRhZ3NcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlIChpc0ltcGxpZWRFbmRUYWdSZXF1aXJlZCh0aGlzLmN1cnJlbnRUYWdOYW1lKSlcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24gPSBmdW5jdGlvbiAoZXhjbHVzaW9uVGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRoaXMuY3VycmVudFRhZ05hbWUpICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09IGV4Y2x1c2lvblRhZ05hbWUpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxuICAgIE9wZW5FbGVtZW50U3RhY2sgPSByZXF1aXJlKCcuL29wZW5fZWxlbWVudF9zdGFjaycpLFxuICAgIEZvcm1hdHRpbmdFbGVtZW50TGlzdCA9IHJlcXVpcmUoJy4vZm9ybWF0dGluZ19lbGVtZW50X2xpc3QnKSxcbiAgICBMb2NhdGlvbkluZm9NaXhpbiA9IHJlcXVpcmUoJy4vbG9jYXRpb25faW5mb19taXhpbicpLFxuICAgIERlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxuICAgIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpLFxuICAgIEZvcmVpZ25Db250ZW50ID0gcmVxdWlyZSgnLi4vY29tbW9uL2ZvcmVpZ25fY29udGVudCcpLFxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyksXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcbiAgICBBVFRSUyA9IEhUTUwuQVRUUlM7XG5cbi8vRGVmYXVsdCBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGRlY29kZUh0bWxFbnRpdGllczogdHJ1ZSxcbiAgICBsb2NhdGlvbkluZm86IGZhbHNlXG59O1xuXG4vL01pc2MgY29uc3RhbnRzXG52YXIgU0VBUkNIQUJMRV9JTkRFWF9ERUZBVUxUX1BST01QVCA9ICdUaGlzIGlzIGEgc2VhcmNoYWJsZSBpbmRleC4gRW50ZXIgc2VhcmNoIGtleXdvcmRzOiAnLFxuICAgIFNFQVJDSEFCTEVfSU5ERVhfSU5QVVRfTkFNRSA9ICdpc2luZGV4JyxcbiAgICBISURERU5fSU5QVVRfVFlQRSA9ICdoaWRkZW4nO1xuXG4vL0Fkb3B0aW9uIGFnZW5jeSBsb29wcyBpdGVyYXRpb24gY291bnRcbnZhciBBQV9PVVRFUl9MT09QX0lURVIgPSA4LFxuICAgIEFBX0lOTkVSX0xPT1BfSVRFUiA9IDM7XG5cbi8vSW5zZXJ0aW9uIG1vZGVzXG52YXIgSU5JVElBTF9NT0RFID0gJ0lOSVRJQUxfTU9ERScsXG4gICAgQkVGT1JFX0hUTUxfTU9ERSA9ICdCRUZPUkVfSFRNTF9NT0RFJyxcbiAgICBCRUZPUkVfSEVBRF9NT0RFID0gJ0JFRk9SRV9IRUFEX01PREUnLFxuICAgIElOX0hFQURfTU9ERSA9ICdJTl9IRUFEX01PREUnLFxuICAgIEFGVEVSX0hFQURfTU9ERSA9ICdBRlRFUl9IRUFEX01PREUnLFxuICAgIElOX0JPRFlfTU9ERSA9ICdJTl9CT0RZX01PREUnLFxuICAgIFRFWFRfTU9ERSA9ICdURVhUX01PREUnLFxuICAgIElOX1RBQkxFX01PREUgPSAnSU5fVEFCTEVfTU9ERScsXG4gICAgSU5fVEFCTEVfVEVYVF9NT0RFID0gJ0lOX1RBQkxFX1RFWFRfTU9ERScsXG4gICAgSU5fQ0FQVElPTl9NT0RFID0gJ0lOX0NBUFRJT05fTU9ERScsXG4gICAgSU5fQ09MVU1OX0dST1VQX01PREUgPSAnSU5fQ09MVU1OX0dST1VQX01PREUnLFxuICAgIElOX1RBQkxFX0JPRFlfTU9ERSA9ICdJTl9UQUJMRV9CT0RZX01PREUnLFxuICAgIElOX1JPV19NT0RFID0gJ0lOX1JPV19NT0RFJyxcbiAgICBJTl9DRUxMX01PREUgPSAnSU5fQ0VMTF9NT0RFJyxcbiAgICBJTl9TRUxFQ1RfTU9ERSA9ICdJTl9TRUxFQ1RfTU9ERScsXG4gICAgSU5fU0VMRUNUX0lOX1RBQkxFX01PREUgPSAnSU5fU0VMRUNUX0lOX1RBQkxFX01PREUnLFxuICAgIElOX1RFTVBMQVRFX01PREUgPSAnSU5fVEVNUExBVEVfTU9ERScsXG4gICAgQUZURVJfQk9EWV9NT0RFID0gJ0FGVEVSX0JPRFlfTU9ERScsXG4gICAgSU5fRlJBTUVTRVRfTU9ERSA9ICdJTl9GUkFNRVNFVF9NT0RFJyxcbiAgICBBRlRFUl9GUkFNRVNFVF9NT0RFID0gJ0FGVEVSX0ZSQU1FU0VUX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0JPRFlfTU9ERSA9ICdBRlRFUl9BRlRFUl9CT0RZX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREUgPSAnQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERSc7XG5cbi8vSW5zZXJ0aW9uIG1vZGUgcmVzZXQgbWFwXG52YXIgSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQID0ge307XG5cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRSXSA9IElOX1JPV19NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEJPRFldID1cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRIRUFEXSA9XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5URk9PVF0gPSBJTl9UQUJMRV9CT0RZX01PREU7XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5DQVBUSU9OXSA9IElOX0NBUFRJT05fTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkNPTEdST1VQXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEFCTEVdID0gSU5fVEFCTEVfTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkJPRFldID0gSU5fQk9EWV9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuRlJBTUVTRVRdID0gSU5fRlJBTUVTRVRfTU9ERTtcblxuLy9UZW1wbGF0ZSBpbnNlcnRpb24gbW9kZSBzd2l0Y2ggbWFwXG52YXIgVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUCA9IHt9O1xuXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ0FQVElPTl0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLkNPTEdST1VQXSA9XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEJPRFldID1cblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URk9PVF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIRUFEXSA9IElOX1RBQkxFX01PREU7XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ09MXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRSXSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIXSA9IElOX1JPV19NT0RFO1xuXG4vL1Rva2VuIGhhbmRsZXJzIG1hcCBmb3IgaW5zZXJ0aW9uIG1vZGVzXG52YXIgXyA9IHt9O1xuXG5fW0lOSVRJQUxfTU9ERV0gPSB7fTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBkb2N0eXBlSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID1cbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcblxuX1tCRUZPUkVfSFRNTF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUh0bWw7XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSHRtbDtcblxuX1tCRUZPUkVfSEVBRF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUhlYWQ7XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSGVhZDtcblxuX1tJTl9IRUFEX01PREVdID0ge307XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluSGVhZDtcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkhlYWQ7XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5IZWFkO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5JbkhlYWQ7XG5cbl9bQUZURVJfSEVBRF9NT0RFXSA9IHt9O1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckhlYWQ7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJIZWFkO1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVySGVhZDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQWZ0ZXJIZWFkO1xuXG5fW0lOX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5Cb2R5O1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tURVhUX01PREVdID0ge307XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID1cbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGV4dDtcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGV4dDtcblxuX1tJTl9UQUJMRV9NT0RFXSA9IHt9O1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZTtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9UQUJMRV9URVhUX01PREVdID0ge307XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkluVGFibGVUZXh0O1xuXG5fW0lOX0NBUFRJT05fTU9ERV0gPSB7fTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5DYXB0aW9uO1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQ2FwdGlvbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV0gPSB7fTtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluQ29sdW1uR3JvdXA7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkNvbHVtbkdyb3VwO1xuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Db2x1bW5Hcm91cDtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluVGFibGU7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fUk9XX01PREVdID0ge307XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luUm93O1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Sb3c7XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DRUxMX01PREVdID0ge307XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQ2VsbDtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkNlbGw7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdDtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luU2VsZWN0O1xuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9URU1QTEFURV9NT0RFXSA9IHt9O1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGVtcGxhdGU7XG5cbl9bQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJCb2R5O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bSU5fRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50VG9Eb2N1bWVudDtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckJvZHk7XG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xuXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdID0ge307XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQ7XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckZyYW1lc2V0O1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcblxuLy9TZWFyY2hhYmxlIGluZGV4IGJ1aWxkaW5nIHV0aWxzICg8aXNpbmRleD4gdGFnKVxuZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUluZGV4Rm9ybUF0dHJzKGlzaW5kZXhTdGFydFRhZ1Rva2VuKSB7XG4gICAgdmFyIGluZGV4QWN0aW9uID0gVG9rZW5pemVyLmdldFRva2VuQXR0cihpc2luZGV4U3RhcnRUYWdUb2tlbiwgQVRUUlMuQUNUSU9OKSxcbiAgICAgICAgYXR0cnMgPSBbXTtcblxuICAgIGlmIChpbmRleEFjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBhdHRycy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IEFUVFJTLkFDVElPTixcbiAgICAgICAgICAgIHZhbHVlOiBpbmRleEFjdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleExhYmVsVGV4dChpc2luZGV4U3RhcnRUYWdUb2tlbikge1xuICAgIHZhciBpbmRleFByb21wdCA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIoaXNpbmRleFN0YXJ0VGFnVG9rZW4sIEFUVFJTLlBST01QVCk7XG5cbiAgICByZXR1cm4gaW5kZXhQcm9tcHQgPT09IG51bGwgPyBTRUFSQ0hBQkxFX0lOREVYX0RFRkFVTFRfUFJPTVBUIDogaW5kZXhQcm9tcHQ7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleElucHV0QXR0cnMoaXNpbmRleFN0YXJ0VGFnVG9rZW4pIHtcbiAgICB2YXIgaXNpbmRleEF0dHJzID0gaXNpbmRleFN0YXJ0VGFnVG9rZW4uYXR0cnMsXG4gICAgICAgIGlucHV0QXR0cnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXNpbmRleEF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuYW1lID0gaXNpbmRleEF0dHJzW2ldLm5hbWU7XG5cbiAgICAgICAgaWYgKG5hbWUgIT09IEFUVFJTLk5BTUUgJiYgbmFtZSAhPT0gQVRUUlMuQUNUSU9OICYmIG5hbWUgIT09IEFUVFJTLlBST01QVClcbiAgICAgICAgICAgIGlucHV0QXR0cnMucHVzaChpc2luZGV4QXR0cnNbaV0pO1xuICAgIH1cblxuICAgIGlucHV0QXR0cnMucHVzaCh7XG4gICAgICAgIG5hbWU6IEFUVFJTLk5BTUUsXG4gICAgICAgIHZhbHVlOiBTRUFSQ0hBQkxFX0lOREVYX0lOUFVUX05BTUVcbiAgICB9KTtcblxuICAgIHJldHVybiBpbnB1dEF0dHJzO1xufVxuXG4vL1BhcnNlclxudmFyIFBhcnNlciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyIHx8IERlZmF1bHRUcmVlQWRhcHRlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgICB0aGlzLnNjcmlwdEhhbmRsZXIgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXG4gICAgICAgIExvY2F0aW9uSW5mb01peGluLmFzc2lnbih0aGlzKTtcbn07XG5cbi8vQVBJXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50KCk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudCwgbnVsbCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHJldHVybiBkb2N1bWVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucGFyc2VGcmFnbWVudCA9IGZ1bmN0aW9uIChodG1sLCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAvL05PVEU6IHVzZSA8dGVtcGxhdGU+IGVsZW1lbnQgYXMgYSBmcmFnbWVudCBjb250ZXh0IGlmIGNvbnRleHQgZWxlbWVudCB3YXMgbm90IHByb3ZpZGVkLFxuICAgIC8vc28gd2Ugd2lsbCBwYXJzZSBpbiBcImZvcmdpdmluZ1wiIG1hbm5lclxuICAgIGlmICghZnJhZ21lbnRDb250ZXh0KVxuICAgICAgICBmcmFnbWVudENvbnRleHQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5URU1QTEFURSwgTlMuSFRNTCwgW10pO1xuXG4gICAgLy9OT1RFOiBjcmVhdGUgZmFrZSBlbGVtZW50IHdoaWNoIHdpbGwgYmUgdXNlZCBhcyAnZG9jdW1lbnQnIGZvciBmcmFnbWVudCBwYXJzaW5nLlxuICAgIC8vVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGpzZG9tIHRoZXJlICdkb2N1bWVudCcgY2FuJ3QgYmUgcmVjcmVhdGVkLCB0aGVyZWZvcmVcbiAgICAvL2ZyYWdtZW50IHBhcnNpbmcgY2F1c2VzIG1lc3Npbmcgb2YgdGhlIG1haW4gYGRvY3VtZW50YC5cbiAgICB2YXIgZG9jdW1lbnRNb2NrID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KCdkb2N1bWVudG1vY2snLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudE1vY2ssIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGZyYWdtZW50Q29udGV4dCkgPT09ICQuVEVNUExBVEUpXG4gICAgICAgIHRoaXMuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZShJTl9URU1QTEFURV9NT0RFKTtcblxuICAgIHRoaXMuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcoKTtcbiAgICB0aGlzLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcbiAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICB0aGlzLl9maW5kRm9ybUluRnJhZ21lbnRDb250ZXh0KCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHZhciByb290RWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb2N1bWVudE1vY2spLFxuICAgICAgICBmcmFnbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy5fYWRvcHROb2Rlcyhyb290RWxlbWVudCwgZnJhZ21lbnQpO1xuXG4gICAgcmV0dXJuIGZyYWdtZW50O1xufTtcblxuLy9SZXNldCBzdGF0ZVxuUGFyc2VyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCkge1xuICAgIHRoaXMudG9rZW5pemVyID0gbmV3IFRva2VuaXplcihodG1sLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgdGhpcy5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTklUSUFMX01PREU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSAnJztcblxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IGZyYWdtZW50Q29udGV4dDtcblxuICAgIHRoaXMuaGVhZEVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vcGVuRWxlbWVudHMgPSBuZXcgT3BlbkVsZW1lbnRTdGFjayh0aGlzLmRvY3VtZW50LCB0aGlzLnRyZWVBZGFwdGVyKTtcbiAgICB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IG5ldyBGb3JtYXR0aW5nRWxlbWVudExpc3QodGhpcy50cmVlQWRhcHRlcik7XG5cbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sgPSBbXTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IG51bGw7XG5cbiAgICB0aGlzLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICB0aGlzLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBmYWxzZTtcbn07XG5cbi8vUGFyc2luZyBsb29wXG5QYXJzZXIucHJvdG90eXBlLl9pdGVyYXRlUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUoKTtcblxuICAgIHZhciB0b2tlbiA9IHRoaXMudG9rZW5pemVyLmdldE5leHRUb2tlbigpO1xuXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAmJiB0b2tlbi5jaGFyc1swXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbi5jaGFycy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0b2tlbi5jaGFycyA9IHRva2VuLmNoYXJzLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9ydW5QYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB3aGlsZSAoIXRoaXMuc3RvcHBlZClcbiAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XG59O1xuXG4vL1RleHQgcGFyc2luZ1xuUGFyc2VyLnByb3RvdHlwZS5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCk7XG5cbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gY3VycmVudCAmJiBjdXJyZW50ICE9PSB0aGlzLmRvY3VtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpICE9PSBOUy5IVE1MICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3N3aXRjaFRvVGV4dFBhcnNpbmcgPSBmdW5jdGlvbiAoY3VycmVudFRva2VuLCBuZXh0VG9rZW5pemVyU3RhdGUpIHtcbiAgICB0aGlzLl9pbnNlcnRFbGVtZW50KGN1cnJlbnRUb2tlbiwgTlMuSFRNTCk7XG4gICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBuZXh0VG9rZW5pemVyU3RhdGU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSB0aGlzLmluc2VydGlvbk1vZGU7XG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gVEVYVF9NT0RFO1xufTtcblxuLy9GcmFnbWVudCBwYXJzaW5nXG5QYXJzZXIucHJvdG90eXBlLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dCA/XG4gICAgICAgICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0IDpcbiAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcblxuICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSA9PT0gJC5GT1JNKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICB9IHdoaWxlIChub2RlKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuZnJhZ21lbnRDb250ZXh0KTtcblxuICAgIGlmICh0biA9PT0gJC5USVRMRSB8fCB0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQ0RBVEE7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5YTVAgfHwgdG4gPT09ICQuSUZSQU1FIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuTk9FTUJFRCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJBV1RFWFQ7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcbn07XG5cbi8vVHJlZSBtdXRhdGlvblxuUGFyc2VyLnByb3RvdHlwZS5fc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlci5zZXREb2N1bWVudFR5cGUodGhpcy5kb2N1bWVudCwgdG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2F0dGFjaEVsZW1lbnRUb1RyZWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKVxuICAgICAgICB0aGlzLl9mb3N0ZXJQYXJlbnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHBhcmVudCwgZWxlbWVudCk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5faW5zZXJ0RWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciB0bXBsID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIE5TLkhUTUwsIHRva2VuLmF0dHJzKSxcbiAgICAgICAgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZCh0bXBsLCBjb250ZW50KTtcbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKHRtcGwpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2godG1wbCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5IVE1MLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9hcHBlbmRDb21tZW50Tm9kZSA9IGZ1bmN0aW9uICh0b2tlbiwgcGFyZW50KSB7XG4gICAgdmFyIGNvbW1lbnROb2RlID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVDb21tZW50Tm9kZSh0b2tlbi5kYXRhKTtcblxuICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBjb21tZW50Tm9kZSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpXG4gICAgICAgIHRoaXMuX2Zvc3RlclBhcmVudFRleHQodG9rZW4uY2hhcnMpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYWRvcHROb2RlcyA9IGZ1bmN0aW9uIChkb25vciwgcmVjaXBpZW50KSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKGRvbm9yKTtcblxuICAgICAgICBpZiAoIWNoaWxkKVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGNoaWxkKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChyZWNpcGllbnQsIGNoaWxkKTtcbiAgICB9XG59O1xuXG4vL1Rva2VuIHByb2Nlc3NpbmdcblBhcnNlci5wcm90b3R5cGUuX3Nob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKTtcblxuICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50ID09PSB0aGlzLmRvY3VtZW50KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KTtcblxuICAgIGlmIChucyA9PT0gTlMuSFRNTClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShjdXJyZW50KSA9PT0gJC5BTk5PVEFUSU9OX1hNTCAmJiBucyA9PT0gTlMuTUFUSE1MICYmXG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gJiYgdG9rZW4udGFnTmFtZSA9PT0gJC5TVkcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBpc0NoYXJhY3RlclRva2VuID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4sXG4gICAgICAgIGlzTWF0aE1MVGV4dFN0YXJ0VGFnID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnRhZ05hbWUgIT09ICQuTUdMWVBIICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSAhPT0gJC5NQUxJR05NQVJLO1xuXG4gICAgaWYgKChpc01hdGhNTFRleHRTdGFydFRhZyB8fCBpc0NoYXJhY3RlclRva2VuKSAmJiB0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gfHwgaXNDaGFyYWN0ZXJUb2tlbikgJiYgdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU47XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICBfW3RoaXMuaW5zZXJ0aW9uTW9kZV1bdG9rZW4udHlwZV0odGhpcywgdG9rZW4pO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc1Rva2VuSW5Cb2R5TW9kZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIF9bSU5fQk9EWV9NT0RFXVt0b2tlbi50eXBlXSh0aGlzLCB0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGNoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOKVxuICAgICAgICBudWxsQ2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGluc2VydENoYXJhY3RlcnModGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4pXG4gICAgICAgIGFwcGVuZENvbW1lbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcbiAgICAgICAgc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxuICAgICAgICBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMgPSBmdW5jdGlvbiAodGFnTmFtZSwgYXR0cnMpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgZmFrZVRva2VuLmF0dHJzID0gYXR0cnM7XG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzRmFrZVN0YXJ0VGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG4gICAgcmV0dXJuIGZha2VUb2tlbjtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlRW5kVGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRFbmRUYWdUb2tlbih0YWdOYW1lKTtcblxuICAgIHRoaXMuX3Byb2Nlc3NUb2tlbihmYWtlVG9rZW4pO1xuICAgIHJldHVybiBmYWtlVG9rZW47XG59O1xuXG4vL0ludGVncmF0aW9uIHBvaW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2lzSHRtbEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSxcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSxcbiAgICAgICAgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIG5zLCBhdHRycyk7XG59O1xuXG4vL0FjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIHJlY29uc3RydWN0aW9uXG5QYXJzZXIucHJvdG90eXBlLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGlzdExlbmd0aCA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmxlbmd0aDtcblxuICAgIGlmIChsaXN0TGVuZ3RoKSB7XG4gICAgICAgIHZhciB1bm9wZW5JZHggPSBsaXN0TGVuZ3RoLFxuICAgICAgICAgICAgZW50cnkgPSBudWxsO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHVub3BlbklkeC0tO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzW3Vub3BlbklkeF07XG5cbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZIHx8IHRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdW5vcGVuSWR4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHVub3BlbklkeCA+IDApO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSB1bm9wZW5JZHg7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllc1tpXTtcbiAgICAgICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnQoZW50cnkudG9rZW4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVudHJ5LmVsZW1lbnQpKTtcbiAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy9DbG9zZSBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VUYWJsZUNlbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5URCk7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVEgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VQRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlApO1xufTtcblxuLy9JbnNlcnRpb24gbW9kZXNcblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3AsIGxhc3QgPSBmYWxzZTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgbGFzdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmZyYWdtZW50Q29udGV4dClcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5mcmFnbWVudENvbnRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgICAgICBuZXdJbnNlcnRpb25Nb2RlID0gSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQW3RuXTtcblxuICAgICAgICBpZiAobmV3SW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gbmV3SW5zZXJ0aW9uTW9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoIWxhc3QgJiYgKHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIKSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fQ0VMTF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICghbGFzdCAmJiB0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9IRUFEX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KGkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhUTUwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMuaGVhZEVsZW1lbnQgPyBBRlRFUl9IRUFEX01PREUgOiBCRUZPUkVfSEVBRF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChsYXN0KSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZUZvclNlbGVjdCA9IGZ1bmN0aW9uIChzZWxlY3RJZHgpIHtcbiAgICBpZiAoc2VsZWN0SWR4ID4gMCkge1xuICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0SWR4IC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV0sXG4gICAgICAgICAgICAgICAgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoYW5jZXN0b3IpO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX0lOX1RBQkxFX01PREU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX01PREU7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wdXNoVG1wbEluc2VydGlvbk1vZGUgPSBmdW5jdGlvbiAobW9kZSkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wdXNoKG1vZGUpO1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCsrO1xuICAgIHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlID0gbW9kZTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3BvcFRtcGxJbnNlcnRpb25Nb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wb3AoKTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AtLTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1t0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3BdO1xufTtcblxuLy9Gb3N0ZXIgcGFyZW50aW5nXG5QYXJzZXIucHJvdG90eXBlLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KTtcblxuICAgIHJldHVybiB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCAmJiB0aGlzLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcodGhpcy5vcGVuRWxlbWVudHMuY3VycmVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxvY2F0aW9uID0ge1xuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIGJlZm9yZUVsZW1lbnQ6IG51bGxcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgb3BlbkVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXSxcbiAgICAgICAgICAgIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG9wZW5FbGVtZW50KSxcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkob3BlbkVsZW1lbnQpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKG9wZW5FbGVtZW50KVswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShvcGVuRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhdGlvbi5wYXJlbnQpXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uYmVmb3JlRWxlbWVudCA9IG9wZW5FbGVtZW50O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2kgLSAxXTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWxvY2F0aW9uLnBhcmVudClcbiAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbMF07XG5cbiAgICByZXR1cm4gbG9jYXRpb247XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9mb3N0ZXJQYXJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKTtcblxuICAgIGlmIChsb2NhdGlvbi5iZWZvcmVFbGVtZW50KVxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQsIGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpO1xuICAgIGVsc2VcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fZm9zdGVyUGFyZW50VGV4dCA9IGZ1bmN0aW9uIChjaGFycykge1xuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpO1xuXG4gICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGNoYXJzLCBsb2NhdGlvbi5iZWZvcmVFbGVtZW50KTtcbiAgICBlbHNlXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChsb2NhdGlvbi5wYXJlbnQsIGNoYXJzKTtcbn07XG5cbi8vU3BlY2lhbCBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNTcGVjaWFsRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEhUTUwuU1BFQ0lBTF9FTEVNRU5UU1tuc11bdG5dO1xufTtcblxuLy9BZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RyZWUtY29uc3RydWN0aW9uLmh0bWwjYWRvcHRpb25BZ2VuY3kpXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vL1N0ZXBzIDUtOCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4pIHtcbiAgICB2YXIgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0b2tlbi50YWdOYW1lKTtcblxuICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgICAgIGlmICghcC5vcGVuRWxlbWVudHMuY29udGFpbnMoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSkge1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKCFwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRva2VuLnRhZ05hbWUpKVxuICAgICAgICAgICAgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IG51bGw7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIHJldHVybiBmb3JtYXR0aW5nRWxlbWVudEVudHJ5O1xufVxuXG4vL1N0ZXBzIDkgYW5kIDEwIG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgdmFyIGZ1cnRoZXN0QmxvY2sgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGZ1cnRoZXN0QmxvY2sgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghZnVydGhlc3RCbG9jaykge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1cnRoZXN0QmxvY2s7XG59XG5cbi8vU3RlcCAxMyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudCkge1xuICAgIHZhciBlbGVtZW50ID0gbnVsbCxcbiAgICAgICAgbGFzdEVsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrLFxuICAgICAgICBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZ1cnRoZXN0QmxvY2spO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBBQV9JTk5FUl9MT09QX0lURVI7IGkrKykge1xuICAgICAgICBlbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG5cbiAgICAgICAgLy9OT1RFOiBzdG9yZSBuZXh0IGVsZW1lbnQgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIChpdCBtYXkgYmUgZGVsZXRlZCBmcm9tIHRoZSBzdGFjayBieSBzdGVwIDkuNSlcbiAgICAgICAgbmV4dEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3RvcihlbGVtZW50KTtcblxuICAgICAgICB2YXIgZWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5KGVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghZWxlbWVudEVudHJ5KSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudClcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGVsZW1lbnQgPSBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpO1xuXG4gICAgICAgIGlmIChsYXN0RWxlbWVudCA9PT0gZnVydGhlc3RCbG9jaylcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZWxlbWVudEVudHJ5O1xuXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBsYXN0RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RFbGVtZW50O1xufVxuXG4vL1N0ZXAgMTMuNyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50RW50cnkuZWxlbWVudCksXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudEVudHJ5LnRva2VuLnRhZ05hbWUsIG5zLCBlbGVtZW50RW50cnkudG9rZW4uYXR0cnMpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVwbGFjZShlbGVtZW50RW50cnkuZWxlbWVudCwgbmV3RWxlbWVudCk7XG4gICAgZWxlbWVudEVudHJ5LmVsZW1lbnQgPSBuZXdFbGVtZW50O1xuXG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbi8vU3RlcCAxNCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpIHtcbiAgICBpZiAocC5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKGNvbW1vbkFuY2VzdG9yKSlcbiAgICAgICAgcC5fZm9zdGVyUGFyZW50RWxlbWVudChsYXN0RWxlbWVudCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHRuID0gcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGNvbW1vbkFuY2VzdG9yKSxcbiAgICAgICAgICAgIG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY29tbW9uQW5jZXN0b3IpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTClcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKGNvbW1vbkFuY2VzdG9yKVswXTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XG4gICAgfVxufVxuXG4vL1N0ZXBzIDE1LTE5IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpLFxuICAgICAgICB0b2tlbiA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4sXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbnMsIHRva2VuLmF0dHJzKTtcblxuICAgIHAuX2Fkb3B0Tm9kZXMoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG4gICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcblxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrKG5ld0VsZW1lbnQsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4pO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgcC5vcGVuRWxlbWVudHMuaW5zZXJ0QWZ0ZXIoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG59XG5cbi8vQWxnb3JpdGhtIGVudHJ5IHBvaW50XG5mdW5jdGlvbiBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFBX09VVEVSX0xPT1BfSVRFUjsgaSsrKSB7XG4gICAgICAgIHZhciBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gYWFPYnRhaW5Gb3JtYXR0aW5nRWxlbWVudEVudHJ5KHAsIHRva2VuLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50RW50cnkpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB2YXIgZnVydGhlc3RCbG9jayA9IGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG5cbiAgICAgICAgdmFyIGxhc3RFbGVtZW50ID0gYWFJbm5lckxvb3AocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSxcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUobGFzdEVsZW1lbnQpO1xuICAgICAgICBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICB9XG59XG5cblxuLy9HZW5lcmljIHRva2VuIGhhbmRsZXJzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gaWdub3JlVG9rZW4ocCwgdG9rZW4pIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgcC5vcGVuRWxlbWVudHMuY3VycmVudClcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5kb2N1bWVudCk7XG59XG5cbmZ1bmN0aW9uIGluc2VydENoYXJhY3RlcnMocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gc3RvcFBhcnNpbmcocCwgdG9rZW4pIHtcbiAgICBwLnN0b3BwZWQgPSB0cnVlO1xufVxuXG4vLzEyLjIuNS40LjEgVGhlIFwiaW5pdGlhbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZG9jdHlwZUluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLl9zZXREb2N1bWVudFR5cGUodG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLmZvcmNlUXVpcmtzIHx8IERvY3R5cGUuaXNRdWlya3ModG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKSlcbiAgICAgICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hUTUxfTU9ERTtcbn1cblxuZnVuY3Rpb24gdG9rZW5JbkluaXRpYWxNb2RlKHAsIHRva2VuKSB7XG4gICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IVE1MX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjIgVGhlIFwiYmVmb3JlIGh0bWxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IRUFEX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkJlZm9yZUh0bWwocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdCZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MIHx8IHRuID09PSAkLkhFQUQgfHwgdG4gPT09ICQuQk9EWSB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZVJvb3RFbGVtZW50KCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hFQURfTU9ERTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuMyBUaGUgXCJiZWZvcmUgaGVhZFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmhlYWRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fSEVBRF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuQlIpXG4gICAgICAgIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5IRUFEKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuNCBUaGUgXCJpbiBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuQ09NTUFORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVElUTEUpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJDREFUQSk7XG5cbiAgICAvL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiBpbnRlcmFjdGl2ZSB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBzY3JpcHRpbmcsIHNvIHdlIHBhcnNlXG4gICAgLy88bm9zY3JpcHQ+IGFzIGEgcmF3dGV4dC5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TVFlMRSlcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgIHAuX2luc2VydFRlbXBsYXRlKHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9URU1QTEFURV9NT0RFO1xuICAgICAgICBwLl9wdXNoVG1wbEluc2VydGlvbk1vZGUoSU5fVEVNUExBVEVfTU9ERSk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJbkhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhFQUQpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0hFQURfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkJSIHx8IHRuID09PSAkLkhUTUwpXG4gICAgICAgIHRva2VuSW5IZWFkKHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkKCk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAuX3BvcFRtcGxJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JbkhlYWQocCwgdG9rZW4pIHtcbiAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkhFQUQpO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC42IFRoZSBcImFmdGVyIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9GUkFNRVNFVF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TQ1JJUFQgfHwgdG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuVElUTEUpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucHVzaChwLmhlYWRFbGVtZW50KTtcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUocC5oZWFkRWxlbWVudCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJPRFkpO1xuICAgIHAuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjcgVGhlIFwiaW4gYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdLCB0b2tlbi5hdHRycyk7XG59XG5cbmZ1bmN0aW9uIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAoYm9keUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmFkb3B0QXR0cmlidXRlcyhib2R5RWxlbWVudCwgdG9rZW4uYXR0cnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZnJhbWVzZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAocC5mcmFtZXNldE9rICYmIGJvZHlFbGVtZW50KSB7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShib2R5RWxlbWVudCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcEFsbFVwVG9IdG1sRWxlbWVudCgpO1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgdmFyIHRuID0gcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgLy9OT1RFOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIgdG9rZW4sIHRoZW4gaWdub3JlIHRoYXQgdG9rZW4gYW5kIG1vdmVcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiBwcmUgYmxvY2tzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgaW5UZW1wbGF0ZSA9IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDA7XG5cbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgICAgIGlmICghaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAuZm9ybUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldLFxuICAgICAgICAgICAgdG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCh0b2tlbi50YWdOYW1lID09PSAkLkxJICYmIHRuID09PSAkLkxJKSB8fFxuICAgICAgICAgICAgKCh0b2tlbi50YWdOYW1lID09PSAkLkREIHx8IHRva2VuLnRhZ05hbWUgPT09ICQuRFQpICYmICh0biA9PT0gJC5ERCB8fCB0biA9PSAkLkRUKSkpIHtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKHRuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRuICE9PSAkLkFERFJFU1MgJiYgdG4gIT09ICQuRElWICYmIHRuICE9PSAkLlAgJiYgcC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUExBSU5URVhUO1xufVxuXG5mdW5jdGlvbiBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQlVUVE9OKSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJVVFRPTik7XG4gICAgICAgIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSgkLkEpO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnRFbnRyeSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkEpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShhY3RpdmVFbGVtZW50RW50cnkpO1xuICAgIH1cblxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuTk9CUikpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5OT0JSKTtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmICghcC50cmVlQWRhcHRlci5pc1F1aXJrc01vZGUocC5kb2N1bWVudCkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xufVxuXG5mdW5jdGlvbiBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIHZhciBpbnB1dFR5cGUgPSBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRva2VuLCBBVFRSUy5UWVBFKTtcblxuICAgIGlmICghaW5wdXRUeXBlIHx8IGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpICE9PSBISURERU5fSU5QVVRfVFlQRSlcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG5cbn1cblxuZnVuY3Rpb24gcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGltYWdlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB0b2tlbi50YWdOYW1lID0gJC5JTUc7XG4gICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gaXNpbmRleFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50IHx8IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycygkLkZPUk0sIGdldFNlYXJjaGFibGVJbmRleEZvcm1BdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuSFIpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuTEFCRUwpO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmluc2VydFRleHQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgZ2V0U2VhcmNoYWJsZUluZGV4TGFiZWxUZXh0KHRva2VuKSk7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMoJC5JTlBVVCwgZ2V0U2VhcmNoYWJsZUluZGV4SW5wdXRBdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkxBQkVMKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkhSKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5GT1JNKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRleHRhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxuICAgIC8vb24gdG8gdGhlIG5leHQgb25lLiAoTmV3bGluZXMgYXQgdGhlIHN0YXJ0IG9mIHRleHRhcmVhIGVsZW1lbnRzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xuICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IFRFWFRfTU9ERTtcbn1cblxuZnVuY3Rpb24geG1wU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG5mdW5jdGlvbiBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG4vL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBwbHVnaW5zLCBzbyB3ZSBwYXJzZVxuLy88bm9lbWJlZD4gYXMgYSByYXd0ZXh0LlxuZnVuY3Rpb24gbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcblxuICAgIGlmIChwLmluc2VydGlvbk1vZGUgPT09IElOX1RBQkxFX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9DQVBUSU9OX01PREUgfHxcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9UQUJMRV9CT0RZX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9ST1dfTU9ERSB8fFxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX0NFTExfTU9ERSkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9NT0RFO1xufVxuXG5mdW5jdGlvbiBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gcnBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuUlVCWSkpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBtZW51aXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG5cbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlbk1hdGhNTEF0dHJzKHRva2VuKTtcbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZylcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcbiAgICBlbHNlXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLk1BVEhNTCk7XG59XG5cbmZ1bmN0aW9uIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pO1xuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5TVkcpO1xuICAgIGVsc2VcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBzdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSSB8fCB0biA9PT0gJC5TIHx8IHRuID09PSAkLkIgfHwgdG4gPT09ICQuVSlcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkEpXG4gICAgICAgICAgICAgICAgYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5ETCB8fCB0biA9PT0gJC5PTCB8fCB0biA9PT0gJC5VTClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTEkgfHwgdG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNIHx8IHRuID09PSAkLlRUKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhSKVxuICAgICAgICAgICAgICAgIGhyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5SUCB8fCB0biA9PT0gJC5SVClcbiAgICAgICAgICAgICAgICBycFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVFIpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkRJViB8fCB0biA9PT0gJC5ESVIgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlBSRSlcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJJRylcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTUcgfHwgdG4gPT09ICQuV0JSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlhNUClcbiAgICAgICAgICAgICAgICB4bXBTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNWRylcbiAgICAgICAgICAgICAgICBzdmdTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkNPTClcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgICAgICAgICBodG1sU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5CQVNFIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSlcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJPRFkpXG4gICAgICAgICAgICAgICAgYm9keVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFJTiB8fCB0biA9PT0gJC5NRU5VKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZPUk0pXG4gICAgICAgICAgICAgICAgZm9ybVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQ09ERSB8fCB0biA9PT0gJC5GT05UKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PQlIpXG4gICAgICAgICAgICAgICAgbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVJFQSlcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQVRIKVxuICAgICAgICAgICAgICAgIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkhFQUQpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRJVExFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVNJREUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU01BTEwpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpXG4gICAgICAgICAgICAgICAgdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNQkVEKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklOUFVUKVxuICAgICAgICAgICAgICAgIGlucHV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QQVJBTSB8fCB0biA9PT0gJC5UUkFDSylcbiAgICAgICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSU1BR0UpXG4gICAgICAgICAgICAgICAgaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkZSQU1FICYmIHRuICE9PSAkLlRCT0RZICYmIHRuICE9PSAkLlRGT09UICYmIHRuICE9PSAkLlRIRUFEKVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJVVFRPTilcbiAgICAgICAgICAgICAgICBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUUklLRSB8fCB0biA9PT0gJC5TVFJPTkcpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVBQTEVUIHx8IHRuID09PSAkLk9CSkVDVClcbiAgICAgICAgICAgICAgICBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLktFWUdFTilcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TT1VSQ0UpXG4gICAgICAgICAgICAgICAgcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklGUkFNRSlcbiAgICAgICAgICAgICAgICBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgICAgICAgICBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTilcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkNPTU1BTkQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5ERVRBSUxTIHx8IHRuID09PSAkLkFERFJFU1MgfHwgdG4gPT09ICQuQVJUSUNMRSB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTElTVElORylcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JU0lOREVYKVxuICAgICAgICAgICAgICAgIGlzaW5kZXhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRU1CRUQpXG4gICAgICAgICAgICAgICAgbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ0FQVElPTilcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuTUVOVUlURU0pXG4gICAgICAgICAgICAgICAgbWVudWl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgICAgIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GSUVMRFNFVClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgICAgICAgICB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVClcbiAgICAgICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ09MR1JPVVApXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcbiAgICAgICAgICAgICAgICBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJMT0NLUVVPVEUgfHwgdG4gPT09ICQuRklHQ0FQVElPTilcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBib2R5RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSlcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfQk9EWV9NT0RFO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJPRFkpO1xuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9ybUVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCxcbiAgICAgICAgZm9ybUVsZW1lbnQgPSBwLmZvcm1FbGVtZW50O1xuXG4gICAgaWYgKCFpblRlbXBsYXRlKVxuICAgICAgICBwLmZvcm1FbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICgoZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkZPUk0pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgICAgICBpZiAoaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkZPUk0pO1xuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtRWxlbWVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5QKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLlApO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5MaXN0SXRlbVNjb3BlKCQuTEkpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuTEkpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5MSSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbnVtYmVyZWRIZWFkZXJFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJSKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0bikge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxFbGVtZW50UG9wcGVkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBlbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkEgfHwgdG4gPT09ICQuQiB8fCB0biA9PT0gJC5JIHx8IHRuID09PSAkLlMgfHwgdG4gPT0gJC5VKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlApXG4gICAgICAgICAgICAgICAgcEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKHRuID09ICQuREwgfHwgdG4gPT09ICQuVUwgfHwgdG4gPT09ICQuT0wpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkxJKVxuICAgICAgICAgICAgICAgIGxpRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgZGRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlckVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU0gfHwgdG4gPT09ICQuVFQpXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQklHKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRJUiB8fCB0biA9PT0gJC5ESVYgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CT0RZKVxuICAgICAgICAgICAgICAgIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICAgICAgICAgIGh0bWxFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GT1JNKVxuICAgICAgICAgICAgICAgIGZvcm1FbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DT0RFIHx8IHRuID09PSAkLkZPTlQgfHwgdG4gPT09ICQuTk9CUilcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkFTSURFKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TTUFMTClcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKVxuICAgICAgICAgICAgICAgIGFwcGxldEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09ICQuU1RSSUtFIHx8IHRuID09PSAkLlNUUk9ORylcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5BRERSRVNTIHx8IHRuID09PSAkLkFSVElDTEUgfHwgdG4gPT09ICQuREVUQUlMUyB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRklFTERTRVQpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICAgICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CTE9DS1FVT1RFIHx8IHRuID09PSAkLkZJR0NBUFRJT04pXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdCA6XG4gICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVvZkluQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPiAtMSlcbiAgICAgICAgZW9mSW5UZW1wbGF0ZShwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cbi8vMTIuMi41LjQuOCBUaGUgXCJ0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBlbmRUYWdJblRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAuc2NyaXB0SGFuZGxlciAmJiB0b2tlbi50YWdOYW1lID09PSAkLlNDUklQVClcbiAgICAgICAgcC5zY3JpcHRIYW5kbGVyKHAuZG9jdW1lbnQsIHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG59XG5cblxuZnVuY3Rpb24gZW9mSW5UZXh0KHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjkgVGhlIFwiaW4gdGFibGVcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgY3VyVG4gPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZTtcblxuICAgIGlmIChjdXJUbiA9PT0gJC5UQUJMRSB8fCBjdXJUbiA9PT0gJC5UQk9EWSB8fCBjdXJUbiA9PT0gJC5URk9PVCB8fCBjdXJUbiA9PT0gJC5USEVBRCB8fCBjdXJUbiA9PT0gJC5UUikge1xuICAgICAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICAgICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XG4gICAgICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9URVhUX01PREU7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBjYXB0aW9uU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DQVBUSU9OX01PREU7XG59XG5cbmZ1bmN0aW9uIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DT0xVTU5fR1JPVVBfTU9ERTtcbn1cblxuZnVuY3Rpb24gY29sU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkNPTEdST1VQKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5mdW5jdGlvbiB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfQk9EWV9NT0RFO1xufVxuXG5mdW5jdGlvbiB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UQk9EWSk7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UQUJMRSk7XG5cbiAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGlucHV0U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIGlucHV0VHlwZSA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xuXG4gICAgaWYgKGlucHV0VHlwZSAmJiBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gSElEREVOX0lOUFVUX1RZUEUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50ICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMCkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5mb3JtRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCB8fCB0biA9PT0gJC5UUilcbiAgICAgICAgICAgICAgICB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICAgICAgICAgIGNvbFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRk9STSlcbiAgICAgICAgICAgICAgICBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcbiAgICAgICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQpXG4gICAgICAgICAgICAgICAgdGJvZHlTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTlBVVClcbiAgICAgICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DQVBUSU9OKVxuICAgICAgICAgICAgICAgIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkNPTEdST1VQKVxuICAgICAgICAgICAgICAgIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UQUJMRSkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlRBQkxFKTtcbiAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwgJiZcbiAgICAgICAgICAgICB0biAhPT0gJC5UQk9EWSAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5URk9PVCAmJiB0biAhPT0gJC5USCAmJiB0biAhPT0gJC5USEVBRCAmJiB0biAhPT0gJC5UUikge1xuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGUgPSBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQ7XG5cbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSB0cnVlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbkluQm9keU1vZGUodG9rZW4pO1xuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGU7XG59XG5cblxuLy8xMi4yLjUuNC4xMCBUaGUgXCJpbiB0YWJsZSB0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGVUZXh0KHAsIHRva2VuKSB7XG4gICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLnB1c2godG9rZW4pO1xuICAgIHAuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbiA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAocC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgcC5faW5zZXJ0Q2hhcmFjdGVycyhwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnNbaV0pO1xuICAgIH1cblxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC4xMSBUaGUgXCJpbiBjYXB0aW9uXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcbiAgICAgICAgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQ0FQVElPTik7XG5cbiAgICAgICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cbiAgICAgICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuQ0FQVElPTikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkNBUFRJT04pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5DQVBUSU9OKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCAmJiB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlRCT0RZICYmXG4gICAgICAgICAgICAgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEZPT1QgJiYgdG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEhFQUQgJiYgdG4gIT09ICQuVFIpIHtcbiAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cblxuLy8xMi4yLjUuNC4xMiBUaGUgXCJpbiBjb2x1bW4gZ3JvdXBcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ29sdW1uR3JvdXAocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNPTEdST1VQKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSAhPT0gJC5DT0xHUk9VUClcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5DT0wpXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkNPTEdST1VQKTtcblxuICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4xMyBUaGUgXCJpbiB0YWJsZSBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5UUikge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1JPV19NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UUik7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ0FQVElPTiAmJiB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlREICYmIHRuICE9PSAkLlRIICYmIHRuICE9PSAkLlRSKSB7XG4gICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8xMi4yLjUuNC4xNCBUaGUgXCJpbiByb3dcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DRUxMX01PREU7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVFIpO1xuXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRSKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRSKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UUik7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCB8fFxuICAgICAgICAgICAgIHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEgpIHtcbiAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5cbi8vMTIuMi41LjQuMTUgVGhlIFwiaW4gY2VsbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkNlbGwocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSKSB7XG5cbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSB8fCBwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5USCkpIHtcbiAgICAgICAgICAgIHAuX2Nsb3NlVGFibGVDZWxsKCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2VsbChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fUk9XX01PREU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fY2xvc2VUYWJsZUNlbGwoKTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwpXG4gICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMTYgVGhlIFwiaW4gc2VsZWN0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRJT04pIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUSU9OKTtcblxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUR1JPVVApO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuSU5QVVQgfHwgdG4gPT09ICQuS0VZR0VOIHx8IHRuID09PSAkLlRFWFRBUkVBKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNlbGVjdFNjb3BlKCQuU0VMRUNUKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVCB8fCB0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgdmFyIHByZXZPcGVuRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW3Aub3BlbkVsZW1lbnRzLnN0YWNrVG9wIC0gMV0sXG4gICAgICAgICAgICBwcmV2T3BlbkVsZW1lbnRUbiA9IHByZXZPcGVuRWxlbWVudCAmJiBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocHJldk9wZW5FbGVtZW50KTtcblxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OICYmIHByZXZPcGVuRWxlbWVudFRuID09PSAkLk9QVEdST1VQKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUICYmIHAub3BlbkVsZW1lbnRzLmhhc0luU2VsZWN0U2NvcGUoJC5TRUxFQ1QpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlNFTEVDVCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE3IFRoZSBcImluIHNlbGVjdCBpbiB0YWJsZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHxcbiAgICAgICAgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIgfHwgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblNlbGVjdChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luU2VsZWN0SW5UYWJsZShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUiB8fCB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgZW5kVGFnSW5TZWxlY3QocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE4IFRoZSBcImluIHRlbXBsYXRlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgdG4gPT09ICQuTk9GUkFNRVMgfHwgdG4gPT09ICQuU0NSSVBUIHx8IHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLlRJVExFKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG5ld0luc2VydGlvbk1vZGUgPSBURU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQW3RuXSB8fCBJTl9CT0RZX01PREU7XG5cbiAgICAgICAgcC5fcG9wVG1wbEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHVzaFRtcGxJbnNlcnRpb25Nb2RlKG5ld0luc2VydGlvbk1vZGUpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBuZXdJbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlb2ZJblRlbXBsYXRlKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUZW1wbGF0ZVBvcHBlZCgpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICBwLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cblxuLy8xMi4yLjUuNC4xOSBUaGUgXCJhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKSB7XG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQpXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9BRlRFUl9CT0RZX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMjAgVGhlIFwiaW4gZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUVTRVQpXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkZSQU1FU0VUICYmICFwLm9wZW5FbGVtZW50cy5pc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcblxuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbi8vMTIuMi41LjQuMjEgVGhlIFwiYWZ0ZXIgZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREU7XG59XG5cbi8vMTIuMi41LjQuMjIgVGhlIFwiYWZ0ZXIgYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4yMyBUaGUgXCJhZnRlciBhZnRlciBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRlJBTUVTKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNSBUaGUgcnVsZXMgZm9yIHBhcnNpbmcgdG9rZW5zIGluIGZvcmVpZ24gY29udGVudFxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIG51bGxDaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgdG9rZW4uY2hhcnMgPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAoRm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikgJiYgIXAuZnJhZ21lbnRDb250ZXh0KSB7XG4gICAgICAgIHdoaWxlIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShwLm9wZW5FbGVtZW50cy5jdXJyZW50KSAhPT0gTlMuSFRNTCAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY3VycmVudCA9IHAuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKSxcbiAgICAgICAgICAgIGN1cnJlbnROcyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xuXG4gICAgICAgIGlmIChjdXJyZW50TnMgPT09IE5TLk1BVEhNTClcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xuXG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnROcyA9PT0gTlMuU1ZHKSB7XG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pO1xuICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgICAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpXG4gICAgICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIGZvciAodmFyIGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KS50b0xvd2VyQ2FzZSgpID09PSB0b2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qYWtlYXJjaGliYWxkL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDIuMS4xXG4gKi9cblxuKGZ1bmN0aW9uKCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkb2JqZWN0T3JGdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzRnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNNYXliZVRoZW5hYmxlKHgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkX2lzQXJyYXkgPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNBcnJheSA9IGxpYiRlczYkcHJvbWlzZSR1dGlscyQkX2lzQXJyYXk7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gPSAwO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkdG9TdHJpbmcgPSB7fS50b1N0cmluZztcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJHZlcnR4TmV4dDtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcChjYWxsYmFjaywgYXJnKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbl0gPSBjYWxsYmFjaztcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuICsgMV0gPSBhcmc7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuICs9IDI7XG4gICAgICBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbiA9PT0gMikge1xuICAgICAgICAvLyBJZiBsZW4gaXMgMiwgdGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gc2NoZWR1bGUgYW4gYXN5bmMgZmx1c2guXG4gICAgICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVkLCB0aGV5XG4gICAgICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2goKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcDtcblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJXaW5kb3cgfHwge307XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGlzTm9kZSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbiAgICAvLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAvLyBub2RlXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU5leHRUaWNrKCkge1xuICAgICAgdmFyIG5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAgICAgLy8gc2V0SW1tZWRpYXRlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgaW5zdGVhZFxuICAgICAgdmFyIHZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUubWF0Y2goL14oPzooXFxkKylcXC4pPyg/OihcXGQrKVxcLik/KFxcKnxcXGQrKSQvKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZlcnNpb24pICYmIHZlcnNpb25bMV0gPT09ICcwJyAmJiB2ZXJzaW9uWzJdID09PSAnMTAnKSB7XG4gICAgICAgIG5leHRUaWNrID0gc2V0SW1tZWRpYXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBuZXh0VGljayhsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB2ZXJ0eFxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VWZXJ0eFRpbWVyKCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0KGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlcihsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBub2RlLmRhdGEgPSAoaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB3ZWIgd29ya2VyXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldFRpbWVvdXQobGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoLCAxKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2goKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW47IGkrPTIpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2ldO1xuICAgICAgICB2YXIgYXJnID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2krMV07XG5cbiAgICAgICAgY2FsbGJhY2soYXJnKTtcblxuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtpKzFdID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXR0ZW1wdFZlcnRleCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByID0gcmVxdWlyZTtcbiAgICAgICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHZlcnR4TmV4dCA9IHZlcnR4LnJ1bk9uTG9vcCB8fCB2ZXJ0eC5ydW5PbkNvbnRleHQ7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlVmVydHhUaW1lcigpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlU2V0VGltZW91dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaDtcbiAgICAvLyBEZWNpZGUgd2hhdCBhc3luYyBtZXRob2QgdG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tzOlxuICAgIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNOb2RlKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VOZXh0VGljaygpO1xuICAgIH0gZWxzZSBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhdHRlbXB0VmVydGV4KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKCkge31cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HICAgPSB2b2lkIDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCA9IDE7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEICA9IDI7XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1IgPSBuZXcgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKTtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHNlbGZGdWxsZmlsbG1lbnQoKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRnZXRUaGVuKHByb21pc2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW47XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkZGVmYXVsdChmdW5jdGlvbihwcm9taXNlKSB7XG4gICAgICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5VGhlbih0aGVuLCB0aGVuYWJsZSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBpZiAoc2VhbGVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgaWYgKHNlYWxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0sICdTZXR0bGU6ICcgKyAocHJvbWlzZS5fbGFiZWwgfHwgJyB1bmtub3duIHByb21pc2UnKSk7XG5cbiAgICAgICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlKSB7XG4gICAgICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSkge1xuICAgICAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGhlbiA9IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGdldFRoZW4obWF5YmVUaGVuYWJsZSk7XG5cbiAgICAgICAgaWYgKHRoZW4gPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih0aGVuKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzZWxmRnVsbGZpbGxtZW50KCkpO1xuICAgICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkdXRpbHMkJG9iamVjdE9yRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gICAgICBpZiAocHJvbWlzZS5fb25lcnJvcikge1xuICAgICAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gocHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7IHJldHVybjsgfVxuXG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEO1xuXG4gICAgICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRkZWZhdWx0KGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gsIHByb21pc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykgeyByZXR1cm47IH1cbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQ7XG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSByZWFzb247XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRkZWZhdWx0KGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgdmFyIHN1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgICAgIHZhciBsZW5ndGggPSBzdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgICAgIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aCArIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURURdICA9IG9uUmVqZWN0aW9uO1xuXG4gICAgICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGRlZmF1bHQobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaCwgcGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoKHByb21pc2UpIHtcbiAgICAgIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICAgICAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICAgICAgaWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgdmFyIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsID0gcHJvbWlzZS5fcmVzdWx0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgICAgIGNhbGxiYWNrID0gc3Vic2NyaWJlcnNbaSArIHNldHRsZWRdO1xuXG4gICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKSB7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SID0gbmV3IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEVycm9yT2JqZWN0KCk7XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZGV0YWlsKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgICAgICByZXR1cm4gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgICAgIHZhciBoYXNDYWxsYmFjayA9IGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICAgICAgdmFsdWUsIGVycm9yLCBzdWNjZWVkZWQsIGZhaWxlZDtcblxuICAgICAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgICAgIHZhbHVlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IpIHtcbiAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgIC8vIG5vb3BcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ2FsbGJhY2sgJiYgc3VjY2VlZGVkKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChmYWlsZWQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGluaXRpYWxpemVQcm9taXNlKHByb21pc2UsIHJlc29sdmVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSl7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvcihDb25zdHJ1Y3RvciwgaW5wdXQpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcblxuICAgICAgZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgICAgZW51bWVyYXRvci5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoZW51bWVyYXRvci5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcbiAgICAgICAgZW51bWVyYXRvci5faW5wdXQgICAgID0gaW5wdXQ7XG4gICAgICAgIGVudW1lcmF0b3IubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgICAgIGVudW1lcmF0b3IuX2luaXQoKTtcblxuICAgICAgICBpZiAoZW51bWVyYXRvci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKGVudW1lcmF0b3IucHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLmxlbmd0aCA9IGVudW1lcmF0b3IubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgZW51bWVyYXRvci5fZW51bWVyYXRlKCk7XG4gICAgICAgICAgaWYgKGVudW1lcmF0b3IuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChlbnVtZXJhdG9yLnByb21pc2UsIGVudW1lcmF0b3IuX3Jlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QoZW51bWVyYXRvci5wcm9taXNlLCBlbnVtZXJhdG9yLl92YWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0ID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzQXJyYXkoaW5wdXQpO1xuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5Jyk7XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3I7XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gICAgICB2YXIgbGVuZ3RoICA9IGVudW1lcmF0b3IubGVuZ3RoO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG4gICAgICB2YXIgaW5wdXQgICA9IGVudW1lcmF0b3IuX2lucHV0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX2VhY2hFbnRyeShpbnB1dFtpXSwgaSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24oZW50cnksIGkpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcbiAgICAgIHZhciBjID0gZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcblxuICAgICAgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNNYXliZVRoZW5hYmxlKGVudHJ5KSkge1xuICAgICAgICBpZiAoZW50cnkuY29uc3RydWN0b3IgPT09IGMgJiYgZW50cnkuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgICAgZW50cnkuX29uZXJyb3IgPSBudWxsO1xuICAgICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChlbnRyeS5fc3RhdGUsIGksIGVudHJ5Ll9yZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudW1lcmF0b3IuX3dpbGxTZXR0bGVBdChjLnJlc29sdmUoZW50cnkpLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nLS07XG4gICAgICAgIGVudW1lcmF0b3IuX3Jlc3VsdFtpXSA9IGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3NldHRsZWRBdCA9IGZ1bmN0aW9uKHN0YXRlLCBpLCB2YWx1ZSkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG5cbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykge1xuICAgICAgICBlbnVtZXJhdG9yLl9yZW1haW5pbmctLTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZW51bWVyYXRvci5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbihwcm9taXNlLCBpKSB7XG4gICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICBlbnVtZXJhdG9yLl9zZXR0bGVkQXQobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQsIGksIHJlYXNvbik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsKGVudHJpZXMpIHtcbiAgICAgIHJldHVybiBuZXcgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJGRlZmF1bHQodGhpcywgZW50cmllcykucHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJhY2UkJHJhY2UoZW50cmllcykge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoIWxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgZnVuY3Rpb24gb25GdWxmaWxsbWVudCh2YWx1ZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gb25SZWplY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShDb25zdHJ1Y3Rvci5yZXNvbHZlKGVudHJpZXNbaV0pLCB1bmRlZmluZWQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyYWNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkcmFjZTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZXNvbHZlJCRyZXNvbHZlKG9iamVjdCkge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlc29sdmUkJHJlc29sdmU7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVqZWN0JCRyZWplY3QocmVhc29uKSB7XG4gICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkcmVqZWN0O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRjb3VudGVyID0gMDtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc1Jlc29sdmVyKCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc05ldygpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2U7XG4gICAgLyoqXG4gICAgICBQcm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVhbCByZXN1bHQgb2YgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gVGhlXG4gICAgICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICAgICAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2XigJlzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgICAgIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gICAgICBUZXJtaW5vbG9neVxuICAgICAgLS0tLS0tLS0tLS1cblxuICAgICAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgICAgIC0gYHRoZW5hYmxlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIGEgYHRoZW5gIG1ldGhvZC5cbiAgICAgIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgICAgIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LlxuICAgICAgLSBgcmVhc29uYCBpcyBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoeSBhIHByb21pc2Ugd2FzIHJlamVjdGVkLlxuICAgICAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgICAgIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC5cblxuICAgICAgUHJvbWlzZXMgdGhhdCBhcmUgZnVsZmlsbGVkIGhhdmUgYSBmdWxmaWxsbWVudCB2YWx1ZSBhbmQgYXJlIGluIHRoZSBmdWxmaWxsZWRcbiAgICAgIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgICAgIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLlxuXG4gICAgICBQcm9taXNlcyBjYW4gYWxzbyBiZSBzYWlkIHRvICpyZXNvbHZlKiBhIHZhbHVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBhbHNvIGFcbiAgICAgIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgICAgIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbFxuICAgICAgaXRzZWxmIHJlamVjdCwgYW5kIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgd2lsbFxuICAgICAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICAgICAgQmFzaWMgVXNhZ2U6XG4gICAgICAtLS0tLS0tLS0tLS1cblxuICAgICAgYGBganNcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIC8vIG9uIHN1Y2Nlc3NcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gb24gZmFpbHVyZVxuICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgIH0pO1xuXG4gICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAvLyBvbiByZWplY3Rpb25cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIEFkdmFuY2VkIFVzYWdlOlxuICAgICAgLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAgIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgICAgIGBYTUxIdHRwUmVxdWVzdGBzLlxuXG4gICAgICBgYGBqc1xuICAgICAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdqc29uJztcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgICB4aHIuc2VuZCgpO1xuXG4gICAgICAgICAgZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikge1xuICAgICAgICAvLyBvbiBmdWxmaWxsbWVudFxuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIC8vIG9uIHJlamVjdGlvblxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy5cblxuICAgICAgYGBganNcbiAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgZ2V0SlNPTignL3Bvc3RzJyksXG4gICAgICAgIGdldEpTT04oJy9jb21tZW50cycpXG4gICAgICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT05cbiAgICAgICAgdmFsdWVzWzFdIC8vID0+IGNvbW1lbnRzSlNPTlxuXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBAY2xhc3MgUHJvbWlzZVxuICAgICAgQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXJcbiAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICAgIEBjb25zdHJ1Y3RvclxuICAgICovXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UocmVzb2x2ZXIpIHtcbiAgICAgIHRoaXMuX2lkID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJGNvdW50ZXIrKztcbiAgICAgIHRoaXMuX3N0YXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICAgICAgaWYgKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3AgIT09IHJlc29sdmVyKSB7XG4gICAgICAgIGlmICghbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0Z1bmN0aW9uKHJlc29sdmVyKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc1Jlc29sdmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UpKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJG5lZWRzTmV3KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbml0aWFsaXplUHJvbWlzZSh0aGlzLCByZXNvbHZlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuYWxsID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkYWxsJCRkZWZhdWx0O1xuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLnJhY2UgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyYWNlJCRkZWZhdWx0O1xuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLnJlc29sdmUgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZXNvbHZlJCRkZWZhdWx0O1xuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLnJlamVjdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkZGVmYXVsdDtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgICAgIGNvbnN0cnVjdG9yOiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZSxcblxuICAgIC8qKlxuICAgICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgICB3aGljaCByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZVxuICAgICAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgICAvLyB1c2VyIGlzIGF2YWlsYWJsZVxuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIENoYWluaW5nXG4gICAgICAtLS0tLS0tLVxuXG4gICAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgICAgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZpcnN0IHByb21pc2UncyBmdWxmaWxsbWVudFxuICAgICAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgICAgcmV0dXJuIHVzZXIubmFtZTtcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodXNlck5hbWUpIHtcbiAgICAgICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICAgIH0pO1xuXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpO1xuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgLy8gaWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25gIHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jy5cbiAgICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgICB9KTtcbiAgICAgIGBgYFxuICAgICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAvLyBUaGUgYFBlZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQXNzaW1pbGF0aW9uXG4gICAgICAtLS0tLS0tLS0tLS1cblxuICAgICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdhdGUgdG8gYSBkb3duc3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmVcbiAgICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICAgIGZ1bGZpbGxtZW50IG9yIHJlamVjdGlvbiBoYW5kbGVyLiBUaGUgZG93bnN0cmVhbSBwcm9taXNlIHdpbGwgdGhlbiBiZSBwZW5kaW5nXG4gICAgICB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmVcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFNpbXBsZSBFeGFtcGxlXG4gICAgICAtLS0tLS0tLS0tLS0tLVxuXG4gICAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG5cbiAgICAgIGBgYGphdmFzY3JpcHRcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGZpbmRSZXN1bHQoKTtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfVxuICAgICAgYGBgXG5cbiAgICAgIEVycmJhY2sgRXhhbXBsZVxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFJlc3VsdChmdW5jdGlvbihyZXN1bHQsIGVycil7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAvLyBmYWlsdXJlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBQcm9taXNlIEV4YW1wbGU7XG5cbiAgICAgIGBgYGphdmFzY3JpcHRcbiAgICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIEFkdmFuY2VkIEV4YW1wbGVcbiAgICAgIC0tLS0tLS0tLS0tLS0tXG5cbiAgICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgdmFyIGF1dGhvciwgYm9va3M7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF1dGhvciA9IGZpbmRBdXRob3IoKTtcbiAgICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfVxuICAgICAgYGBgXG5cbiAgICAgIEVycmJhY2sgRXhhbXBsZVxuXG4gICAgICBgYGBqc1xuXG4gICAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7XG5cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcblxuICAgICAgfVxuXG4gICAgICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgICAvLyBmYWlsdXJlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihhdXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHtcbiAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgZm91bmRCb29rcyhib29rcyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBQcm9taXNlIEV4YW1wbGU7XG5cbiAgICAgIGBgYGphdmFzY3JpcHRcbiAgICAgIGZpbmRBdXRob3IoKS5cbiAgICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICAgIHRoZW4oZnVuY3Rpb24oYm9va3Mpe1xuICAgICAgICAgIC8vIGZvdW5kIGJvb2tzXG4gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQG1ldGhvZCB0aGVuXG4gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZ1bGZpbGxlZFxuICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3RlZFxuICAgICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgICAgQHJldHVybiB7UHJvbWlzZX1cbiAgICAqL1xuICAgICAgdGhlbjogZnVuY3Rpb24ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IHBhcmVudC5fc3RhdGU7XG5cbiAgICAgICAgaWYgKHN0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQgJiYgIW9uRnVsZmlsbG1lbnQgfHwgc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEICYmICFvblJlamVjdGlvbikge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoaWxkID0gbmV3IHRoaXMuY29uc3RydWN0b3IobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkbm9vcCk7XG4gICAgICAgIHZhciByZXN1bHQgPSBwYXJlbnQuX3Jlc3VsdDtcblxuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbc3RhdGUgLSAxXTtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkZGVmYXVsdChmdW5jdGlvbigpe1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaW52b2tlQ2FsbGJhY2soc3RhdGUsIGNoaWxkLCBjYWxsYmFjaywgcmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfSxcblxuICAgIC8qKlxuICAgICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgICAgYXMgdGhlIGNhdGNoIGJsb2NrIG9mIGEgdHJ5L2NhdGNoIHN0YXRlbWVudC5cblxuICAgICAgYGBganNcbiAgICAgIGZ1bmN0aW9uIGZpbmRBdXRob3IoKXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHN5bmNocm9ub3VzXG4gICAgICB0cnkge1xuICAgICAgICBmaW5kQXV0aG9yKCk7XG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgfVxuXG4gICAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgICBmaW5kQXV0aG9yKCkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIEBtZXRob2QgY2F0Y2hcbiAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAgICovXG4gICAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwb2x5ZmlsbCQkcG9seWZpbGwoKSB7XG4gICAgICB2YXIgbG9jYWw7XG5cbiAgICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGxvY2FsID0gZ2xvYmFsO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgICAgIGlmIChQICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQLnJlc29sdmUoKSkgPT09ICdbb2JqZWN0IFByb21pc2VdJyAmJiAhUC5jYXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbG9jYWwuUHJvbWlzZSA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0O1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRwb2x5ZmlsbDtcblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlID0ge1xuICAgICAgJ1Byb21pc2UnOiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkZGVmYXVsdCxcbiAgICAgICdwb2x5ZmlsbCc6IGxpYiRlczYkcHJvbWlzZSRwb2x5ZmlsbCQkZGVmYXVsdFxuICAgIH07XG5cbiAgICAvKiBnbG9iYWwgZGVmaW5lOnRydWUgbW9kdWxlOnRydWUgd2luZG93OiB0cnVlICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkgeyByZXR1cm4gbGliJGVzNiRwcm9taXNlJHVtZCQkRVM2UHJvbWlzZTsgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGVbJ2V4cG9ydHMnXSkge1xuICAgICAgbW9kdWxlWydleHBvcnRzJ10gPSBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzWydFUzZQcm9taXNlJ10gPSBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlO1xuICAgIH1cblxuICAgIGxpYiRlczYkcHJvbWlzZSRwb2x5ZmlsbCQkZGVmYXVsdCgpO1xufSkuY2FsbCh0aGlzKTtcblxuIiwiLypcbkNvcHlyaWdodCAoQykgMjAxNSBGcmVkIEsuIFNjaG90dCA8ZmtzY2hvdHRAZ21haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5bEBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTMgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT5cbkNvcHlyaWdodCAoQykgMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPlxuQ29weXJpZ2h0IChDKSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlqbiA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPlxuQ29weXJpZ2h0IChDKSAyMDEyIEtyaXMgS293YWwgPGtyaXMua293YWxAY2l4YXIuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMiBBcnBhZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMSBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG5tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbkFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG5BUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG5ESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG5PTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG5USElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cbi8qZXNsaW50IG5vLXVuZGVmaW5lZDowLCBuby11c2UtYmVmb3JlLWRlZmluZTogMCovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgc3ludGF4ID0gcmVxdWlyZShcIi4vbGliL3N5bnRheFwiKSxcbiAgICB0b2tlbkluZm8gPSByZXF1aXJlKFwiLi9saWIvdG9rZW4taW5mb1wiKSxcbiAgICBhc3ROb2RlVHlwZXMgPSByZXF1aXJlKFwiLi9saWIvYXN0LW5vZGUtdHlwZXNcIiksXG4gICAgYXN0Tm9kZUZhY3RvcnkgPSByZXF1aXJlKFwiLi9saWIvYXN0LW5vZGUtZmFjdG9yeVwiKSxcbiAgICBkZWZhdWx0RmVhdHVyZXMgPSByZXF1aXJlKFwiLi9saWIvZmVhdHVyZXNcIiksXG4gICAgTWVzc2FnZXMgPSByZXF1aXJlKFwiLi9saWIvbWVzc2FnZXNcIiksXG4gICAgWEhUTUxFbnRpdGllcyA9IHJlcXVpcmUoXCIuL2xpYi94aHRtbC1lbnRpdGllc1wiKSxcbiAgICBTdHJpbmdNYXAgPSByZXF1aXJlKFwiLi9saWIvc3RyaW5nLW1hcFwiKSxcbiAgICBjb21tZW50QXR0YWNobWVudCA9IHJlcXVpcmUoXCIuL2xpYi9jb21tZW50LWF0dGFjaG1lbnRcIik7XG5cbnZhciBUb2tlbiA9IHRva2VuSW5mby5Ub2tlbixcbiAgICBUb2tlbk5hbWUgPSB0b2tlbkluZm8uVG9rZW5OYW1lLFxuICAgIEZuRXhwclRva2VucyA9IHRva2VuSW5mby5GbkV4cHJUb2tlbnMsXG4gICAgUmVnZXggPSBzeW50YXguUmVnZXgsXG4gICAgUHJvcGVydHlLaW5kLFxuICAgIHNvdXJjZSxcbiAgICBzdHJpY3QsXG4gICAgaW5kZXgsXG4gICAgbGluZU51bWJlcixcbiAgICBsaW5lU3RhcnQsXG4gICAgbGVuZ3RoLFxuICAgIGxvb2thaGVhZCxcbiAgICBzdGF0ZSxcbiAgICBleHRyYTtcblxuUHJvcGVydHlLaW5kID0ge1xuICAgIERhdGE6IDEsXG4gICAgR2V0OiAyLFxuICAgIFNldDogNFxufTtcblxuXG4vLyBFbnN1cmUgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3IuXG4vLyBUaGlzIGlzIG9ubHkgdG8gaGF2ZSBhIGJldHRlciBjb250cmFjdCBzZW1hbnRpYywgaS5lLiBhbm90aGVyIHNhZmV0eSBuZXRcbi8vIHRvIGNhdGNoIGEgbG9naWMgZXJyb3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5vcm1hbCBjYXNlLlxuLy8gRG8gTk9UIHVzZSB0aGlzIHRvIGVuZm9yY2UgYSBjZXJ0YWluIGNvbmRpdGlvbiBvbiBhbnkgdXNlciBpbnB1dC5cblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFTU0VSVDogXCIgKyBtZXNzYWdlKTtcbiAgICB9XG59XG5cbi8vIDcuNCBDb21tZW50c1xuXG5mdW5jdGlvbiBhZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHtcbiAgICB2YXIgY29tbWVudDtcblxuICAgIGFzc2VydCh0eXBlb2Ygc3RhcnQgPT09IFwibnVtYmVyXCIsIFwiQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb25cIik7XG5cbiAgICAvLyBCZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBpcyBzY2FubmVkLCBvZnRlbiB0aGUgY29tbWVudHNcbiAgICAvLyAoaWYgYW55KSBhcmUgc2tpcHBlZCB0d2ljZSBkdXJpbmcgdGhlIGxleGljYWwgYW5hbHlzaXMuXG4gICAgLy8gVGh1cywgd2UgbmVlZCB0byBza2lwIGFkZGluZyBhIGNvbW1lbnQgaWYgdGhlIGNvbW1lbnQgYXJyYXkgYWxyZWFkeVxuICAgIC8vIGhhbmRsZWQgaXQuXG4gICAgaWYgKHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPj0gc3RhcnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID0gc3RhcnQ7XG5cbiAgICBjb21tZW50ID0ge1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICB9O1xuICAgIGlmIChleHRyYS5yYW5nZSkge1xuICAgICAgICBjb21tZW50LnJhbmdlID0gW3N0YXJ0LCBlbmRdO1xuICAgIH1cbiAgICBpZiAoZXh0cmEubG9jKSB7XG4gICAgICAgIGNvbW1lbnQubG9jID0gbG9jO1xuICAgIH1cbiAgICBleHRyYS5jb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuXG4gICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHtcbiAgICAgICAgY29tbWVudEF0dGFjaG1lbnQuYWRkQ29tbWVudChjb21tZW50KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNraXBTaW5nbGVMaW5lQ29tbWVudChvZmZzZXQpIHtcbiAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7XG5cbiAgICBzdGFydCA9IGluZGV4IC0gb2Zmc2V0O1xuICAgIGxvYyA9IHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gb2Zmc2V0XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICArK2luZGV4O1xuICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0LCBpbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAxXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRDb21tZW50KFwiTGluZVwiLCBjb21tZW50LCBzdGFydCwgaW5kZXggLSAxLCBsb2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoID09PSAxMyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7XG4gICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGluZGV4KTtcbiAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICAgIGFkZENvbW1lbnQoXCJMaW5lXCIsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNraXBNdWx0aUxpbmVDb21tZW50KCkge1xuICAgIHZhciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDtcblxuICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICBzdGFydCA9IGluZGV4IC0gMjtcbiAgICAgICAgbG9jID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAyXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgwQSkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHtcbiAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoIFwiKi9cIi5cbiAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDJGKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgMiwgaW5kZXggLSAyKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoXCJCbG9ja1wiLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG59XG5cbmZ1bmN0aW9uIHNraXBDb21tZW50KCkge1xuICAgIHZhciBjaCwgc3RhcnQ7XG5cbiAgICBzdGFydCA9IChpbmRleCA9PT0gMCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgICAgIGlmIChzeW50YXguaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgc3RhcnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJGKSB7IC8vIFUrMDAyRiBpcyBcIi9cIlxuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDJGKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgyKTtcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7ICAvLyBVKzAwMkEgaXMgXCIqXCJcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgc2tpcE11bHRpTGluZUNvbW1lbnQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgJiYgY2ggPT09IDB4MkQpIHsgLy8gVSswMDJEIGlzIFwiLVwiXG4gICAgICAgICAgICAvLyBVKzAwM0UgaXMgXCI+XCJcbiAgICAgICAgICAgIGlmICgoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRCkgJiYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4M0UpKSB7XG4gICAgICAgICAgICAgICAgLy8gXCItLT5cIiBpcyBhIHNpbmdsZS1saW5lIGNvbW1lbnRcbiAgICAgICAgICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4M0MpIHsgLy8gVSswMDNDIGlzIFwiPFwiXG4gICAgICAgICAgICBpZiAoc291cmNlLnNsaWNlKGluZGV4ICsgMSwgaW5kZXggKyA0KSA9PT0gXCIhLS1cIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGA8YFxuICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAhYFxuICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYFxuICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYFxuICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCg0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2NhbkhleEVzY2FwZShwcmVmaXgpIHtcbiAgICB2YXIgaSwgbGVuLCBjaCwgY29kZSA9IDA7XG5cbiAgICBsZW4gPSAocHJlZml4ID09PSBcInVcIikgPyA0IDogMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIHN5bnRheC5pc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyBcIjAxMjM0NTY3ODlhYmNkZWZcIi5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG59XG5cbi8qKlxuICogU2NhbnMgYW4gZXh0ZW5kZWQgdW5pY29kZSBjb2RlIHBvaW50IGVzY2FwZSBzZXF1ZW5jZSBmcm9tIHNvdXJjZS4gVGhyb3dzIGFuXG4gKiBlcnJvciBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHkgb3IgaWYgdGhlIGNvZGUgcG9pbnQgdmFsdWUgaXMgdG9vIGxhcmdlLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHN0cmluZyBjcmVhdGVkIGJ5IHRoZSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCkge1xuICAgIHZhciBjaCwgY29kZSwgY3UxLCBjdTI7XG5cbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgY29kZSA9IDA7XG5cbiAgICAvLyBBdCBsZWFzdCBvbmUgaGV4IGRpZ2l0IGlzIHJlcXVpcmVkLlxuICAgIGlmIChjaCA9PT0gXCJ9XCIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICBpZiAoIXN5bnRheC5pc0hleERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArIFwiMDEyMzQ1Njc4OWFiY2RlZlwiLmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPiAweDEwRkZGRiB8fCBjaCAhPT0gXCJ9XCIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgLy8gVVRGLTE2IEVuY29kaW5nXG4gICAgaWYgKGNvZGUgPD0gMHhGRkZGKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH1cbiAgICBjdTEgPSAoKGNvZGUgLSAweDEwMDAwKSA+PiAxMCkgKyAweEQ4MDA7XG4gICAgY3UyID0gKChjb2RlIC0gMHgxMDAwMCkgJiAxMDIzKSArIDB4REMwMDtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjdTEsIGN1Mik7XG59XG5cbmZ1bmN0aW9uIGdldEVzY2FwZWRJZGVudGlmaWVyKCkge1xuICAgIHZhciBjaCwgaWQ7XG5cbiAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KyspO1xuICAgIGlkID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAvLyBcIlxcdVwiIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICBpZiAoY2ggPT09IDB4NUMpIHtcbiAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKFwidVwiKTtcbiAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gXCJcXFxcXCIgfHwgIXN5bnRheC5pc0lkZW50aWZpZXJTdGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWQgPSBjaDtcbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmICghc3ludGF4LmlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICArK2luZGV4O1xuICAgICAgICBpZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgICAgICAvLyBcIlxcdVwiIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoXCJ1XCIpO1xuICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gXCJcXFxcXCIgfHwgIXN5bnRheC5pc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZCArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHtcbiAgICB2YXIgc3RhcnQsIGNoO1xuXG4gICAgc3RhcnQgPSBpbmRleCsrO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgICAgICAgICAvLyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgaW5kZXggPSBzdGFydDtcbiAgICAgICAgICAgIHJldHVybiBnZXRFc2NhcGVkSWRlbnRpZmllcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyUGFydChjaCkpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KTtcbn1cblxuZnVuY3Rpb24gc2NhbklkZW50aWZpZXIoKSB7XG4gICAgdmFyIHN0YXJ0LCBpZCwgdHlwZTtcblxuICAgIHN0YXJ0ID0gaW5kZXg7XG5cbiAgICAvLyBCYWNrc2xhc2ggKFUrMDA1Qykgc3RhcnRzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgIGlkID0gKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHg1QykgPyBnZXRFc2NhcGVkSWRlbnRpZmllcigpIDogZ2V0SWRlbnRpZmllcigpO1xuXG4gICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLlxuICAgIC8vIFRodXMsIGl0IG11c3QgYmUgYW4gaWRlbnRpZmllci5cbiAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyO1xuICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzS2V5d29yZChpZCwgc3RyaWN0LCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgIHR5cGUgPSBUb2tlbi5LZXl3b3JkO1xuICAgIH0gZWxzZSBpZiAoaWQgPT09IFwibnVsbFwiKSB7XG4gICAgICAgIHR5cGUgPSBUb2tlbi5OdWxsTGl0ZXJhbDtcbiAgICB9IGVsc2UgaWYgKGlkID09PSBcInRydWVcIiB8fCBpZCA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgIHR5cGUgPSBUb2tlbi5Cb29sZWFuTGl0ZXJhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5cbi8vIDcuNyBQdW5jdHVhdG9yc1xuXG5mdW5jdGlvbiBzY2FuUHVuY3R1YXRvcigpIHtcbiAgICB2YXIgc3RhcnQgPSBpbmRleCxcbiAgICAgICAgY29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSxcbiAgICAgICAgY29kZTIsXG4gICAgICAgIGNoMSA9IHNvdXJjZVtpbmRleF0sXG4gICAgICAgIGNoMixcbiAgICAgICAgY2gzLFxuICAgICAgICBjaDQ7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG1vc3QgY29tbW9uIHNpbmdsZS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuXG4gICAgICAgIGNhc2UgNDA6ICAgLy8gKCBvcGVuIGJyYWNrZXRcbiAgICAgICAgY2FzZSA0MTogICAvLyApIGNsb3NlIGJyYWNrZXRcbiAgICAgICAgY2FzZSA1OTogICAvLyA7IHNlbWljb2xvblxuICAgICAgICBjYXNlIDQ0OiAgIC8vICwgY29tbWFcbiAgICAgICAgY2FzZSA5MTogICAvLyBbXG4gICAgICAgIGNhc2UgOTM6ICAgLy8gXVxuICAgICAgICBjYXNlIDU4OiAgIC8vIDpcbiAgICAgICAgY2FzZSA2MzogICAvLyA/XG4gICAgICAgIGNhc2UgMTI2OiAgLy8gflxuICAgICAgICAgICAgKytpbmRleDtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSksXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgY2FzZSAxMjM6ICAvLyB7IG9wZW4gY3VybHkgYnJhY2VcbiAgICAgICAgY2FzZSAxMjU6ICAvLyB9IGNsb3NlIGN1cmx5IGJyYWNlXG4gICAgICAgICAgICArK2luZGV4O1xuXG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUgJiYgY29kZSA9PT0gMTIzKSB7XG4gICAgICAgICAgICAgICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29rYWhlYWQyIGZ1bmN0aW9uIGNhbiBjYXVzZSB0b2tlbnMgdG8gYmUgc2Nhbm5lZCB0d2ljZSBhbmQgaW4gZG9pbmcgc29cbiAgICAgICAgICAgIC8vIHdvdWxkIHdyZWNrIHRoZSBjdXJseSBzdGFjayBieSBwdXNoaW5nIHRoZSBzYW1lIHRva2VuIG9udG8gdGhlIHN0YWNrIHR3aWNlLlxuICAgICAgICAgICAgLy8gY3VybHlMYXN0SW5kZXggZW5zdXJlcyBlYWNoIHRva2VuIGlzIHB1c2hlZCBvciBwb3BwZWQgZXhhY3RseSBvbmNlXG4gICAgICAgICAgICBpZiAoaW5kZXggPiBzdGF0ZS5jdXJseUxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmN1cmx5TGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IDEyMykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnB1c2goXCJ7XCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSksXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvZGUyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcblxuICAgICAgICAgICAgLy8gXCI9XCIgKGNoYXIgIzYxKSBtYXJrcyBhbiBhc3NpZ25tZW50IG9yIGNvbXBhcmlzb24gb3BlcmF0b3IuXG4gICAgICAgICAgICBpZiAoY29kZTIgPT09IDYxKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6ICAvLyAlXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6ICAvLyAmXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDI6ICAvLyAqOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQzOiAgLy8gK1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ1OiAgLy8gLVxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ3OiAgLy8gL1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDYwOiAgLy8gPFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDYyOiAgLy8gPlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDk0OiAgLy8gXlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEyNDogLy8gfFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzM6IC8vICFcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2MTogLy8gPVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIT09IGFuZCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDYxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBQZWVrIG1vcmUgY2hhcmFjdGVycy5cblxuICAgIGNoMiA9IHNvdXJjZVtpbmRleCArIDFdO1xuICAgIGNoMyA9IHNvdXJjZVtpbmRleCArIDJdO1xuICAgIGNoNCA9IHNvdXJjZVtpbmRleCArIDNdO1xuXG4gICAgLy8gNC1jaGFyYWN0ZXIgcHVuY3R1YXRvcjogPj4+PVxuXG4gICAgaWYgKGNoMSA9PT0gXCI+XCIgJiYgY2gyID09PSBcIj5cIiAmJiBjaDMgPT09IFwiPlwiKSB7XG4gICAgICAgIGlmIChjaDQgPT09IFwiPVwiKSB7XG4gICAgICAgICAgICBpbmRleCArPSA0O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBcIj4+Pj1cIixcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49XG5cbiAgICBpZiAoY2gxID09PSBcIj5cIiAmJiBjaDIgPT09IFwiPlwiICYmIGNoMyA9PT0gXCI+XCIpIHtcbiAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogXCI+Pj5cIixcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaDEgPT09IFwiPFwiICYmIGNoMiA9PT0gXCI8XCIgJiYgY2gzID09PSBcIj1cIikge1xuICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBcIjw8PVwiLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGNoMSA9PT0gXCI+XCIgJiYgY2gyID09PSBcIj5cIiAmJiBjaDMgPT09IFwiPVwiKSB7XG4gICAgICAgIGluZGV4ICs9IDM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IFwiPj49XCIsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUaGUgLi4uIG9wZXJhdG9yIChzcHJlYWQsIHJlc3RQYXJhbXMsIEpTWCwgZXRjLilcbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLnNwcmVhZCB8fFxuICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMucmVzdFBhcmFtcyB8fFxuICAgICAgICAoZXh0cmEuZWNtYUZlYXR1cmVzLmpzeCAmJiBzdGF0ZS5pbkpTWFNwcmVhZEF0dHJpYnV0ZSlcbiAgICApIHtcbiAgICAgICAgaWYgKGNoMSA9PT0gXCIuXCIgJiYgY2gyID09PSBcIi5cIiAmJiBjaDMgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBcIi4uLlwiLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3RoZXIgMi1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6ICsrIC0tIDw8ID4+ICYmIHx8XG4gICAgaWYgKGNoMSA9PT0gY2gyICYmIChcIistPD4mfFwiLmluZGV4T2YoY2gxKSA+PSAwKSkge1xuICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBjaDEgKyBjaDIsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB0aGUgPT4gZm9yIGFycm93IGZ1bmN0aW9uc1xuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMuYXJyb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgaWYgKGNoMSA9PT0gXCI9XCIgJiYgY2gyID09PSBcIj5cIikge1xuICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCI9PlwiLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFwiPD49ISstKiUmfF4vXCIuaW5kZXhPZihjaDEpID49IDApIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogY2gxLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGNoMSA9PT0gXCIuXCIpIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogY2gxLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG59XG5cbi8vIDcuOC4zIE51bWVyaWMgTGl0ZXJhbHNcblxuZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3RhcnQpIHtcbiAgICB2YXIgbnVtYmVyID0gXCJcIjtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN5bnRheC5pc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgIH1cblxuICAgIGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHBhcnNlSW50KFwiMHhcIiArIG51bWJlciwgMTYpLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhbkJpbmFyeUxpdGVyYWwoc3RhcnQpIHtcbiAgICB2YXIgY2gsIG51bWJlciA9IFwiXCI7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggIT09IFwiMFwiICYmIGNoICE9PSBcIjFcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBvbmx5IDBiIG9yIDBCXG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuXG4gICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBzeW50YXguaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCAyKSxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5PY3RhbExpdGVyYWwocHJlZml4LCBzdGFydCkge1xuICAgIHZhciBudW1iZXIsIG9jdGFsO1xuXG4gICAgaWYgKHN5bnRheC5pc09jdGFsRGlnaXQocHJlZml4KSkge1xuICAgICAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgIG51bWJlciA9IFwiMFwiICsgc291cmNlW2luZGV4KytdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9jdGFsID0gZmFsc2U7XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIG51bWJlciA9IFwiXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmICghc3ludGF4LmlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICB9XG5cbiAgICBpZiAoIW9jdGFsICYmIG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gb25seSAwbyBvciAwT1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkgfHwgc3ludGF4LmlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDgpLFxuICAgICAgICBvY3RhbDogb2N0YWwsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuTnVtZXJpY0xpdGVyYWwoKSB7XG4gICAgdmFyIG51bWJlciwgc3RhcnQsIGNoO1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGFzc2VydChzeW50YXguaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSBcIi5cIiksXG4gICAgICAgIFwiTnVtZXJpYyBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50XCIpO1xuXG4gICAgc3RhcnQgPSBpbmRleDtcbiAgICBudW1iZXIgPSBcIlwiO1xuICAgIGlmIChjaCAhPT0gXCIuXCIpIHtcbiAgICAgICAgbnVtYmVyID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG5cbiAgICAgICAgLy8gSGV4IG51bWJlciBzdGFydHMgd2l0aCBcIjB4XCIuXG4gICAgICAgIC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0aCBcIjBcIi5cbiAgICAgICAgaWYgKG51bWJlciA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJ4XCIgfHwgY2ggPT09IFwiWFwiKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkhleExpdGVyYWwoc3RhcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5hcnkgbnVtYmVyIGluIEVTNiBzdGFydHMgd2l0aCAnMGInXG4gICAgICAgICAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmJpbmFyeUxpdGVyYWxzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSBcImJcIiB8fCBjaCA9PT0gXCJCXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5CaW5hcnlMaXRlcmFsKHN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoZXh0cmEuZWNtYUZlYXR1cmVzLm9jdGFsTGl0ZXJhbHMgJiYgKGNoID09PSBcIm9cIiB8fCBjaCA9PT0gXCJPXCIpKSB8fCBzeW50YXguaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRlY2ltYWwgbnVtYmVyIHN0YXJ0cyB3aXRoIFwiMFwiIHN1Y2ggYXMgXCIwOVwiIGlzIGlsbGVnYWwuXG4gICAgICAgICAgICBpZiAoY2ggJiYgc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIH1cbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gXCIuXCIpIHtcbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgd2hpbGUgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiZVwiIHx8IGNoID09PSBcIkVcIikge1xuICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuXG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSBcIitcIiB8fCBjaCA9PT0gXCItXCIpIHtcbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICB3aGlsZSAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG4vKipcbiAqIFNjYW4gYSBzdHJpbmcgZXNjYXBlIHNlcXVlbmNlIGFuZCByZXR1cm4gaXRzIHNwZWNpYWwgY2hhcmFjdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGNoIFRoZSBzdGFydGluZyBjaGFyYWN0ZXIgb2YgdGhlIGdpdmVuIHNlcXVlbmNlLlxuICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlciBhbmQgYSBmbGFnXG4gKiBpZiB0aGUgZXNjYXBlIHNlcXVlbmNlIHdhcyBhbiBvY3RhbC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNjYW5Fc2NhcGVTZXF1ZW5jZShjaCkge1xuICAgIHZhciBjb2RlLFxuICAgICAgICB1bmVzY2FwZWQsXG4gICAgICAgIHJlc3RvcmUsXG4gICAgICAgIGVzY2FwZWRDaCxcbiAgICAgICAgb2N0YWwgPSBmYWxzZTtcblxuICAgIC8vIEFuIGVzY2FwZSBzZXF1ZW5jZSBjYW5ub3QgYmUgZW1wdHlcbiAgICBpZiAoIWNoKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgIGlmIChjaCA9PT0gXCJcXHJcIiAmJiBzb3VyY2VbaW5kZXhdID09PSBcIlxcblwiKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9XG4gICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwidVwiICYmIHNvdXJjZVtpbmRleF0gPT09IFwie1wiKSB7XG4gICAgICAgIC8vIEhhbmRsZSBFUzYgZXh0ZW5kZWQgdW5pY29kZSBjb2RlIHBvaW50IGVzY2FwZSBzZXF1ZW5jZXMuXG4gICAgICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMudW5pY29kZUNvZGVQb2ludEVzY2FwZXMpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBlc2NhcGVkQ2ggPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInVcIiB8fCBjaCA9PT0gXCJ4XCIpIHtcbiAgICAgICAgLy8gSGFuZGxlIG90aGVyIHVuaWNvZGUgYW5kIGhleCBjb2RlcyBub3JtYWxseVxuICAgICAgICByZXN0b3JlID0gaW5kZXg7XG4gICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpO1xuICAgICAgICBpZiAodW5lc2NhcGVkKSB7XG4gICAgICAgICAgICBlc2NhcGVkQ2ggPSB1bmVzY2FwZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7XG4gICAgICAgICAgICBlc2NhcGVkQ2ggPSBjaDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiblwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxuXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJyXCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXHJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInRcIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcdFwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiYlwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxiXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJmXCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXGZcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInZcIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcdlwiO1xuICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgY29kZSA9IFwiMDEyMzQ1NjdcIi5pbmRleE9mKGNoKTtcblxuICAgICAgICAvLyBcXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgb2N0YWwgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIHN5bnRheC5pc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArIFwiMDEyMzQ1NjdcIi5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG5cbiAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzIHdpdGggMCwgMSwgMiwgM1xuICAgICAgICAgICAgaWYgKFwiMDEyM1wiLmluZGV4T2YoY2gpID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgc3ludGF4LmlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArIFwiMDEyMzQ1NjdcIi5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXNjYXBlZENoID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlc2NhcGVkQ2ggPSBjaDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjaDogZXNjYXBlZENoLFxuICAgICAgICBvY3RhbDogb2N0YWxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuU3RyaW5nTGl0ZXJhbCgpIHtcbiAgICB2YXIgc3RyID0gXCJcIixcbiAgICAgICAgY2gsXG4gICAgICAgIGVzY2FwZWRTZXF1ZW5jZSxcbiAgICAgICAgb2N0YWwgPSBmYWxzZSxcbiAgICAgICAgc3RhcnQgPSBpbmRleCxcbiAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcixcbiAgICAgICAgc3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQsXG4gICAgICAgIHF1b3RlID0gc291cmNlW2luZGV4XTtcblxuICAgIGFzc2VydCgocXVvdGUgPT09IFwiJ1wiIHx8IHF1b3RlID09PSBcIlxcXCJcIiksXG4gICAgICAgIFwiU3RyaW5nIGxpdGVyYWwgbXVzdCBzdGFydHMgd2l0aCBhIHF1b3RlXCIpO1xuXG4gICAgKytpbmRleDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICAgICAgcXVvdGUgPSBcIlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIGVzY2FwZWRTZXF1ZW5jZSA9IHNjYW5Fc2NhcGVTZXF1ZW5jZShjaCk7XG4gICAgICAgICAgICBzdHIgKz0gZXNjYXBlZFNlcXVlbmNlLmNoO1xuICAgICAgICAgICAgb2N0YWwgPSBlc2NhcGVkU2VxdWVuY2Uub2N0YWwgfHwgb2N0YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocXVvdGUgIT09IFwiXCIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uU3RyaW5nTGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHN0cixcbiAgICAgICAgb2N0YWw6IG9jdGFsLFxuICAgICAgICBzdGFydExpbmVOdW1iZXI6IHN0YXJ0TGluZU51bWJlcixcbiAgICAgICAgc3RhcnRMaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0LFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgdGVtcGxhdGUgc3RyaW5nIGFuZCByZXR1cm4gYSB0b2tlbi4gVGhpcyBzY2FucyBib3RoIHRoZSBmaXJzdCBhbmRcbiAqIHN1YnNlcXVlbnQgcGllY2VzIG9mIGEgdGVtcGxhdGUgc3RyaW5nIGFuZCBhc3N1bWVzIHRoYXQgdGhlIGZpcnN0IGJhY2t0aWNrXG4gKiBvciB0aGUgY2xvc2luZyB9IGhhdmUgYWxyZWFkeSBiZWVuIHNjYW5uZWQuXG4gKiBAcmV0dXJucyB7VG9rZW59IFRoZSB0ZW1wbGF0ZSBzdHJpbmcgdG9rZW4uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzY2FuVGVtcGxhdGUoKSB7XG4gICAgdmFyIGNvb2tlZCA9IFwiXCIsXG4gICAgICAgIGNoLFxuICAgICAgICBlc2NhcGVkU2VxdWVuY2UsXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZSxcbiAgICAgICAgdGFpbCA9IGZhbHNlLFxuICAgICAgICBoZWFkID0gKHNvdXJjZVtpbmRleF0gPT09IFwiYFwiKTtcblxuICAgICsraW5kZXg7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICAgICAgaWYgKGNoID09PSBcImBcIikge1xuICAgICAgICAgICAgdGFpbCA9IHRydWU7XG4gICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBcIiRcIikge1xuICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09IFwie1wiKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgZXNjYXBlZFNlcXVlbmNlID0gc2NhbkVzY2FwZVNlcXVlbmNlKGNoKTtcblxuICAgICAgICAgICAgaWYgKGVzY2FwZWRTZXF1ZW5jZS5vY3RhbCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlRlbXBsYXRlT2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29va2VkICs9IGVzY2FwZWRTZXF1ZW5jZS5jaDtcblxuICAgICAgICB9IGVsc2UgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwiXFxyXCIgJiYgc291cmNlW2luZGV4XSA9PT0gXCJcXG5cIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIGNvb2tlZCArPSBcIlxcblwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29va2VkICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0ZXJtaW5hdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA+IHN0YXRlLmN1cmx5TGFzdEluZGV4KSB7XG4gICAgICAgIHN0YXRlLmN1cmx5TGFzdEluZGV4ID0gaW5kZXg7XG5cbiAgICAgICAgaWYgKCF0YWlsKSB7XG4gICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnB1c2goXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGVhZCkge1xuICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLlRlbXBsYXRlLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgY29va2VkOiBjb29rZWQsXG4gICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZShzdGFydCArIDEsIGluZGV4IC0gKCh0YWlsKSA/IDEgOiAyKSlcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZDogaGVhZCxcbiAgICAgICAgdGFpbDogdGFpbCxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHtcbiAgICB2YXIgdG1wID0gcGF0dGVybixcbiAgICAgICAgdmFsaWRGbGFncyA9IFwiZ21zaVwiO1xuXG4gICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5yZWdleFlGbGFnKSB7XG4gICAgICAgIHZhbGlkRmxhZ3MgKz0gXCJ5XCI7XG4gICAgfVxuXG4gICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5yZWdleFVGbGFnKSB7XG4gICAgICAgIHZhbGlkRmxhZ3MgKz0gXCJ1XCI7XG4gICAgfVxuXG4gICAgaWYgKCFSZWdFeHAoXCJeW1wiICsgdmFsaWRGbGFncyArIFwiXSokXCIpLnRlc3QoZmxhZ3MpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRSZWdFeHBGbGFnKTtcbiAgICB9XG5cblxuICAgIGlmIChmbGFncy5pbmRleE9mKFwidVwiKSA+PSAwKSB7XG4gICAgICAgIC8vIFJlcGxhY2UgZWFjaCBhc3RyYWwgc3ltYm9sIGFuZCBldmVyeSBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlIHdpdGggYSBzaW5nbGUgQVNDSUkgc3ltYm9sIHRvIGF2b2lkIHRocm93aW5nIG9uXG4gICAgICAgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBhcmUgb25seSB2YWxpZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZVxuICAgICAgICAvLyBgL3VgIGZsYWcuXG4gICAgICAgIC8vIE5vdGU6IHJlcGxhY2luZyB3aXRoIHRoZSBBU0NJSSBzeW1ib2wgYHhgIG1pZ2h0IGNhdXNlIGZhbHNlXG4gICAgICAgIC8vIG5lZ2F0aXZlcyBpbiB1bmxpa2VseSBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1xcdXs2MX0tYl1gIGlzIGFcbiAgICAgICAgLy8gcGVyZmVjdGx5IHZhbGlkIHBhdHRlcm4gdGhhdCBpcyBlcXVpdmFsZW50IHRvIGBbYS1iXWAsIGJ1dCBpdFxuICAgICAgICAvLyB3b3VsZCBiZSByZXBsYWNlZCBieSBgW3gtYl1gIHdoaWNoIHRocm93cyBhbiBlcnJvci5cbiAgICAgICAgdG1wID0gdG1wXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxcXHVcXHsoWzAtOWEtZkEtRl0rKVxcfS9nLCBmdW5jdGlvbiAoJDAsICQxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KCQxLCAxNikgPD0gMHgxMEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwieFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nLCBcInhcIik7XG4gICAgfVxuXG4gICAgLy8gRmlyc3QsIGRldGVjdCBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gICAgdHJ5IHtcbiAgICAgICAgUmVnRXhwKHRtcCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IGZvciB0aGlzIHBhdHRlcm4tZmxhZyBwYWlyLCBvclxuICAgIC8vIGBudWxsYCBpbiBjYXNlIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmxhZ3MgaXRcbiAgICAvLyB1c2VzLlxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTtcbiAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzY2FuUmVnRXhwQm9keSgpIHtcbiAgICB2YXIgY2gsIHN0ciwgY2xhc3NNYXJrZXIsIHRlcm1pbmF0ZWQsIGJvZHk7XG5cbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgYXNzZXJ0KGNoID09PSBcIi9cIiwgXCJSZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaFwiKTtcbiAgICBzdHIgPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICBjbGFzc01hcmtlciA9IGZhbHNlO1xuICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgaWYgKGNoID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICAvLyBFQ01BLTI2MiA3LjguNVxuICAgICAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICAgICAgfSBlbHNlIGlmIChjbGFzc01hcmtlcikge1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIl1cIikge1xuICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBcIltcIikge1xuICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGVybWluYXRlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApO1xuICAgIH1cblxuICAgIC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guXG4gICAgYm9keSA9IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBib2R5LFxuICAgICAgICBsaXRlcmFsOiBzdHJcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuUmVnRXhwRmxhZ3MoKSB7XG4gICAgdmFyIGNoLCBzdHIsIGZsYWdzLCByZXN0b3JlO1xuXG4gICAgc3RyID0gXCJcIjtcbiAgICBmbGFncyA9IFwiXCI7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKCFzeW50YXguaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICArK2luZGV4O1xuICAgICAgICBpZiAoY2ggPT09IFwiXFxcXFwiICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwidVwiKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKFwidVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoc3RyICs9IFwiXFxcXHVcIjsgcmVzdG9yZSA8IGluZGV4OyArK3Jlc3RvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzb3VyY2VbcmVzdG9yZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IFwidVwiO1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCJcXFxcdVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gXCJcXFxcXCI7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYWdzICs9IGNoO1xuICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGZsYWdzLFxuICAgICAgICBsaXRlcmFsOiBzdHJcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuUmVnRXhwKCkge1xuICAgIHZhciBzdGFydCwgYm9keSwgZmxhZ3MsIHZhbHVlO1xuXG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBza2lwQ29tbWVudCgpO1xuICAgIHN0YXJ0ID0gaW5kZXg7XG5cbiAgICBib2R5ID0gc2NhblJlZ0V4cEJvZHkoKTtcbiAgICBmbGFncyA9IHNjYW5SZWdFeHBGbGFncygpO1xuICAgIHZhbHVlID0gdGVzdFJlZ0V4cChib2R5LnZhbHVlLCBmbGFncy52YWx1ZSk7XG5cbiAgICBpZiAoZXh0cmEudG9rZW5pemUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlJlZ3VsYXJFeHByZXNzaW9uLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgcmVnZXg6IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBib2R5LnZhbHVlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncy52YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgcmVnZXg6IHtcbiAgICAgICAgICAgIHBhdHRlcm46IGJvZHkudmFsdWUsXG4gICAgICAgICAgICBmbGFnczogZmxhZ3MudmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZ2V4KCkge1xuICAgIHZhciBwb3MsIGxvYywgcmVnZXgsIHRva2VuO1xuXG4gICAgc2tpcENvbW1lbnQoKTtcblxuICAgIHBvcyA9IGluZGV4O1xuICAgIGxvYyA9IHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVnZXggPSBzY2FuUmVnRXhwKCk7XG4gICAgbG9jLmVuZCA9IHtcbiAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgIH07XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghZXh0cmEudG9rZW5pemUpIHtcbiAgICAgICAgLy8gUG9wIHRoZSBwcmV2aW91cyB0b2tlbiwgd2hpY2ggaXMgbGlrZWx5IFwiL1wiIG9yIFwiLz1cIlxuICAgICAgICBpZiAoZXh0cmEudG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0b2tlbi5yYW5nZVswXSA9PT0gcG9zICYmIHRva2VuLnR5cGUgPT09IFwiUHVuY3R1YXRvclwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcIi9cIiB8fCB0b2tlbi52YWx1ZSA9PT0gXCIvPVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRyYS50b2tlbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBcIlJlZ3VsYXJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICB2YWx1ZTogcmVnZXgubGl0ZXJhbCxcbiAgICAgICAgICAgIHJlZ2V4OiByZWdleC5yZWdleCxcbiAgICAgICAgICAgIHJhbmdlOiBbcG9zLCBpbmRleF0sXG4gICAgICAgICAgICBsb2M6IGxvY1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnZXg7XG59XG5cbmZ1bmN0aW9uIGlzSWRlbnRpZmllck5hbWUodG9rZW4pIHtcbiAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkIHx8XG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsIHx8XG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsO1xufVxuXG5mdW5jdGlvbiBhZHZhbmNlU2xhc2goKSB7XG4gICAgdmFyIHByZXZUb2tlbixcbiAgICAgICAgY2hlY2tUb2tlbjtcbiAgICAvLyBVc2luZyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnblxuICAgIHByZXZUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgaWYgKCFwcmV2VG9rZW4pIHtcbiAgICAgICAgLy8gTm90aGluZyBiZWZvcmUgdGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uXG4gICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICB9XG4gICAgaWYgKHByZXZUb2tlbi50eXBlID09PSBcIlB1bmN0dWF0b3JcIikge1xuICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSBcIl1cIikge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gXCIpXCIpIHtcbiAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3BlblBhcmVuVG9rZW4gLSAxXTtcbiAgICAgICAgICAgIGlmIChjaGVja1Rva2VuICYmXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udHlwZSA9PT0gXCJLZXl3b3JkXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgKGNoZWNrVG9rZW4udmFsdWUgPT09IFwiaWZcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gXCJ3aGlsZVwiIHx8XG4gICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSBcImZvclwiIHx8XG4gICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSBcIndpdGhcIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSBcIn1cIikge1xuICAgICAgICAgICAgLy8gRGl2aWRpbmcgYSBmdW5jdGlvbiBieSBhbnl0aGluZyBtYWtlcyBsaXR0bGUgc2Vuc2UsXG4gICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC5cbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSAzXSAmJlxuICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSAzXS50eXBlID09PSBcIktleXdvcmRcIikge1xuICAgICAgICAgICAgICAgIC8vIEFub255bW91cyBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF07XG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiZcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0udHlwZSA9PT0gXCJLZXl3b3JkXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNV07XG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2tUb2tlbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzXG4gICAgICAgICAgICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJlc3Npb24uXG4gICAgICAgICAgICBpZiAoRm5FeHByVG9rZW5zLmluZGV4T2YoY2hlY2tUb2tlbi52YWx1ZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGV4cHJlc3Npb24uXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJdCBpcyBhIGRlY2xhcmF0aW9uLlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICB9XG4gICAgaWYgKHByZXZUb2tlbi50eXBlID09PSBcIktleXdvcmRcIikge1xuICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgfVxuICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xufVxuXG5mdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgIHZhciBjaCxcbiAgICAgICAgYWxsb3dKU1ggPSBleHRyYS5lY21hRmVhdHVyZXMuanN4LFxuICAgICAgICBhbGxvd1RlbXBsYXRlU3RyaW5ncyA9IGV4dHJhLmVjbWFGZWF0dXJlcy50ZW1wbGF0ZVN0cmluZ3M7XG5cbiAgICAvKlxuICAgICAqIElmIEpTWCBpc24ndCBhbGxvd2VkIG9yIEpTWCBpcyBhbGxvd2VkIGFuZCB3ZSdyZSBub3QgaW5zaWRlIGFuIEpTWCBjaGlsZCxcbiAgICAgKiB0aGVuIHNraXAgYW55IGNvbW1lbnRzLlxuICAgICAqL1xuICAgIGlmICghYWxsb3dKU1ggfHwgIXN0YXRlLmluSlNYQ2hpbGQpIHtcbiAgICAgICAgc2tpcENvbW1lbnQoKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5FT0YsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW2luZGV4LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBpZiBpbnNpZGUgYW4gSlNYIGNoaWxkLCB0aGVuIGFib3J0IHJlZ3VsYXIgdG9rZW5pemF0aW9uXG4gICAgaWYgKGFsbG93SlNYICYmIHN0YXRlLmluSlNYQ2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGFkdmFuY2VKU1hDaGlsZCgpO1xuICAgIH1cblxuICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgLy8gVmVyeSBjb21tb246ICggYW5kICkgYW5kIDtcbiAgICBpZiAoY2ggPT09IDB4MjggfHwgY2ggPT09IDB4MjkgfHwgY2ggPT09IDB4M0IpIHtcbiAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgfVxuXG4gICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xlIHF1b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS5cbiAgICBpZiAoY2ggPT09IDB4MjcgfHwgY2ggPT09IDB4MjIpIHtcbiAgICAgICAgaWYgKGFsbG93SlNYICYmIHN0YXRlLmluSlNYVGFnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbkpTWFN0cmluZ0xpdGVyYWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzY2FuU3RyaW5nTGl0ZXJhbCgpO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0pTWCAmJiBzdGF0ZS5pbkpTWFRhZyAmJiBzeW50YXguaXNKU1hJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG4gICAgICAgIHJldHVybiBzY2FuSlNYSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIC8vIFRlbXBsYXRlIHN0cmluZ3Mgc3RhcnQgd2l0aCBiYWNrdGljayAoVSswMDk2KSBvciBjbG9zaW5nIGN1cmx5IGJyYWNlICgxMjUpIGFuZCBiYWNrdGljay5cbiAgICBpZiAoYWxsb3dUZW1wbGF0ZVN0cmluZ3MpIHtcblxuICAgICAgICAvLyB0ZW1wbGF0ZSBzdHJpbmdzIHN0YXJ0IHdpdGggYmFja3RpY2sgKDk2KSBvciBvcGVuIGN1cmx5ICgxMjUpIGJ1dCBvbmx5IGlmIHRoZSBvcGVuXG4gICAgICAgIC8vIGN1cmx5IGNsb3NlcyBhIHByZXZpb3VzbHkgb3BlbmVkIGN1cmx5IGZyb20gYSB0ZW1wbGF0ZS5cbiAgICAgICAgaWYgKGNoID09PSA5NiB8fCAoY2ggPT09IDEyNSAmJiBzdGF0ZS5jdXJseVN0YWNrW3N0YXRlLmN1cmx5U3RhY2subGVuZ3RoIC0gMV0gPT09IFwidGVtcGxhdGVcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG4gICAgICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIC8vIERvdCAoLikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0aGUgbmVlZFxuICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci5cbiAgICBpZiAoY2ggPT09IDB4MkUpIHtcbiAgICAgICAgaWYgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTtcbiAgICB9XG5cbiAgICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXguXG4gICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNoID09PSAweDJGKSB7XG4gICAgICAgIHJldHVybiBhZHZhbmNlU2xhc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFRva2VuKCkge1xuICAgIHZhciBsb2MsIHRva2VuLCByYW5nZSwgdmFsdWUsIGVudHJ5LFxuICAgICAgICBhbGxvd0pTWCA9IGV4dHJhLmVjbWFGZWF0dXJlcy5qc3g7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghYWxsb3dKU1ggfHwgIXN0YXRlLmluSlNYQ2hpbGQpIHtcbiAgICAgICAgc2tpcENvbW1lbnQoKTtcbiAgICB9XG5cbiAgICBsb2MgPSB7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRva2VuID0gYWR2YW5jZSgpO1xuICAgIGxvYy5lbmQgPSB7XG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICB9O1xuXG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICByYW5nZSA9IFt0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV1dO1xuICAgICAgICB2YWx1ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV0pO1xuICAgICAgICBlbnRyeSA9IHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuTmFtZVt0b2tlbi50eXBlXSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHJhbmdlOiByYW5nZSxcbiAgICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0b2tlbi5yZWdleCkge1xuICAgICAgICAgICAgZW50cnkucmVnZXggPSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogdG9rZW4ucmVnZXgucGF0dGVybixcbiAgICAgICAgICAgICAgICBmbGFnczogdG9rZW4ucmVnZXguZmxhZ3NcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goZW50cnkpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gbGV4KCkge1xuICAgIHZhciB0b2tlbjtcblxuICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgIGluZGV4ID0gdG9rZW4ucmFuZ2VbMV07XG4gICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7XG4gICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0O1xuXG4gICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09IFwidW5kZWZpbmVkXCIpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7XG5cbiAgICBpbmRleCA9IHRva2VuLnJhbmdlWzFdO1xuICAgIGxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyO1xuICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDtcblxuICAgIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gcGVlaygpIHtcbiAgICB2YXIgcG9zLFxuICAgICAgICBsaW5lLFxuICAgICAgICBzdGFydDtcblxuICAgIHBvcyA9IGluZGV4O1xuICAgIGxpbmUgPSBsaW5lTnVtYmVyO1xuICAgIHN0YXJ0ID0gbGluZVN0YXJ0O1xuXG4gICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09IFwidW5kZWZpbmVkXCIpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7XG5cbiAgICBpbmRleCA9IHBvcztcbiAgICBsaW5lTnVtYmVyID0gbGluZTtcbiAgICBsaW5lU3RhcnQgPSBzdGFydDtcbn1cblxuZnVuY3Rpb24gbG9va2FoZWFkMigpIHtcbiAgICB2YXIgYWR2LCBwb3MsIGxpbmUsIHN0YXJ0LCByZXN1bHQ7XG5cbiAgICAvLyBJZiB3ZSBhcmUgY29sbGVjdGluZyB0aGUgdG9rZW5zLCBkb24ndCBncmFiIHRoZSBuZXh0IG9uZSB5ZXQuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBhZHYgPSAodHlwZW9mIGV4dHJhLmFkdmFuY2UgPT09IFwiZnVuY3Rpb25cIikgPyBleHRyYS5hZHZhbmNlIDogYWR2YW5jZTtcblxuICAgIHBvcyA9IGluZGV4O1xuICAgIGxpbmUgPSBsaW5lTnVtYmVyO1xuICAgIHN0YXJ0ID0gbGluZVN0YXJ0O1xuXG4gICAgLy8gU2NhbiBmb3IgdGhlIG5leHQgaW1tZWRpYXRlIHRva2VuLlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChsb29rYWhlYWQgPT09IG51bGwpIHtcbiAgICAgICAgbG9va2FoZWFkID0gYWR2KCk7XG4gICAgfVxuICAgIGluZGV4ID0gbG9va2FoZWFkLnJhbmdlWzFdO1xuICAgIGxpbmVOdW1iZXIgPSBsb29rYWhlYWQubGluZU51bWJlcjtcbiAgICBsaW5lU3RhcnQgPSBsb29rYWhlYWQubGluZVN0YXJ0O1xuXG4gICAgLy8gR3JhYiB0aGUgdG9rZW4gcmlnaHQgYWZ0ZXIuXG4gICAgcmVzdWx0ID0gYWR2KCk7XG4gICAgaW5kZXggPSBwb3M7XG4gICAgbGluZU51bWJlciA9IGxpbmU7XG4gICAgbGluZVN0YXJ0ID0gc3RhcnQ7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBKU1hcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldFF1YWxpZmllZEpTWE5hbWUob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC50eXBlID09PSBhc3ROb2RlVHlwZXMuSlNYSWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gb2JqZWN0Lm5hbWU7XG4gICAgfVxuICAgIGlmIChvYmplY3QudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkpTWE5hbWVzcGFjZWROYW1lKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QubmFtZXNwYWNlLm5hbWUgKyBcIjpcIiArIG9iamVjdC5uYW1lLm5hbWU7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG9iamVjdC50eXBlID09PSBhc3ROb2RlVHlwZXMuSlNYTWVtYmVyRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0UXVhbGlmaWVkSlNYTmFtZShvYmplY3Qub2JqZWN0KSArIFwiLlwiICtcbiAgICAgICAgICAgIGdldFF1YWxpZmllZEpTWE5hbWUob2JqZWN0LnByb3BlcnR5KVxuICAgICAgICApO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93VW5leHBlY3RlZChvYmplY3QpO1xufVxuXG5mdW5jdGlvbiBzY2FuSlNYSWRlbnRpZmllcigpIHtcbiAgICB2YXIgY2gsIHN0YXJ0LCB2YWx1ZSA9IFwiXCI7XG5cbiAgICBzdGFydCA9IGluZGV4O1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKCFzeW50YXguaXNKU1hJZGVudGlmaWVyUGFydChjaCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5KU1hJZGVudGlmaWVyLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuSlNYRW50aXR5KCkge1xuICAgIHZhciBjaCwgc3RyID0gXCJcIiwgc3RhcnQgPSBpbmRleCwgY291bnQgPSAwLCBjb2RlO1xuICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICBhc3NlcnQoY2ggPT09IFwiJlwiLCBcIkVudGl0eSBtdXN0IHN0YXJ0IHdpdGggYW4gYW1wZXJzYW5kXCIpO1xuICAgIGluZGV4Kys7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIGNvdW50KysgPCAxMCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgaWYgKGNoID09PSBcIjtcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IGNoO1xuICAgIH1cblxuICAgIC8vIFdlbGwtZm9ybWVkIGVudGl0eSAoZW5kaW5nIHdhcyBmb3VuZCkuXG4gICAgaWYgKGNoID09PSBcIjtcIikge1xuICAgICAgICAvLyBOdW1lcmljIGVudGl0eS5cbiAgICAgICAgaWYgKHN0clswXSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIGlmIChzdHJbMV0gPT09IFwieFwiKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9ICsoXCIwXCIgKyBzdHIuc3Vic3RyKDEpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZpbmcgbGVhZGluZyB6ZXJvcyBpbiBvcmRlciB0byBhdm9pZCB0cmVhdGluZyBhcyBvY3RhbCBpbiBvbGQgYnJvd3NlcnMuXG4gICAgICAgICAgICAgICAgY29kZSA9ICtzdHIuc3Vic3RyKDEpLnJlcGxhY2UoUmVnZXguTGVhZGluZ1plcm9zLCBcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc05hTihjb2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICB9IGVsc2UgaWYgKFhIVE1MRW50aXRpZXNbc3RyXSkge1xuICAgICAgICAgICAgcmV0dXJuIFhIVE1MRW50aXRpZXNbc3RyXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyZWF0IG5vbi1lbnRpdHkgc2VxdWVuY2VzIGFzIHJlZ3VsYXIgdGV4dC5cbiAgICBpbmRleCA9IHN0YXJ0ICsgMTtcbiAgICByZXR1cm4gXCImXCI7XG59XG5cbmZ1bmN0aW9uIHNjYW5KU1hUZXh0KHN0b3BDaGFycykge1xuICAgIHZhciBjaCwgc3RyID0gXCJcIiwgc3RhcnQ7XG4gICAgc3RhcnQgPSBpbmRleDtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBpZiAoc3RvcENoYXJzLmluZGV4T2YoY2gpICE9PSAtMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSBcIiZcIikge1xuICAgICAgICAgICAgc3RyICs9IHNjYW5KU1hFbnRpdHkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwiXFxyXCIgJiYgc291cmNlW2luZGV4XSA9PT0gXCJcXG5cIikge1xuICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5KU1hUZXh0LFxuICAgICAgICB2YWx1ZTogc3RyLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhbkpTWFN0cmluZ0xpdGVyYWwoKSB7XG4gICAgdmFyIGlubmVyVG9rZW4sIHF1b3RlLCBzdGFydDtcblxuICAgIHF1b3RlID0gc291cmNlW2luZGV4XTtcbiAgICBhc3NlcnQoKHF1b3RlID09PSBcIlxcXCJcIiB8fCBxdW90ZSA9PT0gXCInXCIpLFxuICAgICAgICBcIlN0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZVwiKTtcblxuICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgKytpbmRleDtcblxuICAgIGlubmVyVG9rZW4gPSBzY2FuSlNYVGV4dChbcXVvdGVdKTtcblxuICAgIGlmIChxdW90ZSAhPT0gc291cmNlW2luZGV4XSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICArK2luZGV4O1xuXG4gICAgaW5uZXJUb2tlbi5yYW5nZSA9IFtzdGFydCwgaW5kZXhdO1xuXG4gICAgcmV0dXJuIGlubmVyVG9rZW47XG59XG5cbi8qXG4gKiBCZXR3ZWVuIEpTWCBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZ3MgKGUuZy4gPGZvbz5IRVJFPC9mb28+KSwgYW55dGhpbmcgdGhhdFxuICogaXMgbm90IGFub3RoZXIgSlNYIHRhZyBhbmQgaXMgbm90IGFuIGV4cHJlc3Npb24gd3JhcHBlZCBieSB7fSBpcyB0ZXh0LlxuICovXG5mdW5jdGlvbiBhZHZhbmNlSlNYQ2hpbGQoKSB7XG4gICAgdmFyIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgLy8geyAoMTIzKSBhbmQgPCAoNjApXG4gICAgaWYgKGNoICE9PSAxMjMgJiYgY2ggIT09IDYwKSB7XG4gICAgICAgIHJldHVybiBzY2FuSlNYVGV4dChbXCI8XCIsIFwie1wiXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYSWRlbnRpZmllcigpIHtcbiAgICB2YXIgdG9rZW4sIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5KU1hJZGVudGlmaWVyKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgIH1cblxuICAgIHRva2VuID0gbGV4KCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWE5hbWVzcGFjZWROYW1lKCkge1xuICAgIHZhciBuYW1lc3BhY2UsIG5hbWUsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgbmFtZXNwYWNlID0gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG4gICAgZXhwZWN0KFwiOlwiKTtcbiAgICBuYW1lID0gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hNZW1iZXJFeHByZXNzaW9uKCkge1xuICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgZXhwciA9IHBhcnNlSlNYSWRlbnRpZmllcigpO1xuXG4gICAgd2hpbGUgKG1hdGNoKFwiLlwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYTWVtYmVyRXhwcmVzc2lvbihleHByLCBwYXJzZUpTWElkZW50aWZpZXIoKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEVsZW1lbnROYW1lKCkge1xuICAgIGlmIChsb29rYWhlYWQyKCkudmFsdWUgPT09IFwiOlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUpTWE5hbWVzcGFjZWROYW1lKCk7XG4gICAgfVxuICAgIGlmIChsb29rYWhlYWQyKCkudmFsdWUgPT09IFwiLlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUpTWE1lbWJlckV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQXR0cmlidXRlTmFtZSgpIHtcbiAgICBpZiAobG9va2FoZWFkMigpLnZhbHVlID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hOYW1lc3BhY2VkTmFtZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZUpTWElkZW50aWZpZXIoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hBdHRyaWJ1dGVWYWx1ZSgpIHtcbiAgICB2YXIgdmFsdWUsIG1hcmtlcjtcbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCk7XG4gICAgICAgIGlmICh2YWx1ZS5leHByZXNzaW9uLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5KU1hFbXB0eUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgXCJKU1ggYXR0cmlidXRlcyBtdXN0IG9ubHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImV4cHJlc3Npb25cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWF0Y2goXCI8XCIpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VKU1hFbGVtZW50KCk7XG4gICAgfSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSlNYVGV4dCkge1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgdmFsdWUgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGxleCgpLCBzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkSlNYQXR0cmlidXRlVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYRW1wdHlFeHByZXNzaW9uKCkge1xuICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGVQcmVzZXJ2ZVdoaXRlc3BhY2UoKTtcbiAgICB3aGlsZSAoc291cmNlLmNoYXJBdChpbmRleCkgIT09IFwifVwiKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEVtcHR5RXhwcmVzc2lvbigpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCkge1xuICAgIHZhciBleHByZXNzaW9uLCBvcmlnSW5KU1hDaGlsZCwgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG9yaWdJbkpTWENoaWxkID0gc3RhdGUuaW5KU1hDaGlsZDtcbiAgICBvcmlnSW5KU1hUYWcgPSBzdGF0ZS5pbkpTWFRhZztcbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSBmYWxzZTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUpTWEVtcHR5RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gb3JpZ0luSlNYQ2hpbGQ7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG5cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihleHByZXNzaW9uKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYU3ByZWFkQXR0cmlidXRlKCkge1xuICAgIHZhciBleHByZXNzaW9uLCBvcmlnSW5KU1hDaGlsZCwgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG9yaWdJbkpTWENoaWxkID0gc3RhdGUuaW5KU1hDaGlsZDtcbiAgICBvcmlnSW5KU1hUYWcgPSBzdGF0ZS5pbkpTWFRhZztcbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSBmYWxzZTtcbiAgICBzdGF0ZS5pbkpTWFNwcmVhZEF0dHJpYnV0ZSA9IHRydWU7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuICAgIGV4cGVjdChcIi4uLlwiKTtcblxuICAgIHN0YXRlLmluSlNYU3ByZWFkQXR0cmlidXRlID0gZmFsc2U7XG5cbiAgICBleHByZXNzaW9uID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuXG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWFNwcmVhZEF0dHJpYnV0ZShleHByZXNzaW9uKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQXR0cmlidXRlKCkge1xuICAgIHZhciBuYW1lLCBtYXJrZXI7XG5cbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSgpO1xuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgbmFtZSA9IHBhcnNlSlNYQXR0cmlidXRlTmFtZSgpO1xuXG4gICAgLy8gSFRNTCBlbXB0eSBhdHRyaWJ1dGVcbiAgICBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hBdHRyaWJ1dGUobmFtZSwgcGFyc2VKU1hBdHRyaWJ1dGVWYWx1ZSgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYQXR0cmlidXRlKG5hbWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hDaGlsZCgpIHtcbiAgICB2YXIgdG9rZW4sIG1hcmtlcjtcbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIHRva2VuID0gcGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCk7XG4gICAgfSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSlNYVGV4dCkge1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGVQcmVzZXJ2ZVdoaXRlc3BhY2UoKTtcbiAgICAgICAgdG9rZW4gPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGxleCgpLCBzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbiA9IHBhcnNlSlNYRWxlbWVudCgpO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQ2xvc2luZ0VsZW1lbnQoKSB7XG4gICAgdmFyIG5hbWUsIG9yaWdJbkpTWENoaWxkLCBvcmlnSW5KU1hUYWcsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIG9yaWdJbkpTWENoaWxkID0gc3RhdGUuaW5KU1hDaGlsZDtcbiAgICBvcmlnSW5KU1hUYWcgPSBzdGF0ZS5pbkpTWFRhZztcbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSB0cnVlO1xuICAgIGV4cGVjdChcIjxcIik7XG4gICAgZXhwZWN0KFwiL1wiKTtcbiAgICBuYW1lID0gcGFyc2VKU1hFbGVtZW50TmFtZSgpO1xuICAgIC8vIEJlY2F1c2UgYWR2YW5jZSgpIChjYWxsZWQgYnkgbGV4KCkgY2FsbGVkIGJ5IGV4cGVjdCgpKSBleHBlY3RzIHRoZXJlXG4gICAgLy8gdG8gYmUgYSB2YWxpZCB0b2tlbiBhZnRlciA+LCBpdCBuZWVkcyB0byBrbm93IHdoZXRoZXIgdG8gbG9vayBmb3IgYVxuICAgIC8vIHN0YW5kYXJkIEpTIHRva2VuIG9yIGFuIEpTWCB0ZXh0IG5vZGVcbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gb3JpZ0luSlNYQ2hpbGQ7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG4gICAgZXhwZWN0KFwiPlwiKTtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hDbG9zaW5nRWxlbWVudChuYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYT3BlbmluZ0VsZW1lbnQoKSB7XG4gICAgdmFyIG5hbWUsIGF0dHJpYnV0ZXMgPSBbXSwgc2VsZkNsb3NpbmcgPSBmYWxzZSwgb3JpZ0luSlNYQ2hpbGQsXG4gICAgICAgIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gdHJ1ZTtcblxuICAgIGV4cGVjdChcIjxcIik7XG5cbiAgICBuYW1lID0gcGFyc2VKU1hFbGVtZW50TmFtZSgpO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmXG4gICAgICAgICAgICBsb29rYWhlYWQudmFsdWUgIT09IFwiL1wiICYmXG4gICAgICAgICAgICBsb29rYWhlYWQudmFsdWUgIT09IFwiPlwiKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChwYXJzZUpTWEF0dHJpYnV0ZSgpKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbkpTWFRhZyA9IG9yaWdJbkpTWFRhZztcblxuICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09IFwiL1wiKSB7XG4gICAgICAgIGV4cGVjdChcIi9cIik7XG4gICAgICAgIC8vIEJlY2F1c2UgYWR2YW5jZSgpIChjYWxsZWQgYnkgbGV4KCkgY2FsbGVkIGJ5IGV4cGVjdCgpKSBleHBlY3RzXG4gICAgICAgIC8vIHRoZXJlIHRvIGJlIGEgdmFsaWQgdG9rZW4gYWZ0ZXIgPiwgaXQgbmVlZHMgdG8ga25vdyB3aGV0aGVyIHRvXG4gICAgICAgIC8vIGxvb2sgZm9yIGEgc3RhbmRhcmQgSlMgdG9rZW4gb3IgYW4gSlNYIHRleHQgbm9kZVxuICAgICAgICBzdGF0ZS5pbkpTWENoaWxkID0gb3JpZ0luSlNYQ2hpbGQ7XG4gICAgICAgIGV4cGVjdChcIj5cIik7XG4gICAgICAgIHNlbGZDbG9zaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5pbkpTWENoaWxkID0gdHJ1ZTtcbiAgICAgICAgZXhwZWN0KFwiPlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYT3BlbmluZ0VsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hFbGVtZW50KCkge1xuICAgIHZhciBvcGVuaW5nRWxlbWVudCwgY2xvc2luZ0VsZW1lbnQgPSBudWxsLCBjaGlsZHJlbiA9IFtdLCBvcmlnSW5KU1hDaGlsZCwgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG9yaWdJbkpTWENoaWxkID0gc3RhdGUuaW5KU1hDaGlsZDtcbiAgICBvcmlnSW5KU1hUYWcgPSBzdGF0ZS5pbkpTWFRhZztcbiAgICBvcGVuaW5nRWxlbWVudCA9IHBhcnNlSlNYT3BlbmluZ0VsZW1lbnQoKTtcblxuICAgIGlmICghb3BlbmluZ0VsZW1lbnQuc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGF0ZS5pbkpTWENoaWxkID0gZmFsc2U7IC8vIENhbGwgbG9va2FoZWFkMigpIHdpdGggaW5KU1hDaGlsZCA9IGZhbHNlIGJlY2F1c2UgPC8gc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGluIHRoZSBjaGlsZFxuICAgICAgICAgICAgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gXCI8XCIgJiYgbG9va2FoZWFkMigpLnZhbHVlID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHBhcnNlSlNYQ2hpbGQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgICAgICBzdGF0ZS5pbkpTWFRhZyA9IG9yaWdJbkpTWFRhZztcbiAgICAgICAgY2xvc2luZ0VsZW1lbnQgPSBwYXJzZUpTWENsb3NpbmdFbGVtZW50KCk7XG4gICAgICAgIGlmIChnZXRRdWFsaWZpZWRKU1hOYW1lKGNsb3NpbmdFbGVtZW50Lm5hbWUpICE9PSBnZXRRdWFsaWZpZWRKU1hOYW1lKG9wZW5pbmdFbGVtZW50Lm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5FeHBlY3RlZEpTWENsb3NpbmdUYWcsIGdldFF1YWxpZmllZEpTWE5hbWUob3BlbmluZ0VsZW1lbnQubmFtZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBXaGVuIChlcnJvbmVvdXNseSkgd3JpdGluZyB0d28gYWRqYWNlbnQgdGFncyBsaWtlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIHggPSA8ZGl2Pm9uZTwvZGl2PjxkaXY+dHdvPC9kaXY+O1xuICAgICAqXG4gICAgICogdGhlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBpcyBhIGJpdCBpbmNvbXByZWhlbnNpYmxlLiBTaW5jZSBpdFwic1xuICAgICAqIHJhcmVseSAobmV2ZXI/KSB1c2VmdWwgdG8gd3JpdGUgYSBsZXNzLXRoYW4gc2lnbiBhZnRlciBhbiBKU1hcbiAgICAgKiBlbGVtZW50LCB3ZSBkaXNhbGxvdyBpdCBoZXJlIGluIHRoZSBwYXJzZXIgaW4gb3JkZXIgdG8gcHJvdmlkZSBhXG4gICAgICogYmV0dGVyIGVycm9yIG1lc3NhZ2UuIChJbiB0aGUgcmFyZSBjYXNlIHRoYXQgdGhlIGxlc3MtdGhhbiBvcGVyYXRvclxuICAgICAqIHdhcyBpbnRlbmRlZCwgdGhlIGxlZnQgdGFnIGNhbiBiZSB3cmFwcGVkIGluIHBhcmVudGhlc2VzLilcbiAgICAgKi9cbiAgICBpZiAoIW9yaWdJbkpTWENoaWxkICYmIG1hdGNoKFwiPFwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZCwgTWVzc2FnZXMuQWRqYWNlbnRKU1hFbGVtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYRWxlbWVudChvcGVuaW5nRWxlbWVudCwgY2xvc2luZ0VsZW1lbnQsIGNoaWxkcmVuKSk7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2NhdGlvbiBtYXJrZXJzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEFwcGxpZXMgbG9jYXRpb24gaW5mb3JtYXRpb24gdG8gdGhlIGdpdmVuIG5vZGUgYnkgdXNpbmcgdGhlIGdpdmVuIG1hcmtlci5cbiAqIFRoZSBtYXJrZXIgaW5kaWNhdGVzIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgbm9kZSBpcyBzYWlkIHRvIGhhdmUgdG8gYmVndW5cbiAqIGluIHRoZSBzb3VyY2UgY29kZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXJrZXIgVGhlIG1hcmtlciB0byB1c2UgZm9yIHRoZSBub2RlLlxuICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBhcHBseSBsb2NhdGlvbiBpbmZvcm1hdGlvbiB0by5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgbm9kZSB0aGF0IHdhcyBwYXNzZWQgaW4uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYXJrZXJBcHBseShtYXJrZXIsIG5vZGUpIHtcblxuICAgIC8vIGFkZCByYW5nZSBpbmZvcm1hdGlvbiB0byB0aGUgbm9kZSBpZiBwcmVzZW50XG4gICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgIG5vZGUucmFuZ2UgPSBbbWFya2VyLm9mZnNldCwgaW5kZXhdO1xuICAgIH1cblxuICAgIC8vIGFkZCBsb2NhdGlvbiBpbmZvcm1hdGlvbiB0aGUgbm9kZSBpZiBwcmVzZW50XG4gICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICBub2RlLmxvYyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgbGluZTogbWFya2VyLmxpbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBtYXJrZXIuY29sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIEF0dGFjaCBleHRyYS5zb3VyY2UgaW5mb3JtYXRpb24gdG8gdGhlIGxvY2F0aW9uLCBpZiBwcmVzZW50XG4gICAgICAgIGlmIChleHRyYS5zb3VyY2UpIHtcbiAgICAgICAgICAgIG5vZGUubG9jLnNvdXJjZSA9IGV4dHJhLnNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0dGFjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyBjb21tZW50cyBpZiByZXF1ZXN0ZWRcbiAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkge1xuICAgICAgICBjb21tZW50QXR0YWNobWVudC5wcm9jZXNzQ29tbWVudChub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbG9jYXRpb24gbWFya2VyIGluIHRoZSBzb3VyY2UgY29kZS4gTG9jYXRpb24gbWFya2VycyBhcmUgdXNlZCBmb3JcbiAqIHRyYWNraW5nIHdoZXJlIHRva2VucyBhbmQgbm9kZXMgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IEEgbWFya2VyIG9iamVjdCBvciB1bmRlZmluZWQgaWYgdGhlIHBhcnNlciBkb2Vzbid0IGhhdmVcbiAqICAgICAgYW55IGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFya2VyQ3JlYXRlKCkge1xuXG4gICAgaWYgKCFleHRyYS5sb2MgJiYgIWV4dHJhLnJhbmdlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc2tpcENvbW1lbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogaW5kZXgsXG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbDogaW5kZXggLSBsaW5lU3RhcnRcbiAgICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsb2NhdGlvbiBtYXJrZXIgaW4gdGhlIHNvdXJjZSBjb2RlLiBMb2NhdGlvbiBtYXJrZXJzIGFyZSB1c2VkIGZvclxuICogdHJhY2tpbmcgd2hlcmUgdG9rZW5zIGFuZCBub2RlcyBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLiBUaGlzIG1ldGhvZFxuICogZG9lc24ndCBza2lwIGNvbW1lbnRzIG9yIGV4dHJhIHdoaXRlc3BhY2Ugd2hpY2ggaXMgaW1wb3J0YW50IGZvciBKU1guXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBIG1hcmtlciBvYmplY3Qgb3IgdW5kZWZpbmVkIGlmIHRoZSBwYXJzZXIgZG9lc24ndCBoYXZlXG4gKiAgICAgIGFueSBsb2NhdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1hcmtlckNyZWF0ZVByZXNlcnZlV2hpdGVzcGFjZSgpIHtcblxuICAgIGlmICghZXh0cmEubG9jICYmICFleHRyYS5yYW5nZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogaW5kZXgsXG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbDogaW5kZXggLSBsaW5lU3RhcnRcbiAgICB9O1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTeW50YXggVHJlZSBEZWxlZ2F0ZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBsaW5lIHRlcm1pbmF0b3IgYmVmb3JlIHRoZSBuZXh0IHRva2VuLlxuXG5mdW5jdGlvbiBwZWVrTGluZVRlcm1pbmF0b3IoKSB7XG4gICAgdmFyIHBvcywgbGluZSwgc3RhcnQsIGZvdW5kO1xuXG4gICAgcG9zID0gaW5kZXg7XG4gICAgbGluZSA9IGxpbmVOdW1iZXI7XG4gICAgc3RhcnQgPSBsaW5lU3RhcnQ7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBmb3VuZCA9IGxpbmVOdW1iZXIgIT09IGxpbmU7XG4gICAgaW5kZXggPSBwb3M7XG4gICAgbGluZU51bWJlciA9IGxpbmU7XG4gICAgbGluZVN0YXJ0ID0gc3RhcnQ7XG5cbiAgICByZXR1cm4gZm91bmQ7XG59XG5cbi8vIFRocm93IGFuIGV4Y2VwdGlvblxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKHRva2VuLCBtZXNzYWdlRm9ybWF0KSB7XG5cbiAgICB2YXIgZXJyb3IsXG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLFxuICAgICAgICBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgICAvJShcXGQpL2csXG4gICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGluZGV4IDwgYXJncy5sZW5ndGgsIFwiTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICBpZiAodHlwZW9mIHRva2VuLmxpbmVOdW1iZXIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJMaW5lIFwiICsgdG9rZW4ubGluZU51bWJlciArIFwiOiBcIiArIG1zZyk7XG4gICAgICAgIGVycm9yLmluZGV4ID0gdG9rZW4ucmFuZ2VbMF07XG4gICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyO1xuICAgICAgICBlcnJvci5jb2x1bW4gPSB0b2tlbi5yYW5nZVswXSAtIGxpbmVTdGFydCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJMaW5lIFwiICsgbGluZU51bWJlciArIFwiOiBcIiArIG1zZyk7XG4gICAgICAgIGVycm9yLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyO1xuICAgICAgICBlcnJvci5jb2x1bW4gPSBpbmRleCAtIGxpbmVTdGFydCArIDE7XG4gICAgfVxuXG4gICAgZXJyb3IuZGVzY3JpcHRpb24gPSBtc2c7XG4gICAgdGhyb3cgZXJyb3I7XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3JUb2xlcmFudCgpIHtcbiAgICB0cnkge1xuICAgICAgICB0aHJvd0Vycm9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7XG4gICAgICAgICAgICBleHRyYS5lcnJvcnMucHVzaChlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLlxuXG5mdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZEVPUyk7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHRva2VuLnR5cGUgPT09IFRva2VuLkpTWFRleHQpIHtcbiAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFN0cmluZyk7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZElkZW50aWZpZXIpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNGdXR1cmVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkUmVzZXJ2ZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVGVtcGxhdGUsIHRva2VuLnZhbHVlLnJhdyk7XG4gICAgfVxuXG4gICAgLy8gQm9vbGVhbkxpdGVyYWwsIE51bGxMaXRlcmFsLCBvciBQdW5jdHVhdG9yLlxuICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xufVxuXG4vLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLlxuLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cbmZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkge1xuICAgIHZhciB0b2tlbiA9IGxleCgpO1xuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQga2V5d29yZC5cbi8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuXG5mdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdvcmQpIHtcbiAgICB2YXIgdG9rZW4gPSBsZXgoKTtcbiAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG5cbmZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gdmFsdWU7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkXG5cbmZ1bmN0aW9uIG1hdGNoS2V5d29yZChrZXl3b3JkKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDtcbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5d29yZFxuLy8gKHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgc29tZXRpbWVzIGEga2V5d29yZCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQpXG5cbmZ1bmN0aW9uIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoa2V5d29yZCkge1xuICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3JcblxuZnVuY3Rpb24gbWF0Y2hBc3NpZ24oKSB7XG4gICAgdmFyIG9wO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb3AgPSBsb29rYWhlYWQudmFsdWU7XG4gICAgcmV0dXJuIG9wID09PSBcIj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIqPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi89XCIgfHxcbiAgICAgICAgb3AgPT09IFwiJT1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIrPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi09XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPDw9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj49XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj4+PVwiIHx8XG4gICAgICAgIG9wID09PSBcIiY9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiXj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCJ8PVwiO1xufVxuXG5mdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkge1xuICAgIHZhciBsaW5lO1xuXG4gICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLlxuICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IgfHwgbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGluZSA9IGxpbmVOdW1iZXI7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBpZiAobGluZU51bWJlciAhPT0gbGluZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YgJiYgIW1hdGNoKFwifVwiKSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvblxuXG5mdW5jdGlvbiBpc0xlZnRIYW5kU2lkZShleHByKSB7XG4gICAgcmV0dXJuIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgfHwgZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbjtcbn1cblxuLy8gMTEuMS40IEFycmF5IEluaXRpYWxpc2VyXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRtcDtcblxuICAgIGV4cGVjdChcIltcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwiXVwiKSkge1xuICAgICAgICBpZiAobWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICBsZXgoKTsgLy8gb25seSBnZXQgaGVyZSB3aGVuIHlvdSBoYXZlIFthLCxdIG9yIHNpbWlsYXJcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0bXAgPSBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godG1wKTtcbiAgICAgICAgICAgIGlmICghKG1hdGNoKFwiXVwiKSkpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCIsXCIpOyAvLyBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJdXCIpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSk7XG59XG5cbi8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXJcblxuZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFtSW5mbywgb3B0aW9ucykge1xuICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHN0cmljdCxcbiAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQsXG4gICAgICAgIGdlbmVyYXRvciA9IG9wdGlvbnMgPyBvcHRpb25zLmdlbmVyYXRvciA6IGZhbHNlLFxuICAgICAgICBib2R5O1xuXG4gICAgc3RhdGUueWllbGRBbGxvd2VkID0gZ2VuZXJhdG9yO1xuXG4gICAgLypcbiAgICAgKiBFc3ByaW1hIHVzZXMgcGFyc2VDb25jaXNlQm9keSgpIGhlcmUsIHdoaWNoIGlzIGluY29ycmVjdC4gT2JqZWN0IGxpdGVyYWxcbiAgICAgKiBtZXRob2RzIG11c3QgaGF2ZSBicmFjZXMuXG4gICAgICovXG4gICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXG4gICAgaWYgKHN0cmljdCAmJiBwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzdHJpY3QgJiYgcGFyYW1JbmZvLnN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uc3RyaWN0ZWQsIHBhcmFtSW5mby5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShvcHRpb25zLm1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJhbUluZm8ucGFyYW1zLFxuICAgICAgICBib2R5LFxuICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgIGJvZHkudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50XG4gICAgKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBtZXRob2Q7XG5cbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTtcblxuICAgIGlmIChwYXJhbXMuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHBhcmFtcy5zdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbXMsIHtcbiAgICAgICAgZ2VuZXJhdG9yOiBvcHRpb25zID8gb3B0aW9ucy5nZW5lcmF0b3IgOiBmYWxzZSxcbiAgICAgICAgbWFya2VyOiBtYXJrZXJcbiAgICB9KTtcblxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1ldGhvZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRva2VuID0gbGV4KCksXG4gICAgICAgIGFsbG93T2JqZWN0TGl0ZXJhbENvbXB1dGVkID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxDb21wdXRlZFByb3BlcnRpZXMsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIHJlc3VsdDtcblxuICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgZnJvbSBwYXJzZU9iamVjdFByb3BlcnR5KCksIHdoZXJlXG4gICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuXG5cbiAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKHRva2VuLCBzb3VyY2UpKTtcblxuICAgICAgICBjYXNlIFRva2VuLklkZW50aWZpZXI6XG4gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVsbExpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDpcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcblxuICAgICAgICBjYXNlIFRva2VuLlB1bmN0dWF0b3I6XG4gICAgICAgICAgICBpZiAoKCFzdGF0ZS5pbk9iamVjdExpdGVyYWwgfHwgYWxsb3dPYmplY3RMaXRlcmFsQ29tcHV0ZWQpICYmXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlID09PSBcIltcIikge1xuICAgICAgICAgICAgICAgIC8vIEZvciBjb21wdXRlZCBwcm9wZXJ0aWVzIHdlIHNob3VsZCBza2lwIHRoZSBbIGFuZCBdLCBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYXB0dXJlIGluIG1hcmtlciBvbmx5IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gaXRzZWxmLlxuICAgICAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgIH1cblxuICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpIHtcbiAgICBzd2l0Y2ggKGxvb2thaGVhZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW4uSWRlbnRpZmllcjpcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLkJvb2xlYW5MaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bGxMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLktleXdvcmQ6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSBUb2tlbi5QdW5jdHVhdG9yOlxuICAgICAgICAgICAgcmV0dXJuIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJbXCI7XG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHRvIHRyeSB0byBwYXJzZSBhIE1ldGhvZERlZmluaXRpb24gYXMgZGVmaW5lZCBpbiAxNC4zLiBCdXQgaW4gdGhlIGNhc2Ugb2Ygb2JqZWN0IGxpdGVyYWxzLFxuLy8gaXQgbWlnaHQgYmUgY2FsbGVkIGF0IGEgcG9zaXRpb24gd2hlcmUgdGhlcmUgaXMgaW4gZmFjdCBhIHNob3J0IGhhbmQgaWRlbnRpZmllciBwYXR0ZXJuIG9yIGEgZGF0YSBwcm9wZXJ0eS5cbi8vIFRoaXMgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBhZnRlciB3ZSBjb25zdW1lZCB1cCB0byB0aGUgbGVmdCBwYXJlbnRoZXNlcy5cbi8vIEluIG9yZGVyIHRvIGF2b2lkIGJhY2sgdHJhY2tpbmcsIGl0IHJldHVybnMgYG51bGxgIGlmIHRoZSBwb3NpdGlvbiBpcyBub3QgYSBNZXRob2REZWZpbml0aW9uIGFuZCB0aGUgY2FsbGVyXG4vLyBpcyByZXNwb25zaWJsZSB0byB2aXNpdCBvdGhlciBvcHRpb25zLlxuZnVuY3Rpb24gdHJ5UGFyc2VNZXRob2REZWZpbml0aW9uKHRva2VuLCBrZXksIGNvbXB1dGVkLCBtYXJrZXIpIHtcbiAgICB2YXIgdmFsdWUsIG9wdGlvbnMsIG1ldGhvZE1hcmtlcjtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciBgZ2V0YCBhbmQgYHNldGA7XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG5cbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgbWV0aG9kTWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBleHBlY3QoXCIoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBudWxsLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1ldGhvZE1hcmtlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFwiZ2V0XCIsIGtleSwgdmFsdWUsIGZhbHNlLCBmYWxzZSwgY29tcHV0ZWQpKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaChcIilcIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnNlUGFyYW0ob3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihvcHRpb25zLCB7IG1hcmtlcjogbWV0aG9kTWFya2VyIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXCJzZXRcIiwga2V5LCB2YWx1ZSwgZmFsc2UsIGZhbHNlLCBjb21wdXRlZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiKFwiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcImluaXRcIiwga2V5LCB2YWx1ZSwgdHJ1ZSwgZmFsc2UsIGNvbXB1dGVkKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGEgTWV0aG9kRGVmaW5pdGlvbi5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgR2VuZXJhdG9yIFByb3BlcnRpZXNcbiAqIEBwYXJhbSB7QVNUTm9kZX0ga2V5IFRoZSBwcm9wZXJ0eSBrZXkgKHVzdWFsbHkgYW4gaWRlbnRpZmllcikuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgZ2VuZXJhdG9yIHByb3BlcnR5IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoa2V5LCBtYXJrZXIpIHtcblxuICAgIHZhciBjb21wdXRlZCA9IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcblxuICAgIGlmICghbWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IHRydWUgfSksXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBjb21wdXRlZFxuICAgICAgICApXG4gICAgKTtcbn1cblxuLy8gVE9ETyhuemFrYXMpOiBVcGRhdGUgdG8gbWF0Y2ggRXNwcmltYVxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eSgpIHtcbiAgICB2YXIgdG9rZW4sIGtleSwgaWQsIGNvbXB1dGVkLCBtZXRob2RNYXJrZXIsIG9wdGlvbnM7XG4gICAgdmFyIGFsbG93Q29tcHV0ZWQgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllcyxcbiAgICAgICAgYWxsb3dNZXRob2QgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHMsXG4gICAgICAgIGFsbG93U2hvcnRoYW5kID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxTaG9ydGhhbmRQcm9wZXJ0aWVzLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycyxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmcsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgY29tcHV0ZWQgPSAodG9rZW4udmFsdWUgPT09IFwiW1wiICYmIHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHwgKGFsbG93Q29tcHV0ZWQgJiYgY29tcHV0ZWQpKSB7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogQ2hlY2sgZm9yIGdldHRlcnMgYW5kIHNldHRlcnMuIEJlIGNhcmVmdWwhIFwiZ2V0XCIgYW5kIFwic2V0XCIgYXJlIGxlZ2FsXG4gICAgICAgICAqIG1ldGhvZCBuYW1lcy4gSXQncyBvbmx5IGEgZ2V0dGVyIG9yIHNldHRlciBpZiBmb2xsb3dlZCBieSBhIHNwYWNlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChcIilcIik7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIFwiZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VQYXJhbShvcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJzZXRcIixcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5RnVuY3Rpb24ob3B0aW9ucywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9ybWFsIHByb3BlcnR5IChrZXk6dmFsdWUpXG4gICAgICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWV0aG9kIHNob3J0aGFuZCAoa2V5KCl7Li4ufSlcbiAgICAgICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmluZyBkZWZhdWx0cyAoc2hvcnRoYW5kIHN5bnRheClcbiAgICAgICAgaWYgKGFsbG93RGVzdHJ1Y3R1cmluZyAmJiBtYXRjaChcIj1cIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgdmFyIHByb3AgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKFwiPVwiLCBpZCwgdmFsdWUpKTtcbiAgICAgICAgICAgIHByb3AudHlwZSA9IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybjtcbiAgICAgICAgICAgIHZhciBmdWxsUHJvcGVydHkgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIHNob3J0aGFuZFxuICAgICAgICAgICAgICAgIGNvbXB1dGVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZnVsbFByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIE9ubHkgb3RoZXIgcG9zc2liaWxpdHkgaXMgdGhhdCB0aGlzIGlzIGEgc2hvcnRoYW5kIHByb3BlcnR5LiBDb21wdXRlZFxuICAgICAgICAgKiBwcm9wZXJ0aWVzIGNhbm5vdCB1c2Ugc2hvcnRoYW5kIG5vdGF0aW9uLCBzbyB0aGF0J3MgYSBzeW50YXggZXJyb3IuXG4gICAgICAgICAqIElmIHNob3J0aGFuZCBwcm9wZXJ0aWVzIGFyZW4ndCBhbGxvdywgdGhlbiB0aGlzIGlzIGFuIGF1dG9tYXRpY1xuICAgICAgICAgKiBzeW50YXggZXJyb3IuIERlc3RydWN0dXJpbmcgaXMgYW5vdGhlciBjYXNlIHdpdGggYSBzaW1pbGFyIHNob3J0aGFuZCBzeW50YXguXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoY29tcHV0ZWQgfHwgKCFhbGxvd1Nob3J0aGFuZCAmJiAhYWxsb3dEZXN0cnVjdHVyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzaG9ydGhhbmQgcHJvcGVydHlcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG9ubHkgcG9zc2liaWxpdHkgaW4gdGhpcyBicmFuY2ggaXMgYSBzaG9ydGhhbmQgZ2VuZXJhdG9yXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIGlmICghYWxsb3dHZW5lcmF0b3JzIHx8ICFtYXRjaChcIipcIikgfHwgIWFsbG93TWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoaWQsIG1hcmtlcik7XG5cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIElmIHdlJ3ZlIG1hZGUgaXQgaGVyZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIHJlcHJlc2VudGVkXG4gICAgICogYnkgYSBzdHJpbmcgKGkuZSwgeyBcImZvb1wiOiAyfSkuIFRoZSBvbmx5IG9wdGlvbnMgaGVyZSBhcmUgbm9ybWFsXG4gICAgICogcHJvcGVydHkgd2l0aCBhIGNvbG9uIG9yIGEgbWV0aG9kLlxuICAgICAqL1xuICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblxuICAgIC8vIGNoZWNrIGZvciBwcm9wZXJ0eSB2YWx1ZVxuICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFwiaW5pdFwiLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgbWV0aG9kXG4gICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG5vIG90aGVyIG9wdGlvbnMsIHRoaXMgaXMgYmFkXG4gICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGROYW1lKGtleSkge1xuICAgIHZhciB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAoa2V5LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBrZXkubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRvU3RyaW5nKGtleS52YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0R1cGxpY2F0ZXMgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbER1cGxpY2F0ZVByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgcHJvcGVydHksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHByb3BlcnR5Rm4sXG4gICAgICAgIGtpbmQsXG4gICAgICAgIHN0b3JlZEtpbmQsXG4gICAgICAgIHByZXZpb3VzSW5PYmplY3RMaXRlcmFsID0gc3RhdGUuaW5PYmplY3RMaXRlcmFsLFxuICAgICAgICBraW5kTWFwID0gbmV3IFN0cmluZ01hcCgpO1xuXG4gICAgc3RhdGUuaW5PYmplY3RMaXRlcmFsID0gdHJ1ZTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwifVwiKSkge1xuXG4gICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpO1xuXG4gICAgICAgIGlmICghcHJvcGVydHkuY29tcHV0ZWQpIHtcblxuICAgICAgICAgICAgbmFtZSA9IGdldEZpZWxkTmFtZShwcm9wZXJ0eS5rZXkpO1xuICAgICAgICAgICAgcHJvcGVydHlGbiA9IChwcm9wZXJ0eS5raW5kID09PSBcImdldFwiKSA/IFByb3BlcnR5S2luZC5HZXQgOiBQcm9wZXJ0eUtpbmQuU2V0O1xuICAgICAgICAgICAga2luZCA9IChwcm9wZXJ0eS5raW5kID09PSBcImluaXRcIikgPyBQcm9wZXJ0eUtpbmQuRGF0YSA6IHByb3BlcnR5Rm47XG5cbiAgICAgICAgICAgIGlmIChraW5kTWFwLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIHN0b3JlZEtpbmQgPSBraW5kTWFwLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RvcmVkS2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhICYmIG5hbWUgPT09IFwiX19wcm90b19fXCIgJiYgYWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEdXBsaWNhdGUgJ19fcHJvdG9fXycgbGl0ZXJhbCBwcm9wZXJ0aWVzIGFyZSBmb3JiaWRkZW4gaW4gRVMgNlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5EdXBsaWNhdGVQcm90b3R5cGVQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhICYmICFhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1cGxpY2F0ZSBsaXRlcmFsIHByb3BlcnRpZXMgYXJlIG9ubHkgZm9yYmlkZGVuIGluIEVTIDUgc3RyaWN0IG1vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RHVwbGljYXRlUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgIT09IFByb3BlcnR5S2luZC5EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcmVkS2luZCAmIGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JHZXRTZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtpbmRNYXAuc2V0KG5hbWUsIHN0b3JlZEtpbmQgfCBraW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2luZE1hcC5zZXQobmFtZSwga2luZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuXG4gICAgICAgIGlmICghbWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgICAgICBleHBlY3QoXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHN0YXRlLmluT2JqZWN0TGl0ZXJhbCA9IHByZXZpb3VzSW5PYmplY3RMaXRlcmFsO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSk7XG59XG5cbi8qKlxuICogUGFyc2UgYSB0ZW1wbGF0ZSBzdHJpbmcgZWxlbWVudCBhbmQgcmV0dXJuIGl0cyBBU1ROb2RlIHJlcHJlc2VudGF0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uIFBhcnNpbmcgJiBzY2FubmluZyBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uLmhlYWQgVHJ1ZSBpZiB0aGlzIGVsZW1lbnQgaXMgdGhlIGZpcnN0IGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIHRlbXBsYXRlIGVsZW1lbnQgbm9kZSB3aXRoIG1hcmtlciBpbmZvIGFwcGxpZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVFbGVtZW50KG9wdGlvbikge1xuICAgIHZhciBtYXJrZXIsIHRva2VuO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5UZW1wbGF0ZSB8fCAob3B0aW9uLmhlYWQgJiYgIWxvb2thaGVhZC5oZWFkKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICB0b2tlbiA9IGxleCgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRlbXBsYXRlRWxlbWVudChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByYXc6IHRva2VuLnZhbHVlLnJhdyxcbiAgICAgICAgICAgICAgICBjb29rZWQ6IHRva2VuLnZhbHVlLmNvb2tlZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRva2VuLnRhaWxcbiAgICAgICAgKVxuICAgICk7XG59XG5cbi8qKlxuICogUGFyc2UgYSB0ZW1wbGF0ZSBzdHJpbmcgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyBBU1ROb2RlIHJlcHJlc2VudGF0aW9uXG4gKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIHRlbXBsYXRlIGxpdGVyYWwgbm9kZSB3aXRoIG1hcmtlciBpbmZvIGFwcGxpZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkge1xuICAgIHZhciBxdWFzaSwgcXVhc2lzLCBleHByZXNzaW9ucywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVFbGVtZW50KHsgaGVhZDogdHJ1ZSB9KTtcbiAgICBxdWFzaXMgPSBbIHF1YXNpIF07XG4gICAgZXhwcmVzc2lvbnMgPSBbXTtcblxuICAgIHdoaWxlICghcXVhc2kudGFpbCkge1xuICAgICAgICBleHByZXNzaW9ucy5wdXNoKHBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlRWxlbWVudCh7IGhlYWQ6IGZhbHNlIH0pO1xuICAgICAgICBxdWFzaXMucHVzaChxdWFzaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGVtcGxhdGVMaXRlcmFsKHF1YXNpcywgZXhwcmVzc2lvbnMpKTtcbn1cblxuLy8gMTEuMS42IFRoZSBHcm91cGluZyBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwcjtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICArK3N0YXRlLnBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cblxuLy8gMTEuMSBQcmltYXJ5IEV4cHJlc3Npb25zXG5cbmZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHR5cGUsIHRva2VuLCBleHByLFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFsbG93SlNYID0gZXh0cmEuZWNtYUZlYXR1cmVzLmpzeCxcbiAgICAgICAgYWxsb3dDbGFzc2VzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmNsYXNzZXMsXG4gICAgICAgIGFsbG93U3VwZXIgPSBhbGxvd0NsYXNzZXMgfHwgZXh0cmEuZWNtYUZlYXR1cmVzLnN1cGVySW5GdW5jdGlvbnM7XG5cbiAgICBpZiAobWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dKU1ggJiYgbWF0Y2goXCI8XCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUpTWEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICB0eXBlID0gbG9va2FoZWFkLnR5cGU7XG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAodHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcihsZXgoKS52YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgbG9va2FoZWFkLm9jdGFsKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgICAgICB9XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZShsZXgoKSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZChcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbGxvd1N1cGVyICYmIG1hdGNoS2V5d29yZChcInN1cGVyXCIpICYmIHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3VwZXIoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwidGhpc1wiKSkge1xuICAgICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRoaXNFeHByZXNzaW9uKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsbG93Q2xhc3NlcyAmJiBtYXRjaEtleXdvcmQoXCJjbGFzc1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwpIHtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09IFwidHJ1ZVwiKTtcbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKHRva2VuLCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgdG9rZW4udmFsdWUgPSBudWxsO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UodG9rZW4sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIi9cIikgfHwgbWF0Y2goXCIvPVwiKSkge1xuICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGNvbGxlY3RSZWdleCgpLCBzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKHNjYW5SZWdFeHAoKSwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBwZWVrKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm4gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG59XG5cbi8vIDExLjIgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnNcblxuZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgYXJnO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcbiAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGFyZyA9IHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaChcIilcIikpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KFwiLFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICByZXR1cm4gYXJncztcbn1cblxuZnVuY3Rpb24gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCkge1xuICAgIGlmIChtYXRjaChcIi4uLlwiKSkge1xuICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTcHJlYWRFbGVtZW50KHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSkpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKSB7XG4gICAgdmFyIHRva2VuLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkge1xuICAgIGV4cGVjdChcIi5cIik7XG5cbiAgICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tcHV0ZWRNZW1iZXIoKSB7XG4gICAgdmFyIGV4cHI7XG5cbiAgICBleHBlY3QoXCJbXCIpO1xuXG4gICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiXVwiKTtcblxuICAgIHJldHVybiBleHByO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5ld0V4cHJlc3Npb24oKSB7XG4gICAgdmFyIGNhbGxlZSwgYXJncyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwibmV3XCIpO1xuICAgIGNhbGxlZSA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpO1xuICAgIGFyZ3MgPSBtYXRjaChcIihcIikgPyBwYXJzZUFyZ3VtZW50cygpIDogW107XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVOZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7XG4gICAgdmFyIGV4cHIsIGFyZ3MsXG4gICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG4gICAgZXhwciA9IG1hdGNoS2V5d29yZChcIm5ld1wiKSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpO1xuICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAvLyBvbmx5IHN0YXJ0IHBhcnNpbmcgdGVtcGxhdGUgbGl0ZXJhbCBpZiB0aGUgbG9va2FoZWFkIGlzIGEgaGVhZCAoYmVnaW5uaW5nIHdpdGggYClcbiAgICB3aGlsZSAobWF0Y2goXCIuXCIpIHx8IG1hdGNoKFwiW1wiKSB8fCBtYXRjaChcIihcIikgfHwgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSAmJiBsb29rYWhlYWQuaGVhZCkpIHtcbiAgICAgICAgaWYgKG1hdGNoKFwiKFwiKSkge1xuICAgICAgICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiW1wiLCBleHByLCBwYXJzZUNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaChcIi5cIikpIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oXCIuXCIsIGV4cHIsIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIGV4cHIsXG4gICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwciA9IG1hdGNoS2V5d29yZChcIm5ld1wiKSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpO1xuICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAvLyBvbmx5IHN0YXJ0IHBhcnNpbmcgdGVtcGxhdGUgbGl0ZXJhbCBpZiB0aGUgbG9va2FoZWFkIGlzIGEgaGVhZCAoYmVnaW5uaW5nIHdpdGggYClcbiAgICB3aGlsZSAobWF0Y2goXCIuXCIpIHx8IG1hdGNoKFwiW1wiKSB8fCAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlICYmIGxvb2thaGVhZC5oZWFkKSkge1xuICAgICAgICBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiW1wiLCBleHByLCBwYXJzZUNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaChcIi5cIikpIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oXCIuXCIsIGV4cHIsIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG5cbi8vIDExLjMgUG9zdGZpeCBFeHByZXNzaW9uc1xuXG5mdW5jdGlvbiBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByLCB0b2tlbixcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHByID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCk7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHtcbiAgICAgICAgaWYgKChtYXRjaChcIisrXCIpIHx8IG1hdGNoKFwiLS1cIikpICYmICFwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICAgICAgLy8gMTEuMy4xLCAxMS4zLjJcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllciAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RMSFNQb3N0Zml4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQb3N0Zml4RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbi8vIDExLjQgVW5hcnkgT3BlcmF0b3JzXG5cbmZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKCkge1xuICAgIHZhciB0b2tlbiwgZXhwcixcbiAgICAgICAgbWFya2VyO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIisrXCIpIHx8IG1hdGNoKFwiLS1cIikpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICAvLyAxMS40LjQsIDExLjQuNVxuICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgJiYgc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RMSFNQcmVmaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpO1xuICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiK1wiKSB8fCBtYXRjaChcIi1cIikgfHwgbWF0Y2goXCJ+XCIpIHx8IG1hdGNoKFwiIVwiKSkge1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpO1xuICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZChcImRlbGV0ZVwiKSB8fCBtYXRjaEtleXdvcmQoXCJ2b2lkXCIpIHx8IG1hdGNoS2V5d29yZChcInR5cGVvZlwiKSkge1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpO1xuICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLm9wZXJhdG9yID09PSBcImRlbGV0ZVwiICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RGVsZXRlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIGFsbG93SW4pIHtcbiAgICB2YXIgcHJlYyA9IDA7XG5cbiAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi50eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcbiAgICBjYXNlIFwifHxcIjpcbiAgICAgICAgcHJlYyA9IDE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIiYmXCI6XG4gICAgICAgIHByZWMgPSAyO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCJ8XCI6XG4gICAgICAgIHByZWMgPSAzO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCJeXCI6XG4gICAgICAgIHByZWMgPSA0O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCImXCI6XG4gICAgICAgIHByZWMgPSA1O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCI9PVwiOlxuICAgIGNhc2UgXCIhPVwiOlxuICAgIGNhc2UgXCI9PT1cIjpcbiAgICBjYXNlIFwiIT09XCI6XG4gICAgICAgIHByZWMgPSA2O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCI8XCI6XG4gICAgY2FzZSBcIj5cIjpcbiAgICBjYXNlIFwiPD1cIjpcbiAgICBjYXNlIFwiPj1cIjpcbiAgICBjYXNlIFwiaW5zdGFuY2VvZlwiOlxuICAgICAgICBwcmVjID0gNztcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiaW5cIjpcbiAgICAgICAgcHJlYyA9IGFsbG93SW4gPyA3IDogMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiPDxcIjpcbiAgICBjYXNlIFwiPj5cIjpcbiAgICBjYXNlIFwiPj4+XCI6XG4gICAgICAgIHByZWMgPSA4O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCIrXCI6XG4gICAgY2FzZSBcIi1cIjpcbiAgICAgICAgcHJlYyA9IDk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIipcIjpcbiAgICBjYXNlIFwiL1wiOlxuICAgIGNhc2UgXCIlXCI6XG4gICAgICAgIHByZWMgPSAxMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlYztcbn1cblxuLy8gMTEuNSBNdWx0aXBsaWNhdGl2ZSBPcGVyYXRvcnNcbi8vIDExLjYgQWRkaXRpdmUgT3BlcmF0b3JzXG4vLyAxMS43IEJpdHdpc2UgU2hpZnQgT3BlcmF0b3JzXG4vLyAxMS44IFJlbGF0aW9uYWwgT3BlcmF0b3JzXG4vLyAxMS45IEVxdWFsaXR5IE9wZXJhdG9yc1xuLy8gMTEuMTAgQmluYXJ5IEJpdHdpc2UgT3BlcmF0b3JzXG4vLyAxMS4xMSBCaW5hcnkgTG9naWNhbCBPcGVyYXRvcnNcbmZ1bmN0aW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwciwgdG9rZW4sIHByZWMsIHByZXZpb3VzQWxsb3dJbiwgc3RhY2ssIHJpZ2h0LCBvcGVyYXRvciwgbGVmdCwgaSxcbiAgICAgICAgbWFya2VyLCBtYXJrZXJzO1xuXG4gICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjtcbiAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIGxlZnQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHByZXZpb3VzQWxsb3dJbik7XG4gICAgaWYgKHByZWMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfVxuICAgIHRva2VuLnByZWMgPSBwcmVjO1xuICAgIGxleCgpO1xuXG4gICAgbWFya2VycyA9IFttYXJrZXIsIG1hcmtlckNyZWF0ZSgpXTtcbiAgICByaWdodCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG5cbiAgICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRdO1xuXG4gICAgd2hpbGUgKChwcmVjID0gYmluYXJ5UHJlY2VkZW5jZShsb29rYWhlYWQsIHByZXZpb3VzQWxsb3dJbikpID4gMCkge1xuXG4gICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy5cbiAgICAgICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8PSBzdGFja1tzdGFjay5sZW5ndGggLSAyXS5wcmVjKSkge1xuICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG9wZXJhdG9yID0gc3RhY2sucG9wKCkudmFsdWU7XG4gICAgICAgICAgICBsZWZ0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpO1xuICAgICAgICAgICAgbWFya2Vycy5wb3AoKTtcbiAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7XG4gICAgICAgICAgICBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChleHByKTtcbiAgICAgICAgICAgIG1hcmtlcnMucHVzaChtYXJrZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2hpZnQuXG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIHRva2VuLnByZWMgPSBwcmVjO1xuICAgICAgICBzdGFjay5wdXNoKHRva2VuKTtcbiAgICAgICAgbWFya2Vycy5wdXNoKG1hcmtlckNyZWF0ZSgpKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgICAgIHN0YWNrLnB1c2goZXhwcik7XG4gICAgfVxuXG4gICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcblxuICAgIC8vIEZpbmFsIHJlZHVjZSB0byBjbGVhbi11cCB0aGUgc3RhY2suXG4gICAgaSA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgZXhwciA9IHN0YWNrW2ldO1xuICAgIG1hcmtlcnMucG9wKCk7XG4gICAgd2hpbGUgKGkgPiAxKSB7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCaW5hcnlFeHByZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKTtcbiAgICAgICAgaSAtPSAyO1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJzLnBvcCgpO1xuICAgICAgICBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG4vLyAxMS4xMiBDb25kaXRpb25hbCBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwciwgcHJldmlvdXNBbGxvd0luLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwciA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpO1xuXG4gICAgaWYgKG1hdGNoKFwiP1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjtcbiAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG4gICAgICAgIGNvbnNlcXVlbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG4gICAgICAgIGV4cGVjdChcIjpcIik7XG4gICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblxuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7XG4gICAgICAgIG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbi8vIFtFUzZdIDE0LjIgQXJyb3cgRnVuY3Rpb25cblxuZnVuY3Rpb24gcGFyc2VDb25jaXNlQm9keSgpIHtcbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbn1cblxuZnVuY3Rpb24gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoZXhwcmVzc2lvbnMpIHtcbiAgICB2YXIgaSwgbGVuLCBwYXJhbSwgcGFyYW1zLCBvcHRpb25zLFxuICAgICAgICBhbGxvd1Jlc3RQYXJhbXMgPSBleHRyYS5lY21hRmVhdHVyZXMucmVzdFBhcmFtcztcblxuICAgIHBhcmFtcyA9IFtdO1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHBhcmFtU2V0OiBuZXcgU3RyaW5nTWFwKClcbiAgICB9O1xuXG4gICAgZm9yIChpID0gMCwgbGVuID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgcGFyYW0gPSBleHByZXNzaW9uc1tpXTtcbiAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBwYXJhbS5uYW1lKTtcbiAgICAgICAgfSAgZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24gfHwgcGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGFzc2VydChpID09PSBsZW4gLSAxLCBcIkl0IGlzIGd1YXJhbnRlZWQgdGhhdCBTcHJlYWRFbGVtZW50IGlzIGxhc3QgZWxlbWVudCBieSBwYXJzZUV4cHJlc3Npb25cIik7XG4gICAgICAgICAgICBpZiAocGFyYW0uYXJndW1lbnQudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiW1wiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhbGxvd1Jlc3RQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW4ndCBnZXQgY29ycmVjdCBsaW5lL2NvbHVtbiBoZXJlIDooXG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIi5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0uYXJndW1lbnQpO1xuICAgICAgICAgICAgcGFyYW0udHlwZSA9IGFzdE5vZGVUeXBlcy5SZXN0RWxlbWVudDtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuUmVzdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0uYXJndW1lbnQsIHBhcmFtLmFyZ3VtZW50Lm5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lvbikge1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaW5kIGEgbGVzcyBoYWNreSB3YXkgb2YgZG9pbmcgdGhpc1xuICAgICAgICAgICAgcGFyYW0udHlwZSA9IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybjtcbiAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5vcGVyYXRvcjtcblxuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbS5sZWZ0LCBwYXJhbS5sZWZ0Lm5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZXNzYWdlID09PSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGUpIHtcbiAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgIHN0cmljdCA/IG9wdGlvbnMuc3RyaWN0ZWQgOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICBzdHJpY3RlZDogb3B0aW9ucy5zdHJpY3RlZCxcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihvcHRpb25zLCBtYXJrZXIpIHtcbiAgICB2YXIgcHJldmlvdXNTdHJpY3QsIGJvZHk7XG5cbiAgICBleHBlY3QoXCI9PlwiKTtcbiAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDtcblxuICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7XG5cbiAgICBpZiAoc3RyaWN0ICYmIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3Iob3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsIG9wdGlvbnMubWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChzdHJpY3QgJiYgb3B0aW9ucy5zdHJpY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQob3B0aW9ucy5zdHJpY3RlZCwgb3B0aW9ucy5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMsXG4gICAgICAgIGJvZHksXG4gICAgICAgIGJvZHkudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50XG4gICAgKSk7XG59XG5cbi8vIDExLjEzIEFzc2lnbm1lbnQgT3BlcmF0b3JzXG5cbi8vIDEyLjE0LjUgQXNzaWdubWVudFBhdHRlcm5cblxuZnVuY3Rpb24gcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihleHByKSB7XG4gICAgdmFyIGksIGxlbiwgcHJvcGVydHksIGVsZW1lbnQsXG4gICAgICAgIGFsbG93RGVzdHJ1Y3R1cmluZyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZXN0cnVjdHVyaW5nO1xuXG4gICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuT2JqZWN0UGF0dGVybjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5raW5kICE9PSBcImluaXRcIikge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKHByb3BlcnR5LnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5BcnJheVBhdHRlcm47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHIuZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBleHByLmVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuU3ByZWFkRWxlbWVudCkge1xuICAgICAgICByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKGV4cHIuYXJndW1lbnQpO1xuICAgICAgICBpZiAoZXhwci5hcmd1bWVudC50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0UGF0dGVybikge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5PYmplY3RQYXR0ZXJuQXNTcHJlYWQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiAmJiBleHByLm9wZXJhdG9yID09PSBcIj1cIikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGV4cHIudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLk1lbWJlckV4cHJlc3Npb24gJiZcbiAgICAgICAgICAgIGV4cHIudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkNhbGxFeHByZXNzaW9uICYmXG4gICAgICAgICAgICBleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uICYmXG4gICAgICAgICAgICBleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIDEzLjIuMyBCaW5kaW5nUGF0dGVyblxuXG5mdW5jdGlvbiByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIGV4cHIpIHtcbiAgICB2YXIgaSwgbGVuLCBwcm9wZXJ0eSwgZWxlbWVudCxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmc7XG5cbiAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgIH1cblxuICAgIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5PYmplY3RQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtpbmQgIT09IFwiaW5pdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHByb3BlcnR5LnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5BcnJheVBhdHRlcm47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHIuZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBleHByLmVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgZXhwciwgZXhwci5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQpIHtcbiAgICAgICAgLy8gQmluZGluZ1Jlc3RFbGVtZW50IG9ubHkgYWxsb3dzIEJpbmRpbmdJZGVudGlmaWVyXG4gICAgICAgIGlmIChleHByLmFyZ3VtZW50LnR5cGUgIT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvcm1hbHNMaXN0KTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIGV4cHIuYXJndW1lbnQsIGV4cHIuYXJndW1lbnQubmFtZSk7XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lvbiAmJiBleHByLm9wZXJhdG9yID09PSBcIj1cIikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm47XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybikge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkge1xuICAgIHZhciB0b2tlbiwgbGVmdCwgcmlnaHQsIG5vZGUsIHBhcmFtcyxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBzdGFydHNXaXRoUGFyZW4gPSBmYWxzZSxcbiAgICAgICAgb2xkUGFyZW50aGVzaXNDb3VudCA9IHN0YXRlLnBhcmVudGhlc2lzQ291bnQsXG4gICAgICAgIGFsbG93R2VuZXJhdG9ycyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzO1xuXG4gICAgLy8gTm90ZSB0aGF0ICd5aWVsZCcgaXMgdHJlYXRlZCBhcyBhIGtleXdvcmQgaW4gc3RyaWN0IG1vZGUsIGJ1dCBhXG4gICAgLy8gY29udGV4dHVhbCBrZXl3b3JkIChpZGVudGlmaWVyKSBpbiBub24tc3RyaWN0IG1vZGUsIHNvIHdlIG5lZWRcbiAgICAvLyB0byB1c2UgbWF0Y2hLZXl3b3JkIGFuZCBtYXRjaENvbnRleHR1YWxLZXl3b3JkIGFwcHJvcHJpYXRlbHkuXG4gICAgaWYgKGFsbG93R2VuZXJhdG9ycyAmJiAoKHN0YXRlLnlpZWxkQWxsb3dlZCAmJiBtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwieWllbGRcIikpIHx8IChzdHJpY3QgJiYgbWF0Y2hLZXl3b3JkKFwieWllbGRcIikpKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VZaWVsZEV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmIChtYXRjaChcIihcIikpIHtcbiAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQyKCk7XG4gICAgICAgIGlmICgodG9rZW4udmFsdWUgPT09IFwiKVwiICYmIHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHx8IHRva2VuLnZhbHVlID09PSBcIi4uLlwiKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcygpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaChcIj0+XCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKHBhcmFtcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydHNXaXRoUGFyZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHJldmVydCB0byB0aGUgcHJldmlvdXMgbG9va2FoZWFkIHN0eWxlIG9iamVjdFxuICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgIG5vZGUgPSBsZWZ0ID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKTtcblxuICAgIGlmIChtYXRjaChcIj0+XCIpICYmXG4gICAgICAgICAgICAoc3RhdGUucGFyZW50aGVzaXNDb3VudCA9PT0gb2xkUGFyZW50aGVzaXNDb3VudCB8fFxuICAgICAgICAgICAgc3RhdGUucGFyZW50aGVzaXNDb3VudCA9PT0gKG9sZFBhcmVudGhlc2lzQ291bnQgKyAxKSkpIHtcblxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoWyBub2RlIF0pO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRFeHByZXNzaW9uIHx8XG4gICAgICAgICAgICBub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5BcnJheUV4cHJlc3Npb24gfHxcbiAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGlmICghc3RhcnRzV2l0aFBhcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtcyA9IHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KFsgbm9kZSBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TZXF1ZW5jZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KG5vZGUuZXhwcmVzc2lvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ocGFyYW1zLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoQXNzaWduKCkpIHtcblxuICAgICAgICAvLyAxMS4xMy4xXG4gICAgICAgIGlmIChzdHJpY3QgJiYgbGVmdC50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllciAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChsZWZ0Lm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRVMubmV4dCBkcmFmIDExLjEzIFJ1bnRpbWUgU2VtYW50aWNzIHN0ZXAgMVxuICAgICAgICBpZiAobWF0Y2goXCI9XCIpICYmIChub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uIHx8IG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikpIHtcbiAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4obm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzTGVmdEhhbmRTaWRlKG5vZGUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgIG5vZGUgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBsZWZ0LCByaWdodCkpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xufVxuXG4vLyAxMS4xNCBDb21tYSBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpLFxuICAgICAgICBleHByZXNzaW9ucyA9IFsgZXhwciBdLFxuICAgICAgICBzZXF1ZW5jZSwgc3ByZWFkRm91bmQ7XG5cbiAgICBpZiAobWF0Y2goXCIsXCIpKSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFtYXRjaChcIixcIikpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgZXhwciA9IHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChleHByKTtcblxuICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzcHJlYWRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaChcIilcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuRWxlbWVudEFmdGVyU3ByZWFkRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2VxdWVuY2UgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbihleHByZXNzaW9ucykpO1xuICAgIH1cblxuICAgIGlmIChzcHJlYWRGb3VuZCAmJiBsb29rYWhlYWQyKCkudmFsdWUgIT09IFwiPT5cIikge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsU3ByZWFkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxdWVuY2UgfHwgZXhwcjtcbn1cblxuLy8gMTIuMSBCbG9ja1xuXG5mdW5jdGlvbiBwYXJzZVN0YXRlbWVudExpc3QoKSB7XG4gICAgdmFyIGxpc3QgPSBbXSxcbiAgICAgICAgc3RhdGVtZW50O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbGlzdC5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQmxvY2soKSB7XG4gICAgdmFyIGJsb2NrLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICBibG9jayA9IHBhcnNlU3RhdGVtZW50TGlzdCgpO1xuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGJsb2NrKSk7XG59XG5cbi8vIDEyLjIgVmFyaWFibGUgU3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkge1xuICAgIHZhciB0b2tlbixcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICB0b2tlbiA9IGxleCgpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIHN5bnRheC5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkge1xuICAgIHZhciBpZCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGluaXQgPSBudWxsO1xuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlkID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlkID0gc3RhdGUuYWxsb3dLZXl3b3JkID8gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgOiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICAvLyAxMi4yLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFZlcmlmeSBhZ2FpbnN0IGZlYXR1cmUgZmxhZ3NcbiAgICBpZiAoa2luZCA9PT0gXCJjb25zdFwiKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCI9XCIpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob1VuaW50aWFsaXplZENvbnN0KTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoXCI9XCIpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuXG4gICAgZG8ge1xuICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpKTtcbiAgICAgICAgaWYgKCFtYXRjaChcIixcIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxleCgpO1xuICAgIH0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkge1xuICAgIHZhciBkZWNsYXJhdGlvbnM7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwidmFyXCIpO1xuXG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBcInZhclwiKTtcbn1cblxuLy8ga2luZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YFxuLy8gQm90aCBhcmUgZXhwZXJpbWVudGFsIGFuZCBub3QgaW4gdGhlIHNwZWNpZmljYXRpb24geWV0LlxuLy8gc2VlIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3Rcbi8vIGFuZCBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmxldFxuZnVuY3Rpb24gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGtpbmQpIHtcbiAgICB2YXIgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoa2luZCk7XG5cbiAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZVJlc3RFbGVtZW50KCkge1xuICAgIHZhciBwYXJhbSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBsZXgoKTtcblxuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXIpO1xuICAgIH1cblxuICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgIGlmIChtYXRjaChcIj1cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZCwgTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVSZXN0RWxlbWVudChwYXJhbSkpO1xufVxuXG4vLyAxMi4zIEVtcHR5IFN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkge1xuICAgIGV4cGVjdChcIjtcIik7XG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7XG59XG5cbi8vIDEyLjQgRXhwcmVzc2lvbiBTdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCkge1xuICAgIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpO1xufVxuXG4vLyAxMi41IElmIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiaWZcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGNvbnNlcXVlbnQgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImVsc2VcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbn1cblxuLy8gMTIuNiBJdGVyYXRpb24gU3RhdGVtZW50c1xuXG5mdW5jdGlvbiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImRvXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2hpbGVcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGlmIChtYXRjaChcIjtcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcIndoaWxlXCIpO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTtcblxuICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCkge1xuICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbGV4KCk7XG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRm9yU3RhdGVtZW50KG9wdHMpIHtcbiAgICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwgYm9keSwgb3BlcmF0b3IsIG9sZEluSXRlcmF0aW9uO1xuICAgIHZhciBhbGxvd0Zvck9mID0gZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mLFxuICAgICAgICBhbGxvd0Jsb2NrQmluZGluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMuYmxvY2tCaW5kaW5ncztcblxuICAgIGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJmb3JcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgaWYgKG1hdGNoKFwiO1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJ2YXJcIikgfHxcbiAgICAgICAgICAgIChhbGxvd0Jsb2NrQmluZGluZ3MgJiYgKG1hdGNoS2V5d29yZChcImxldFwiKSB8fCBtYXRjaEtleXdvcmQoXCJjb25zdFwiKSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlO1xuICAgICAgICAgICAgaW5pdCA9IHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwiaW5cIikgfHwgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSkge1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGxvb2thaGVhZDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpcyBcInZhclwiIGNoZWNrIGhlcmUgcmVhbGx5IG5lZWRlZD8gd2FzblwidCBpbiAxLjIuMlxuICAgICAgICAgICAgICAgICAgICBpZiAoISgob3BlcmF0b3IudmFsdWUgPT09IFwiaW5cIiB8fCBpbml0LmtpbmQgIT09IFwidmFyXCIpICYmIGluaXQuZGVjbGFyYXRpb25zWzBdLmluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7XG4gICAgICAgICAgICBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoXCJpblwiKSkge1xuICAgICAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZXhwZWN0KFwiO1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuXG4gICAgICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KFwiO1wiKTtcblxuICAgICAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgdXBkYXRlID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBpZiAoIShvcHRzICE9PSB1bmRlZmluZWQgJiYgb3B0cy5pZ25vcmVCb2R5KSkge1xuICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uO1xuXG4gICAgaWYgKHR5cGVvZiBsZWZ0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KTtcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mICYmIG9wZXJhdG9yLnZhbHVlID09PSBcIm9mXCIpIHtcbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpO1xufVxuXG4vLyAxMi43IFRoZSBjb250aW51ZSBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVudCgpIHtcbiAgICB2YXIgbGFiZWwgPSBudWxsO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNvbnRpbnVlXCIpO1xuXG4gICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9uIGZvcm06IFwiY29udGludWU7XCIuXG4gICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQikge1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxhYmVsKTtcbn1cblxuLy8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGxhYmVsID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJicmVha1wiKTtcblxuICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7XG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTtcbiAgICB9XG5cbiAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobGFiZWwpO1xufVxuXG4vLyAxMi45IFRoZSByZXR1cm4gc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkge1xuICAgIHZhciBhcmd1bWVudCA9IG51bGw7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwicmV0dXJuXCIpO1xuXG4gICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSAmJiAhZXh0cmEuZWNtYUZlYXR1cmVzLmdsb2JhbFJldHVybikge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pO1xuICAgIH1cblxuICAgIC8vIFwicmV0dXJuXCIgZm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQgYW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDIwKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCJ9XCIpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbn1cblxuLy8gMTIuMTAgVGhlIHdpdGggc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlV2l0aFN0YXRlbWVudCgpIHtcbiAgICB2YXIgb2JqZWN0LCBib2R5O1xuXG4gICAgaWYgKHN0cmljdCkge1xuICAgICAgICAvLyBUT0RPKGlrYXJpZW5hdG9yKTogU2hvdWxkIHdlIHVwZGF0ZSB0aGUgdGVzdCBjYXNlcyBpbnN0ZWFkP1xuICAgICAgICBza2lwQ29tbWVudCgpO1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTtcbiAgICB9XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2l0aFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBvYmplY3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSk7XG59XG5cbi8vIDEyLjEwIFRoZSBzd2l0aCBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgdGVzdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwZWN0S2V5d29yZChcImNhc2VcIik7XG4gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgZXhwZWN0KFwiOlwiKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2goXCJ9XCIpIHx8IG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikgfHwgbWF0Y2hLZXl3b3JkKFwiY2FzZVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIGNvbnNlcXVlbnQucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN3aXRjaFN0YXRlbWVudCgpIHtcbiAgICB2YXIgZGlzY3JpbWluYW50LCBjYXNlcywgY2xhdXNlLCBvbGRJblN3aXRjaCwgZGVmYXVsdEZvdW5kO1xuXG4gICAgZXhwZWN0S2V5d29yZChcInN3aXRjaFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBkaXNjcmltaW5hbnQgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgY2FzZXMgPSBbXTtcblxuICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcyk7XG4gICAgfVxuXG4gICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3aXRjaDtcbiAgICBzdGF0ZS5pblN3aXRjaCA9IHRydWU7XG4gICAgZGVmYXVsdEZvdW5kID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKG1hdGNoKFwifVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2xhdXNlID0gcGFyc2VTd2l0Y2hDYXNlKCk7XG4gICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRGb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0Rm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2VzLnB1c2goY2xhdXNlKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoO1xuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcyk7XG59XG5cbi8vIDEyLjEzIFRoZSB0aHJvdyBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VUaHJvd1N0YXRlbWVudCgpIHtcbiAgICB2YXIgYXJndW1lbnQ7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwidGhyb3dcIik7XG5cbiAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTmV3bGluZUFmdGVyVGhyb3cpO1xuICAgIH1cblxuICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGhyb3dTdGF0ZW1lbnQoYXJndW1lbnQpO1xufVxuXG4vLyAxMi4xNCBUaGUgdHJ5IHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUNhdGNoQ2xhdXNlKCkge1xuICAgIHZhciBwYXJhbSwgYm9keSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGFsbG93RGVzdHJ1Y3R1cmluZyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZXN0cnVjdHVyaW5nLFxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICB9O1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNhdGNoXCIpO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcbiAgICBpZiAobWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJ7XCIpKSB7XG5cbiAgICAgICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgLy8gMTIuMTQuMVxuICAgIGlmIChzdHJpY3QgJiYgcGFyYW0ubmFtZSAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChwYXJhbS5uYW1lKSkge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUpO1xuICAgIH1cblxuICAgIGV4cGVjdChcIilcIik7XG4gICAgYm9keSA9IHBhcnNlQmxvY2soKTtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVDYXRjaENsYXVzZShwYXJhbSwgYm9keSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRyeVN0YXRlbWVudCgpIHtcbiAgICB2YXIgYmxvY2ssIGhhbmRsZXIgPSBudWxsLCBmaW5hbGl6ZXIgPSBudWxsO1xuXG4gICAgZXhwZWN0S2V5d29yZChcInRyeVwiKTtcblxuICAgIGJsb2NrID0gcGFyc2VCbG9jaygpO1xuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImNhdGNoXCIpKSB7XG4gICAgICAgIGhhbmRsZXIgPSBwYXJzZUNhdGNoQ2xhdXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImZpbmFsbHlcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGZpbmFsaXplciA9IHBhcnNlQmxvY2soKTtcbiAgICB9XG5cbiAgICBpZiAoIWhhbmRsZXIgJiYgIWZpbmFsaXplcikge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVHJ5U3RhdGVtZW50KGJsb2NrLCBoYW5kbGVyLCBmaW5hbGl6ZXIpO1xufVxuXG4vLyAxMi4xNSBUaGUgZGVidWdnZXIgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSB7XG4gICAgZXhwZWN0S2V5d29yZChcImRlYnVnZ2VyXCIpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50KCk7XG59XG5cbi8vIDEyIFN0YXRlbWVudHNcblxuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIHR5cGUgPSBsb29rYWhlYWQudHlwZSxcbiAgICAgICAgZXhwcixcbiAgICAgICAgbGFiZWxlZEJvZHksXG4gICAgICAgIG1hcmtlcjtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSBcIntcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VCbG9jaygpO1xuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCI7XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VFbXB0eVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ7XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgIGNhc2UgXCIoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJicmVha1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiY29udGludWVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcImRlYnVnZ2VyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJkb1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJmb3JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUZvclN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpKTtcbiAgICAgICAgICAgIGNhc2UgXCJpZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlSWZTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwicmV0dXJuXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwic3dpdGNoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwidGhyb3dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVRocm93U3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInRyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlVHJ5U3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInZhclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwid2hpbGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVdoaWxlU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcIndpdGhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVdpdGhTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgLy8gMTIuMTIgTGFiZWxsZWQgU3RhdGVtZW50c1xuICAgIGlmICgoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikgJiYgbWF0Y2goXCI6XCIpKSB7XG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIGlmIChzdGF0ZS5sYWJlbFNldC5oYXMoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwgXCJMYWJlbFwiLCBleHByLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUubGFiZWxTZXQuc2V0KGV4cHIubmFtZSwgdHJ1ZSk7XG4gICAgICAgIGxhYmVsZWRCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICAgICAgc3RhdGUubGFiZWxTZXQuZGVsZXRlKGV4cHIubmFtZSk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoZXhwciwgbGFiZWxlZEJvZHkpKTtcbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpKTtcbn1cblxuLy8gMTMgRnVuY3Rpb24gRGVmaW5pdGlvblxuXG4vLyBmdW5jdGlvbiBwYXJzZUNvbmNpc2VCb2R5KCkge1xuLy8gICAgIGlmIChtYXRjaChcIntcIikpIHtcbi8vICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuLy8gICAgIH1cbi8vICAgICByZXR1cm4gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuLy8gfVxuXG5mdW5jdGlvbiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKSB7XG4gICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgb2xkTGFiZWxTZXQsIG9sZEluSXRlcmF0aW9uLCBvbGRJblN3aXRjaCwgb2xkSW5GdW5jdGlvbkJvZHksIG9sZFBhcmVudGhlc2lzQ291bnQsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTtcbiAgICAgICAgaWYgKHNvdXJjZUVsZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBhc3ROb2RlVHlwZXMuTGl0ZXJhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xpY2UodG9rZW4ucmFuZ2VbMF0gKyAxLCB0b2tlbi5yYW5nZVsxXSAtIDEpO1xuICAgICAgICBpZiAoZGlyZWN0aXZlID09PSBcInVzZSBzdHJpY3RcIikge1xuICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb2xkTGFiZWxTZXQgPSBzdGF0ZS5sYWJlbFNldDtcbiAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7XG4gICAgb2xkSW5GdW5jdGlvbkJvZHkgPSBzdGF0ZS5pbkZ1bmN0aW9uQm9keTtcbiAgICBvbGRQYXJlbnRoZXNpc0NvdW50ID0gc3RhdGUucGFyZW50aGVzaXplZENvdW50O1xuXG4gICAgc3RhdGUubGFiZWxTZXQgPSBuZXcgU3RyaW5nTWFwKCk7XG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBmYWxzZTtcbiAgICBzdGF0ZS5pblN3aXRjaCA9IGZhbHNlO1xuICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gdHJ1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuXG4gICAgICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICBzdGF0ZS5sYWJlbFNldCA9IG9sZExhYmVsU2V0O1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG4gICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDtcbiAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IG9sZEluRnVuY3Rpb25Cb2R5O1xuICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9IG9sZFBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCbG9ja1N0YXRlbWVudChzb3VyY2VFbGVtZW50cykpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7XG5cbiAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZChuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1TZXQuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQgPSBwYXJhbTtcbiAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnBhcmFtU2V0LmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQgPSBwYXJhbTtcbiAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zLnBhcmFtU2V0LnNldChuYW1lLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJhbShvcHRpb25zKSB7XG4gICAgdmFyIHRva2VuLCBwYXJhbSwgZGVmLFxuICAgICAgICBhbGxvd1Jlc3RQYXJhbXMgPSBleHRyYS5lY21hRmVhdHVyZXMucmVzdFBhcmFtcyxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmcsXG4gICAgICAgIGFsbG93RGVmYXVsdFBhcmFtcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZWZhdWx0UGFyYW1zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gXCIuLi5cIikge1xuICAgICAgICBpZiAoIWFsbG93UmVzdFBhcmFtcykge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW0gPSBwYXJzZVJlc3RFbGVtZW50KCk7XG4gICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0uYXJndW1lbnQsIHBhcmFtLmFyZ3VtZW50Lm5hbWUpO1xuICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHRva2VuLCB0b2tlbi52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiPVwiKSkge1xuICAgICAgICBpZiAoYWxsb3dEZWZhdWx0UGFyYW1zIHx8IGFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBkZWYgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICArK29wdGlvbnMuZGVmYXVsdENvdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmKSB7XG4gICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gobWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVBc3NpZ25tZW50UGF0dGVybihcbiAgICAgICAgICAgICAgICBwYXJhbSxcbiAgICAgICAgICAgICAgICBkZWZcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChwYXJhbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFtYXRjaChcIilcIik7XG59XG5cblxuZnVuY3Rpb24gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgdmFyIG9wdGlvbnM7XG5cbiAgICBvcHRpb25zID0ge1xuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICBkZWZhdWx0Q291bnQ6IDAsXG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZDogZmlyc3RSZXN0cmljdGVkXG4gICAgfTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICBvcHRpb25zLnBhcmFtU2V0ID0gbmV3IFN0cmluZ01hcCgpO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghcGFyc2VQYXJhbShvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwZWN0KFwiLFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLFxuICAgICAgICBzdHJpY3RlZDogb3B0aW9ucy5zdHJpY3RlZCxcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7XG4gICAgICAgIHZhciBpZCA9IG51bGwsIGJvZHksIHRva2VuLCB0bXAsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzWWllbGRBbGxvd2VkLCBnZW5lcmF0b3IsXG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgICAgIGFsbG93R2VuZXJhdG9ycyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzO1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoXCJmdW5jdGlvblwiKTtcblxuICAgICAgICBnZW5lcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFsbG93R2VuZXJhdG9ycyAmJiBtYXRjaChcIipcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaWRlbnRpZmllcklzT3B0aW9uYWwgfHwgIW1hdGNoKFwiKFwiKSkge1xuXG4gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcblxuICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKTtcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDtcbiAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDtcbiAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7XG4gICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGdlbmVyYXRvcjtcblxuICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG5cbiAgICAgICAgaWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaWN0ICYmIHRtcC5zdHJpY3RlZCkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG4gICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkO1xuXG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgdG1wLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIGdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHRva2VuLCBpZCA9IG51bGwsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgdG1wLCBib2R5LCBwcmV2aW91c1N0cmljdCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIGdlbmVyYXRvcixcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGFsbG93R2VuZXJhdG9ycyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImZ1bmN0aW9uXCIpO1xuXG4gICAgZ2VuZXJhdG9yID0gZmFsc2U7XG5cbiAgICBpZiAoYWxsb3dHZW5lcmF0b3JzICYmIG1hdGNoKFwiKlwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZ2VuZXJhdG9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoKFwiKFwiKSkge1xuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bnRheC5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDtcbiAgICBpZiAodG1wLm1lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlO1xuICAgIH1cblxuICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkO1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGdlbmVyYXRvcjtcblxuICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcblxuICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKHN0cmljdCAmJiB0bXAuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgfVxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdG1wLnBhcmFtcyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICApXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VZaWVsZEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHlpZWxkVG9rZW4sIGRlbGVnYXRlRmxhZywgZXhwciwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICB5aWVsZFRva2VuID0gbGV4KCk7XG4gICAgYXNzZXJ0KHlpZWxkVG9rZW4udmFsdWUgPT09IFwieWllbGRcIiwgXCJDYWxsZWQgcGFyc2VZaWVsZEV4cHJlc3Npb24gd2l0aCBub24teWllbGQgbG9va2FoZWFkLlwiKTtcblxuICAgIGlmICghc3RhdGUueWllbGRBbGxvd2VkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFlpZWxkKTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZUZsYWcgPSBmYWxzZTtcbiAgICBpZiAobWF0Y2goXCIqXCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBkZWxlZ2F0ZUZsYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVZaWVsZEV4cHJlc3Npb24obnVsbCwgZGVsZWdhdGVGbGFnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIjtcIikgJiYgIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICBpZiAoIW1hdGNoKFwifVwiKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlWWllbGRFeHByZXNzaW9uKGV4cHIsIGRlbGVnYXRlRmxhZykpO1xufVxuXG4vLyBNb2R1bGVzIGdyYW1tYXIgZnJvbTpcbi8vIHBlb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbFxuXG5mdW5jdGlvbiBwYXJzZU1vZHVsZVNwZWNpZmllcigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHNwZWNpZmllcjtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTtcbiAgICB9XG4gICAgc3BlY2lmaWVyID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UobGV4KCksIHNvdXJjZSk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgc3BlY2lmaWVyKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnRTcGVjaWZpZXIoKSB7XG4gICAgdmFyIGV4cG9ydGVkLCBsb2NhbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgaWYgKG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGxvY2FsID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKFwiZGVmYXVsdFwiKSk7XG4gICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSBcInNvbWV0aGluZ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZXhwb3J0ZWQgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0U3BlY2lmaWVyKGxvY2FsLCBleHBvcnRlZCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCxcbiAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllcixcbiAgICAgICAgc3JjID0gbnVsbCwgc3BlY2lmaWVycyA9IFtdLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG5cbiAgICAvLyBub24tZGVmYXVsdCBleHBvcnRcbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxO1xuICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcImxldFwiOlxuICAgICAgICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgICAgICBjYXNlIFwidmFyXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgbnVsbCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIntcIik7XG4gICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgfHwgbWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUV4cG9ydFNwZWNpZmllcigpKTtcbiAgICAgICAgfSB3aGlsZSAobWF0Y2goXCIsXCIpICYmIGxleCgpKTtcbiAgICB9XG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiZnJvbVwiKSkge1xuICAgICAgICAvLyBjb3ZlcmluZzpcbiAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fSBmcm9tIFwiZm9vXCI7XG4gICAgICAgIC8vIGV4cG9ydCB7Zm9vfSBmcm9tIFwiZm9vXCI7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgfSBlbHNlIGlmIChpc0V4cG9ydEZyb21JZGVudGlmaWVyKSB7XG4gICAgICAgIC8vIGNvdmVyaW5nOlxuICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9OyAvLyBtaXNzaW5nIGZyb21DbGF1c2VcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID9cbiAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb3ZlclxuICAgICAgICAvLyBleHBvcnQge2Zvb307XG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgc3JjKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKCkge1xuICAgIHZhciBkZWNsYXJhdGlvbiA9IG51bGwsXG4gICAgICAgIGV4cHJlc3Npb24gPSBudWxsLFxuICAgICAgICBwb3NzaWJsZUlkZW50aWZpZXJUb2tlbixcbiAgICAgICAgYWxsb3dDbGFzc2VzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmNsYXNzZXMsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgLy8gY292ZXJzOlxuICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLlxuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG4gICAgZXhwZWN0S2V5d29yZChcImRlZmF1bHRcIik7XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZnVuY3Rpb25cIikgfHwgbWF0Y2hLZXl3b3JkKFwiY2xhc3NcIikpIHtcbiAgICAgICAgcG9zc2libGVJZGVudGlmaWVyVG9rZW4gPSBsb29rYWhlYWQyKCk7XG4gICAgICAgIGlmIChwb3NzaWJsZUlkZW50aWZpZXJUb2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb28gKCkge31cbiAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIGZvbyB7fVxuICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge31cbiAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3Mge31cbiAgICAgICAgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbih0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGFsbG93Q2xhc3NlcyAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwiY2xhc3NcIikge1xuICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZUNsYXNzRGVjbGFyYXRpb24odHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiZnJvbVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gY292ZXJzOlxuICAgIC8vIGV4cG9ydCBkZWZhdWx0IHt9O1xuICAgIC8vIGV4cG9ydCBkZWZhdWx0IFtdO1xuICAgIC8vIGV4cG9ydCBkZWZhdWx0ICgxICsgMik7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGV4cHJlc3Npb24pKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKCkge1xuICAgIHZhciBzcmMsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgLy8gY292ZXJzOlxuICAgIC8vIGV4cG9ydCAqIGZyb20gXCJmb29cIjtcbiAgICBleHBlY3RLZXl3b3JkKFwiZXhwb3J0XCIpO1xuICAgIGV4cGVjdChcIipcIik7XG4gICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiZnJvbVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBsb29rYWhlYWQudmFsdWUgP1xuICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpO1xuICAgIH1cbiAgICBsZXgoKTtcbiAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydEFsbERlY2xhcmF0aW9uKHNyYykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pO1xuICAgIH1cbiAgICB2YXIgZGVjbGFyYXRpb25UeXBlID0gbG9va2FoZWFkMigpLnZhbHVlO1xuICAgIGlmIChkZWNsYXJhdGlvblR5cGUgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbigpO1xuICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb25UeXBlID09PSBcIipcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VFeHBvcnRBbGxEZWNsYXJhdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkge1xuICAgIC8vIGltcG9ydCB7PGZvbyBhcyBiYXI+fSAuLi47XG4gICAgdmFyIGxvY2FsLCBpbXBvcnRlZCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpbXBvcnRlZCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiYXNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnRTcGVjaWZpZXIobG9jYWwsIGltcG9ydGVkKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFtZWRJbXBvcnRzKCkge1xuICAgIHZhciBzcGVjaWZpZXJzID0gW107XG4gICAgLy8ge2ZvbywgYmFyIGFzIGJhc31cbiAgICBleHBlY3QoXCJ7XCIpO1xuICAgIGlmICghbWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUltcG9ydFNwZWNpZmllcigpKTtcbiAgICAgICAgfSB3aGlsZSAobWF0Y2goXCIsXCIpICYmIGxleCgpKTtcbiAgICB9XG4gICAgZXhwZWN0KFwifVwiKTtcbiAgICByZXR1cm4gc3BlY2lmaWVycztcbn1cblxuZnVuY3Rpb24gcGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkge1xuICAgIC8vIGltcG9ydCA8Zm9vPiAuLi47XG4gICAgdmFyIGxvY2FsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGxvY2FsID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWZhdWx0U3BlY2lmaWVyKGxvY2FsKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkge1xuICAgIC8vIGltcG9ydCA8KiBhcyBmb28+IC4uLjtcbiAgICB2YXIgbG9jYWwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwZWN0KFwiKlwiKTtcbiAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2UpO1xuICAgIH1cbiAgICBsZXgoKTtcbiAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKGxvY2FsKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHNwZWNpZmllcnMsIHNyYywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAoc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTtcbiAgICB9XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiaW1wb3J0XCIpO1xuICAgIHNwZWNpZmllcnMgPSBbXTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGltcG9ydCBcImZvb1wiO1xuICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmllcnMsIHNyYykpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKSAmJiBpc0lkZW50aWZpZXJOYW1lKGxvb2thaGVhZCkpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgZm9vXG4gICAgICAgIC8vIGltcG9ydCBmb28sIC4uLlxuICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkpO1xuICAgICAgICBpZiAobWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobWF0Y2goXCIqXCIpKSB7XG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gaW1wb3J0IGZvbywgKiBhcyBmb29cbiAgICAgICAgLy8gaW1wb3J0ICogYXMgZm9vXG4gICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGltcG9ydCBmb28sIHtiYXJ9XG4gICAgICAgIC8vIGltcG9ydCB7YmFyfVxuICAgICAgICBzcGVjaWZpZXJzID0gc3BlY2lmaWVycy5jb25jYXQocGFyc2VOYW1lZEltcG9ydHMoKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiZnJvbVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBsb29rYWhlYWQudmFsdWUgP1xuICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpO1xuICAgIH1cbiAgICBsZXgoKTtcbiAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmllcnMsIHNyYykpO1xufVxuXG4vLyAxNCBGdW5jdGlvbnMgYW5kIGNsYXNzZXNcblxuLy8gMTQuMSBGdW5jdGlvbnMgaXMgZGVmaW5lZCBhYm92ZSAoMTMgaW4gRVM1KVxuLy8gMTQuMiBBcnJvdyBGdW5jdGlvbnMgRGVmaW5pdGlvbnMgaXMgZGVmaW5lZCBpbiAoNy4zIGFzc2lnbm1lbnRzKVxuXG4vLyAxNC4zIE1ldGhvZCBEZWZpbml0aW9uc1xuLy8gMTQuMy43XG5cbi8vIDE0LjUgQ2xhc3MgRGVmaW5pdGlvbnNcblxuZnVuY3Rpb24gcGFyc2VDbGFzc0JvZHkoKSB7XG4gICAgdmFyIGhhc0NvbnN0cnVjdG9yID0gZmFsc2UsIGdlbmVyYXRvciA9IGZhbHNlLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycyxcbiAgICAgICAgdG9rZW4sIGlzU3RhdGljLCBib2R5ID0gW10sIG1ldGhvZCwgY29tcHV0ZWQsIGtleTtcblxuICAgIHZhciBleGlzdGluZ1Byb3BzID0ge30sXG4gICAgICAgIHRvcE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBtYXJrZXI7XG5cbiAgICBleGlzdGluZ1Byb3BzLnN0YXRpYyA9IG5ldyBTdHJpbmdNYXAoKTtcbiAgICBleGlzdGluZ1Byb3BzLnByb3RvdHlwZSA9IG5ldyBTdHJpbmdNYXAoKTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwifVwiKSkge1xuXG4gICAgICAgIC8vIGV4dHJhIHNlbWljb2xvbnMgYXJlIGZpbmVcbiAgICAgICAgaWYgKG1hdGNoKFwiO1wiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICBpc1N0YXRpYyA9IGZhbHNlO1xuICAgICAgICBnZW5lcmF0b3IgPSBtYXRjaChcIipcIik7XG4gICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgICAgICBpZiAoZ2VuZXJhdG9yKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93R2VuZXJhdG9ycykge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgLy8gc3RhdGljIGdlbmVyYXRvciBtZXRob2RzXG4gICAgICAgIGlmIChrZXkubmFtZSA9PT0gXCJzdGF0aWNcIiAmJiBtYXRjaChcIipcIikpIHtcbiAgICAgICAgICAgIGlmICghYWxsb3dHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZW5lcmF0b3IgPSB0cnVlO1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5Lm5hbWUgPT09IFwic3RhdGljXCIgJiYgbG9va2FoZWFkUHJvcGVydHlOYW1lKCkpIHtcbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgaXNTdGF0aWMgPSB0cnVlO1xuICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaChcIltcIik7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2VuZXJhdG9yKSB7XG4gICAgICAgICAgICBtZXRob2QgPSBwYXJzZUdlbmVyYXRvclByb3BlcnR5KGtleSwgbWFya2VyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1ldGhvZCA9IHRyeVBhcnNlTWV0aG9kRGVmaW5pdGlvbih0b2tlbiwga2V5LCBjb21wdXRlZCwgbWFya2VyLCBnZW5lcmF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICAgICAgbWV0aG9kLnN0YXRpYyA9IGlzU3RhdGljO1xuICAgICAgICAgICAgaWYgKG1ldGhvZC5raW5kID09PSBcImluaXRcIikge1xuICAgICAgICAgICAgICAgIG1ldGhvZC5raW5kID0gXCJtZXRob2RcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc1N0YXRpYykge1xuXG4gICAgICAgICAgICAgICAgaWYgKCFtZXRob2QuY29tcHV0ZWQgJiYgKG1ldGhvZC5rZXkubmFtZSB8fCAobWV0aG9kLmtleS52YWx1ZSAmJiBtZXRob2Qua2V5LnZhbHVlLnRvU3RyaW5nKCkpKSA9PT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCAhPT0gXCJtZXRob2RcIiB8fCAhbWV0aG9kLm1ldGhvZCB8fCBtZXRob2QudmFsdWUuZ2VuZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4sIE1lc3NhZ2VzLkNvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4sIE1lc3NhZ2VzLkR1cGxpY2F0ZUNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9IFwiY29uc3RydWN0b3JcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIChtZXRob2Qua2V5Lm5hbWUgfHwgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSA9PT0gXCJwcm90b3R5cGVcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4sIE1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWV0aG9kLnR5cGUgPSBhc3ROb2RlVHlwZXMuTWV0aG9kRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRob2QubWV0aG9kO1xuICAgICAgICAgICAgZGVsZXRlIG1ldGhvZC5zaG9ydGhhbmQ7XG4gICAgICAgICAgICBib2R5LnB1c2gobWV0aG9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV4KCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KHRvcE1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NCb2R5KGJvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0V4cHJlc3Npb24oKSB7XG4gICAgdmFyIGlkID0gbnVsbCwgc3VwZXJDbGFzcyA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdCwgY2xhc3NCb2R5O1xuXG4gICAgLy8gY2xhc3NlcyBydW4gaW4gc3RyaWN0IG1vZGVcbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNsYXNzXCIpO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZXh0ZW5kc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgc3VwZXJDbGFzcyA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpO1xuICAgIH1cblxuICAgIGNsYXNzQm9keSA9IHBhcnNlQ2xhc3NCb2R5KCk7XG4gICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVDbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNsYXNzRGVjbGFyYXRpb24oaWRlbnRpZmllcklzT3B0aW9uYWwpIHtcbiAgICB2YXIgaWQgPSBudWxsLCBzdXBlckNsYXNzID0gbnVsbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0LCBjbGFzc0JvZHk7XG5cbiAgICAvLyBjbGFzc2VzIHJ1biBpbiBzdHJpY3QgbW9kZVxuICAgIHN0cmljdCA9IHRydWU7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiY2xhc3NcIik7XG5cbiAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZXh0ZW5kc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgc3VwZXJDbGFzcyA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpO1xuICAgIH1cblxuICAgIGNsYXNzQm9keSA9IHBhcnNlQ2xhc3NCb2R5KCk7XG4gICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVDbGFzc0RlY2xhcmF0aW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpKTtcbn1cblxuLy8gMTUgUHJvZ3JhbVxuXG5mdW5jdGlvbiBwYXJzZVNvdXJjZUVsZW1lbnQoKSB7XG5cbiAgICB2YXIgYWxsb3dDbGFzc2VzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmNsYXNzZXMsXG4gICAgICAgIGFsbG93TW9kdWxlcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5tb2R1bGVzLFxuICAgICAgICBhbGxvd0Jsb2NrQmluZGluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMuYmxvY2tCaW5kaW5ncztcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcImV4cG9ydFwiOlxuICAgICAgICAgICAgICAgIGlmICghYWxsb3dNb2R1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvcnRcIjpcbiAgICAgICAgICAgICAgICBpZiAoIWFsbG93TW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dDbGFzc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNsYXNzRGVjbGFyYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY29uc3RcIjpcbiAgICAgICAgICAgIGNhc2UgXCJsZXRcIjpcbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dCbG9ja0JpbmRpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24obG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50cygpIHtcbiAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7XG4gICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkxpdGVyYWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdICsgMSwgdG9rZW4ucmFuZ2VbMV0gLSAxKTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc3RyaWN0XCIpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvZ3JhbSgpIHtcbiAgICB2YXIgYm9keSxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBpc01vZHVsZSA9ICEhZXh0cmEuZWNtYUZlYXR1cmVzLm1vZHVsZXM7XG5cbiAgICBza2lwQ29tbWVudCgpO1xuICAgIHBlZWsoKTtcbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICBzdHJpY3QgPSBpc01vZHVsZTtcblxuICAgIGJvZHkgPSBwYXJzZVNvdXJjZUVsZW1lbnRzKCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvZ3JhbShib2R5LCBpc01vZHVsZSA/IFwibW9kdWxlXCIgOiBcInNjcmlwdFwiKSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlclRva2VuTG9jYXRpb24oKSB7XG4gICAgdmFyIGksIGVudHJ5LCB0b2tlbiwgdG9rZW5zID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEudG9rZW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGVudHJ5ID0gZXh0cmEudG9rZW5zW2ldO1xuICAgICAgICB0b2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGVudHJ5LnJlZ2V4KSB7XG4gICAgICAgICAgICB0b2tlbi5yZWdleCA9IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBlbnRyeS5yZWdleC5wYXR0ZXJuLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBlbnRyeS5yZWdleC5mbGFnc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgICAgIHRva2VuLnJhbmdlID0gZW50cnkucmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICAgICAgdG9rZW4ubG9jID0gZW50cnkubG9jO1xuICAgICAgICB9XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICB9XG5cbiAgICBleHRyYS50b2tlbnMgPSB0b2tlbnM7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUb2tlbml6ZXJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHRva2VuaXplKGNvZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgdG9TdHJpbmcsXG4gICAgICAgIHRva2VucztcblxuICAgIHRvU3RyaW5nID0gU3RyaW5nO1xuICAgIGlmICh0eXBlb2YgY29kZSAhPT0gXCJzdHJpbmdcIiAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTtcbiAgICB9XG5cbiAgICBzb3VyY2UgPSBjb2RlO1xuICAgIGluZGV4ID0gMDtcbiAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwO1xuICAgIGxpbmVTdGFydCA9IDA7XG4gICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICBsb29rYWhlYWQgPSBudWxsO1xuICAgIHN0YXRlID0ge1xuICAgICAgICBhbGxvd0luOiB0cnVlLFxuICAgICAgICBsYWJlbFNldDoge30sXG4gICAgICAgIHBhcmVudGhlc2lzQ291bnQ6IDAsXG4gICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSxcbiAgICAgICAgaW5JdGVyYXRpb246IGZhbHNlLFxuICAgICAgICBpblN3aXRjaDogZmFsc2UsXG4gICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xLFxuICAgICAgICB5aWVsZEFsbG93ZWQ6IGZhbHNlLFxuICAgICAgICBjdXJseVN0YWNrOiBbXSxcbiAgICAgICAgY3VybHlMYXN0SW5kZXg6IDAsXG4gICAgICAgIGluSlNYU3ByZWFkQXR0cmlidXRlOiBmYWxzZSxcbiAgICAgICAgaW5KU1hDaGlsZDogZmFsc2UsXG4gICAgICAgIGluSlNYVGFnOiBmYWxzZVxuICAgIH07XG5cbiAgICBleHRyYSA9IHtcbiAgICAgICAgZWNtYUZlYXR1cmVzOiBkZWZhdWx0RmVhdHVyZXNcbiAgICB9O1xuXG4gICAgLy8gT3B0aW9ucyBtYXRjaGluZy5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2VucyBoZXJlLlxuICAgIG9wdGlvbnMudG9rZW5zID0gdHJ1ZTtcbiAgICBleHRyYS50b2tlbnMgPSBbXTtcbiAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmaWVsZHMgYXJlIG5lY2Vzc2FyeSB0byBjb21wdXRlIHRoZSBSZWdleCB0b2tlbnMuXG4gICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSAtMTtcbiAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IC0xO1xuXG4gICAgZXh0cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLnJhbmdlO1xuICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLmxvYztcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLnRvbGVyYW50KSB7XG4gICAgICAgIGV4dHJhLmVycm9ycyA9IFtdO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHBhcnNpbmcgZmxhZ3NcbiAgICBpZiAob3B0aW9ucy5lY21hRmVhdHVyZXMgJiYgdHlwZW9mIG9wdGlvbnMuZWNtYUZlYXR1cmVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlcyA9IG9wdGlvbnMuZWNtYUZlYXR1cmVzO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHBlZWsoKTtcbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHJldHVybiBleHRyYS50b2tlbnM7XG4gICAgICAgIH1cblxuICAgICAgICBsZXgoKTtcbiAgICAgICAgd2hpbGUgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2gobGV4RXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGJyZWFrIG9uIHRoZSBmaXJzdCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpbmZpbml0ZSBsb29wcy5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbGV4RXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpO1xuICAgICAgICB0b2tlbnMgPSBleHRyYS50b2tlbnM7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdG9rZW5zLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5lcnJvcnMgPSBleHRyYS5lcnJvcnM7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXh0cmEgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2Vucztcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcnNlclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gcGFyc2UoY29kZSwgb3B0aW9ucykge1xuICAgIHZhciBwcm9ncmFtLCB0b1N0cmluZztcblxuICAgIHRvU3RyaW5nID0gU3RyaW5nO1xuICAgIGlmICh0eXBlb2YgY29kZSAhPT0gXCJzdHJpbmdcIiAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTtcbiAgICB9XG5cbiAgICBzb3VyY2UgPSBjb2RlO1xuICAgIGluZGV4ID0gMDtcbiAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwO1xuICAgIGxpbmVTdGFydCA9IDA7XG4gICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICBsb29rYWhlYWQgPSBudWxsO1xuICAgIHN0YXRlID0ge1xuICAgICAgICBhbGxvd0luOiB0cnVlLFxuICAgICAgICBsYWJlbFNldDogbmV3IFN0cmluZ01hcCgpLFxuICAgICAgICBwYXJlbnRoZXNpc0NvdW50OiAwLFxuICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsXG4gICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLFxuICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMSxcbiAgICAgICAgeWllbGRBbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgY3VybHlTdGFjazogW10sXG4gICAgICAgIGN1cmx5TGFzdEluZGV4OiAwLFxuICAgICAgICBpbkpTWFNwcmVhZEF0dHJpYnV0ZTogZmFsc2UsXG4gICAgICAgIGluSlNYQ2hpbGQ6IGZhbHNlLFxuICAgICAgICBpbkpTWFRhZzogZmFsc2VcbiAgICB9O1xuXG4gICAgZXh0cmEgPSB7XG4gICAgICAgIGVjbWFGZWF0dXJlczogT2JqZWN0LmNyZWF0ZShkZWZhdWx0RmVhdHVyZXMpXG4gICAgfTtcblxuICAgIC8vIGZvciB0ZW1wbGF0ZSBzdHJpbmdzXG4gICAgc3RhdGUuY3VybHlTdGFjayA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5yYW5nZTtcbiAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gXCJib29sZWFuXCIpICYmIG9wdGlvbnMubG9jO1xuICAgICAgICBleHRyYS5hdHRhY2hDb21tZW50ID0gKHR5cGVvZiBvcHRpb25zLmF0dGFjaENvbW1lbnQgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLmF0dGFjaENvbW1lbnQ7XG5cbiAgICAgICAgaWYgKGV4dHJhLmxvYyAmJiBvcHRpb25zLnNvdXJjZSAhPT0gbnVsbCAmJiBvcHRpb25zLnNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleHRyYS5zb3VyY2UgPSB0b1N0cmluZyhvcHRpb25zLnNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9rZW5zID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLnRva2Vucykge1xuICAgICAgICAgICAgZXh0cmEudG9rZW5zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09IFwiYm9vbGVhblwiICYmIG9wdGlvbnMuY29tbWVudCkge1xuICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09IFwiYm9vbGVhblwiICYmIG9wdGlvbnMudG9sZXJhbnQpIHtcbiAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7XG4gICAgICAgICAgICBleHRyYS5yYW5nZSA9IHRydWU7XG4gICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgY29tbWVudEF0dGFjaG1lbnQucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCIpIHtcbiAgICAgICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlcyA9IHtcbiAgICAgICAgICAgICAgICBhcnJvd0Z1bmN0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBibG9ja0JpbmRpbmdzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZ2V4VUZsYWc6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVnZXhZRmxhZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVN0cmluZ3M6IHRydWUsXG4gICAgICAgICAgICAgICAgYmluYXJ5TGl0ZXJhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgb2N0YWxMaXRlcmFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1bmljb2RlQ29kZVBvaW50RXNjYXBlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdXBlckluRnVuY3Rpb25zOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRQYXJhbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVzdFBhcmFtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3JPZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsQ29tcHV0ZWRQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9iamVjdExpdGVyYWxTaG9ydGhhbmRNZXRob2RzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9iamVjdExpdGVyYWxTaG9ydGhhbmRQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9iamVjdExpdGVyYWxEdXBsaWNhdGVQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRvcnM6IHRydWUsXG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3R1cmluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjbGFzc2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1vZHVsZXM6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHBseSBwYXJzaW5nIGZsYWdzIGFmdGVyIHNvdXJjZVR5cGUgdG8gYWxsb3cgb3ZlcnJpZGluZ1xuICAgICAgICBpZiAob3B0aW9ucy5lY21hRmVhdHVyZXMgJiYgdHlwZW9mIG9wdGlvbnMuZWNtYUZlYXR1cmVzID09PSBcIm9iamVjdFwiKSB7XG5cbiAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBtb2R1bGUsIGF1Z21lbnQgdGhlIGVjbWFGZWF0dXJlc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gXCJtb2R1bGVcIikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMuZWNtYUZlYXR1cmVzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5lY21hRmVhdHVyZXNba2V5XSA9IG9wdGlvbnMuZWNtYUZlYXR1cmVzW2tleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlcyA9IG9wdGlvbnMuZWNtYUZlYXR1cmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBwcm9ncmFtID0gcGFyc2VQcm9ncmFtKCk7XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHByb2dyYW0uY29tbWVudHMgPSBleHRyYS5jb21tZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpO1xuICAgICAgICAgICAgcHJvZ3JhbS50b2tlbnMgPSBleHRyYS50b2tlbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZXJyb3JzID0gZXh0cmEuZXJyb3JzO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4dHJhID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydHMudmVyc2lvbiA9IHJlcXVpcmUoXCIuL3BhY2thZ2UuanNvblwiKS52ZXJzaW9uO1xuXG5leHBvcnRzLnRva2VuaXplID0gdG9rZW5pemU7XG5cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcblxuLy8gRGVlcCBjb3B5LlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmV4cG9ydHMuU3ludGF4ID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmFtZSwgdHlwZXMgPSB7fTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgICBmb3IgKG5hbWUgaW4gYXN0Tm9kZVR5cGVzKSB7XG4gICAgICAgIGlmIChhc3ROb2RlVHlwZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIHR5cGVzW25hbWVdID0gYXN0Tm9kZVR5cGVzW25hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuZnJlZXplID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZSh0eXBlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufSgpKTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBBIGZhY3RvcnkgZm9yIGNyZWF0aW5nIEFTVCBub2Rlc1xuICogQGF1dGhvciBGcmVkIEsuIFNjaG90dFxuICogQGNvcHlyaWdodCAyMDE0IEZyZWQgSy4gU2Nob3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGFzdE5vZGVUeXBlcyA9IHJlcXVpcmUoXCIuL2FzdC1ub2RlLXR5cGVzXCIpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBcnJheSBFeHByZXNzaW9uIEFTVE5vZGUgb3V0IG9mIGFuIGFycmF5IG9mIGVsZW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IGVsZW1lbnRzIEFuIGFycmF5IG9mIEFTVE5vZGUgZWxlbWVudHNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBhcnJheSBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbihlbGVtZW50cykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbixcbiAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50c1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQXJyb3cgRnVuY3Rpb24gRXhwcmVzc2lvbiBBU1ROb2RlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJhbXMgVGhlIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgZnVuY3Rpb24gYm9keVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwcmVzc2lvbiBUcnVlIGlmIHRoZSBhcnJvdyBmdW5jdGlvbiBpcyBjcmVhdGVkIHZpYSBhbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgQWx3YXlzIGZhbHNlIGZvciBkZWNsYXJhdGlvbnMsIGJ1dCBrZXB0IGhlcmUgdG8gYmUgaW4gc3luYyB3aXRoXG4gICAgICogICAgICBGdW5jdGlvbkV4cHJlc3Npb24gb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChwYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgZ2VuZXJhdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gYXNzaWdubWVudCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBvcGVyYXRvciBUaGUgYXNzaWdubWVudCBvcGVyYXRvclxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGFzc2lnbm1lbnQgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uOiBmdW5jdGlvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lvbixcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gYXNzaWdubWVudCBwYXR0ZXJuIChkZWZhdWx0IHBhcmFtZXRlcnMpXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYXNzaWdubWVudCBwYXR0ZXJuXG4gICAgICovXG4gICAgY3JlYXRlQXNzaWdubWVudFBhdHRlcm46IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm4sXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgYmluYXJ5IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9wZXJhdG9yIFRoZSBhc3NpZ25tZW50IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYmluYXJ5IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVCaW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHtcbiAgICAgICAgdmFyIHR5cGUgPSAob3BlcmF0b3IgPT09IFwifHxcIiB8fCBvcGVyYXRvciA9PT0gXCImJlwiKSA/IGFzdE5vZGVUeXBlcy5Mb2dpY2FsRXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgICAgICAgIGFzdE5vZGVUeXBlcy5CaW5hcnlFeHByZXNzaW9uO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBibG9jayBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGJsb2NrIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYmxvY2sgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5CbG9ja1N0YXRlbWVudCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBicmVhayBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxhYmVsIFRoZSBicmVhayBzdGF0ZW1lbnQgbGFiZWxcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGJyZWFrIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkJyZWFrU3RhdGVtZW50LFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY2FsbCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjYWxsZWUgVGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBhcmdzIEFuIGFycmF5IG9mIEFTVE5vZGVzIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBjYWxsIGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24oY2FsbGVlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2FsbEV4cHJlc3Npb24sXG4gICAgICAgICAgICBjYWxsZWU6IGNhbGxlZSxcbiAgICAgICAgICAgIFwiYXJndW1lbnRzXCI6IGFyZ3NcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjYXRjaCBjbGF1c2UvYmxvY2tcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtIEFueSBjYXRjaCBjbGF1c2UgZXhlcHRpb24vY29uZGl0aW9uYWwgcGFyYW1ldGVyIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBjYXRjaCBibG9jayBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgY2F0Y2ggY2xhdXNlXG4gICAgICovXG4gICAgY3JlYXRlQ2F0Y2hDbGF1c2U6IGZ1bmN0aW9uKHBhcmFtLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2F0Y2hDbGF1c2UsXG4gICAgICAgICAgICBwYXJhbTogcGFyYW0sXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGNsYXNzIGJvZHkuXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBub2RlIHJlcHJlc2VudGluZyB0aGUgYm9keSBvZiB0aGUgY2xhc3MuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBib2R5LlxuICAgICAqL1xuICAgIGNyZWF0ZUNsYXNzQm9keTogZnVuY3Rpb24oYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkNsYXNzQm9keSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlQ2xhc3NFeHByZXNzaW9uOiBmdW5jdGlvbihpZCwgc3VwZXJDbGFzcywgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkNsYXNzRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHN1cGVyQ2xhc3M6IHN1cGVyQ2xhc3MsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUNsYXNzRGVjbGFyYXRpb246IGZ1bmN0aW9uKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2xhc3NEZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHN1cGVyQ2xhc3M6IHN1cGVyQ2xhc3MsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZU1ldGhvZERlZmluaXRpb246IGZ1bmN0aW9uKHByb3BlcnR5VHlwZSwga2luZCwga2V5LCB2YWx1ZSwgY29tcHV0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5NZXRob2REZWZpbml0aW9uLFxuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICAgICAgXCJzdGF0aWNcIjogcHJvcGVydHlUeXBlID09PSBcInN0YXRpY1wiLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGNvbXB1dGVkXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGVzdCBUaGUgY29uZGl0aW9uYWwgdG8gZXZhbHVhdGVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNvbnNlcXVlbnQgVGhlIGNvZGUgdG8gYmUgcnVuIGlmIHRoZSB0ZXN0IHJldHVybnMgdHJ1ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYWx0ZXJuYXRlIFRoZSBjb2RlIHRvIGJlIHJ1biBpZiB0aGUgdGVzdCByZXR1cm5zIGZhbHNlXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgY29uZGl0aW9uYWwgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24odGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQsXG4gICAgICAgICAgICBhbHRlcm5hdGU6IGFsdGVybmF0ZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbnRpbnVlIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7P0FTVE5vZGV9IGxhYmVsIFRoZSBvcHRpb25hbCBjb250aW51ZSBsYWJlbCAobnVsbCBpZiBub3Qgc2V0KVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgY29udGludWUgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ29udGludWVTdGF0ZW1lbnQsXG4gICAgICAgICAgICBsYWJlbDogbGFiZWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBkZWJ1Z2dlciBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGRlYnVnZ2VyIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5EZWJ1Z2dlclN0YXRlbWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBlbXB0eSBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gZW1wdHkgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRW1wdHlTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkVtcHR5U3RhdGVtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cHJlc3Npb25TdGF0ZW1lbnQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgd2hpbGUgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSB3aGlsZSBjb25kaXRpb25hbFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgd2hpbGUgbG9vcCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgd2hpbGUgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHRlc3QsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5XaGlsZVN0YXRlbWVudCxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZG8uLndoaWxlIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGVzdCBUaGUgZG8uLndoaWxlIGNvbmRpdGlvbmFsXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBkby4ud2hpbGUgbG9vcCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZG8uLndoaWxlIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHRlc3QsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Eb1doaWxlU3RhdGVtZW50LFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3RcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmb3Igc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0IFRoZSBpbml0aWFsaXphdGlvbiBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBjb25kaXRpb25hbCB0ZXN0IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHVwZGF0ZSBUaGUgdXBkYXRlIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZm9yIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUZvclN0YXRlbWVudDogZnVuY3Rpb24oaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRm9yU3RhdGVtZW50LFxuICAgICAgICAgICAgaW5pdDogaW5pdCxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmb3IuLmluIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgbGVmdC1zaWRlIHZhcmlhYmxlIGZvciB0aGUgcHJvcGVydHkgbmFtZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0LXNpZGUgb2JqZWN0XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGZvci4uaW4gc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRm9ySW5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRm9ySW5TdGF0ZW1lbnQsXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIGVhY2g6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZm9yLi5vZiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQtc2lkZSB2YXJpYWJsZSBmb3IgdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgcmlnaHQtc2lkZSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZm9yLi5vZiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVGb3JPZlN0YXRlbWVudDogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Gb3JPZlN0YXRlbWVudCxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZnVuY3Rpb24gZGVjbGFyYXRpb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGlkIFRoZSBmdW5jdGlvbiBuYW1lXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJhbXMgVGhlIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgZnVuY3Rpb24gYm9keVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZ2VuZXJhdG9yIFRydWUgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yLCBmYWxzZSBpZiBub3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBleHByZXNzaW9uIFRydWUgaWYgdGhlIGZ1bmN0aW9uIGlzIGNyZWF0ZWQgdmlhIGFuIGV4cHJlc3Npb24uXG4gICAgICogICAgICBBbHdheXMgZmFsc2UgZm9yIGRlY2xhcmF0aW9ucywgYnV0IGtlcHQgaGVyZSB0byBiZSBpbiBzeW5jIHdpdGhcbiAgICAgKiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXG4gICAgICovXG4gICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvciwgZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkZ1bmN0aW9uRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3I6ICEhZ2VuZXJhdG9yLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogISFleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZnVuY3Rpb24gZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtcyBUaGUgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBmdW5jdGlvbiBib2R5XG4gICAgICogQHBhcmFtIHtib29sZWFufSBnZW5lcmF0b3IgVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IsIGZhbHNlIGlmIG5vdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cHJlc3Npb24gVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgY3JlYXRlZCB2aWEgYW4gZXhwcmVzc2lvbi5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiBkZWNsYXJhdGlvblxuICAgICAqL1xuICAgIGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvciwgZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkZ1bmN0aW9uRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIGdlbmVyYXRvcjogISFnZW5lcmF0b3IsXG4gICAgICAgICAgICBleHByZXNzaW9uOiAhIWV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gaWRlbnRpZmllclxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbmFtZSBUaGUgaWRlbnRpZmllciBuYW1lXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGFuIGlkZW50aWZpZXJcbiAgICAgKi9cbiAgICBjcmVhdGVJZGVudGlmaWVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcixcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gaWYgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBpZiBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjb25zZXF1ZW50IFRoZSBjb25zZXF1ZW50IGlmIHN0YXRlbWVudCB0byBydW5cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFsdGVybmF0ZSB0aGUgXCJlbHNlXCIgYWx0ZXJuYXRlIHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBpZiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVJZlN0YXRlbWVudDogZnVuY3Rpb24odGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSWZTdGF0ZW1lbnQsXG4gICAgICAgICAgICB0ZXN0OiB0ZXN0LFxuICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCxcbiAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJuYXRlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgbGFiZWxlZCBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxhYmVsIFRoZSBzdGF0ZW1lbnQgbGFiZWxcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGxhYmVsZWQgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBsYWJlbGVkIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxhYmVsLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTGFiZWxlZFN0YXRlbWVudCxcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgbGl0ZXJhbCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdG9rZW4gVGhlIEFTVE5vZGUgdG9rZW5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgY29kZSB0byBnZXQgdGhlIGxpdGVyYWwgZnJvbVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgbmV3IGxpdGVyYWxcbiAgICAgKi9cbiAgICBjcmVhdGVMaXRlcmFsRnJvbVNvdXJjZTogZnVuY3Rpb24odG9rZW4sIHNvdXJjZSkge1xuICAgICAgICB2YXIgbm9kZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5MaXRlcmFsLFxuICAgICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlLFxuICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2UodG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdKVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaGF2ZSByZWdleCBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICh0b2tlbi5yZWdleCkge1xuICAgICAgICAgICAgbm9kZS5yZWdleCA9IHRva2VuLnJlZ2V4O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHRlbXBsYXRlIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgRGF0YSBvbiB0aGUgZWxlbWVudCB2YWx1ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZS5yYXcgVGhlIHJhdyB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUuY29va2VkIFRoZSBwcm9jZXNzZWQgdGVtcGxhdGUgc3RyaW5nXG4gICAgICogQHBhcmFtIHtib29sZWFufSB0YWlsIFRydWUgaWYgdGhpcyBpcyB0aGUgZmluYWwgZWxlbWVudCBpbiBhIHRlbXBsYXRlIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgdGVtcGxhdGUgc3RyaW5nIGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVUZW1wbGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKHZhbHVlLCB0YWlsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVGVtcGxhdGVFbGVtZW50LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdGFpbDogdGFpbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSB0ZW1wbGF0ZSBsaXRlcmFsXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IHF1YXNpcyBBbiBhcnJheSBvZiB0aGUgdGVtcGxhdGUgc3RyaW5nIGVsZW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IGV4cHJlc3Npb25zIEFuIGFycmF5IG9mIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZXhwcmVzc2lvbnNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIHRlbXBsYXRlIHN0cmluZ1xuICAgICAqL1xuICAgIGNyZWF0ZVRlbXBsYXRlTGl0ZXJhbDogZnVuY3Rpb24ocXVhc2lzLCBleHByZXNzaW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRlbXBsYXRlTGl0ZXJhbCxcbiAgICAgICAgICAgIHF1YXNpczogcXVhc2lzLFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3ByZWFkIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSBhcnJheSBiZWluZyBzcHJlYWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBzcHJlYWQgZWxlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVNwcmVhZEVsZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3ByZWFkRWxlbWVudCxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSB0YWdnZWQgdGVtcGxhdGUgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGFnIFRoZSB0YWcgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcXVhc2kgQSBUZW1wbGF0ZUxpdGVyYWwgQVNUTm9kZSByZXByZXNlbnRpbmdcbiAgICAgKiB0aGUgdGVtcGxhdGUgc3RyaW5nIGl0c2VsZi5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIHRhZ2dlZCB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIGNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogZnVuY3Rpb24odGFnLCBxdWFzaSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHRhZzogdGFnLFxuICAgICAgICAgICAgcXVhc2k6IHF1YXNpXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgbWVtYmVyIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYWNjZXNzb3IgVGhlIG1lbWJlciBhY2Nlc3MgbWV0aG9kIChicmFja2V0IG9yIHBlcmlvZClcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9iamVjdCBUaGUgb2JqZWN0IGJlaW5nIHJlZmVyZW5jZWRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IFRoZSBvYmplY3QtcHJvcGVydHkgYmVpbmcgcmVmZXJlbmNlZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIG1lbWJlciBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24oYWNjZXNzb3IsIG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5NZW1iZXJFeHByZXNzaW9uLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGFjY2Vzc29yID09PSBcIltcIixcbiAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgbmV3IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNhbGxlZSBUaGUgY29uc3RydWN0b3IgZm9yIHRoZSBuZXcgb2JqZWN0IHR5cGVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3MgVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgbmV3IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVOZXdFeHByZXNzaW9uOiBmdW5jdGlvbihjYWxsZWUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uLFxuICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsXG4gICAgICAgICAgICBcImFyZ3VtZW50c1wiOiBhcmdzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgbmV3IG9iamVjdCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IHByb3BlcnRpZXMgQW4gYXJyYXkgb2YgQVNUTm9kZXMgdGhhdCByZXByZXNlbnQgYWxsIG9iamVjdFxuICAgICAqICAgICAgcHJvcGVydGllcyBhbmQgYXNzb2NpYXRlZCB2YWx1ZXNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBuZXcgb2JqZWN0IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBwb3N0Zml4IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgVGhlIHBvc3RmaXggb3BlcmF0b3IgKFwiKytcIiwgXCItLVwiLCBldGMuKVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIG9wZXJhdG9yIGFyZ3VtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgcG9zdGZpeCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlUG9zdGZpeEV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlVwZGF0ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsXG4gICAgICAgICAgICBwcmVmaXg6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVudGlyZSBwcm9ncmFtXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBwcm9ncmFtIGJvZHlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlVHlwZSBFaXRoZXIgXCJtb2R1bGVcIiBvciBcInNjcmlwdFwiLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBlbnRpcmUgcHJvZ3JhbVxuICAgICAqL1xuICAgIGNyZWF0ZVByb2dyYW06IGZ1bmN0aW9uKGJvZHksIHNvdXJjZVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Qcm9ncmFtLFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIHNvdXJjZVR5cGU6IHNvdXJjZVR5cGVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmQgVGhlIHR5cGUgb2YgcHJvcGVydHkgcmVwcmVzZW50ZWQgKFwiZ2V0XCIsIFwic2V0XCIsIGV0Yy4pXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBrZXkgVGhlIHByb3BlcnR5IGtleVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdmFsdWUgVGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWV0aG9kIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIGFsc28gYSBtZXRob2QgKHZhbHVlIGlzIGEgZnVuY3Rpb24pXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaG9ydGhhbmQgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgc2hvcnRoYW5kXG4gICAgICogQHBhcmFtIHtib29sZWFufSBjb21wdXRlZCBUcnVlIGlmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBoYXMgYmVlbiBjb21wdXRlZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICAgKi9cbiAgICBjcmVhdGVQcm9wZXJ0eTogZnVuY3Rpb24oa2luZCwga2V5LCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQsIGNvbXB1dGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUHJvcGVydHksXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIHNob3J0aGFuZDogc2hvcnRoYW5kLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGNvbXB1dGVkXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVzdCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgcmVzdCBhcmd1bWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHJlc3QgZWxlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVJlc3RFbGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5SZXN0RWxlbWVudCxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHJldHVybiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0gez9BU1ROb2RlfSBhcmd1bWVudCBUaGUgcmV0dXJuIGFyZ3VtZW50LCBudWxsIGlmIG5vIGFyZ3VtZW50IGlzIHByb3ZpZGVkXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgcmV0dXJuIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVJldHVyblN0YXRlbWVudDogZnVuY3Rpb24oYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5SZXR1cm5TdGF0ZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9uc1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBleHByZXNzaW9ucyBBbiBhcnJheSBjb250YWluaW5nIGVhY2ggZXhwcmVzc2lvbiwgaW4gb3JkZXJcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9uc1xuICAgICAqL1xuICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24oZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5TZXF1ZW5jZUV4cHJlc3Npb24sXG4gICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lvbnNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2Ygc3VwZXJcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgc3VwZXJcbiAgICAgKi9cbiAgICBjcmVhdGVTdXBlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3VwZXJcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBzd2l0Y2ggY2FzZSBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGNhc2UgdmFsdWUgdG8gdGVzdCBhZ2FpbnN0IHRoZSBzd2l0Y2ggdmFsdWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNvbnNlcXVlbnQgVGhlIGNvbnNlcXVlbnQgY2FzZSBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBzd2l0Y2ggY2FzZVxuICAgICAqL1xuICAgIGNyZWF0ZVN3aXRjaENhc2U6IGZ1bmN0aW9uKHRlc3QsIGNvbnNlcXVlbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Td2l0Y2hDYXNlLFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBzd2l0Y2ggc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBkaXNjcmltaW5hbnQgQW4gZXhwcmVzc2lvbiB0byB0ZXN0IGFnYWluc3QgZWFjaCBjYXNlIHZhbHVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IGNhc2VzIEFuIGFycmF5IG9mIHN3aXRjaCBjYXNlIHN0YXRlbWVudHNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBzd2l0Y2ggc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlU3dpdGNoU3RhdGVtZW50OiBmdW5jdGlvbihkaXNjcmltaW5hbnQsIGNhc2VzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3dpdGNoU3RhdGVtZW50LFxuICAgICAgICAgICAgZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsXG4gICAgICAgICAgICBjYXNlczogY2FzZXNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB0aGlzIHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHRoaXMgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlVGhpc0V4cHJlc3Npb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRoaXNFeHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhyb3cgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgYXJndW1lbnQgdG8gdGhyb3dcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB0aHJvdyBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24oYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UaHJvd1N0YXRlbWVudCxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHRyeSBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJsb2NrIFRoZSB0cnkgYmxvY2tcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGhhbmRsZXIgQSBjYXRjaCBoYW5kbGVyXG4gICAgICogQHBhcmFtIHs/QVNUTm9kZX0gZmluYWxpemVyIFRoZSBmaW5hbCBjb2RlIGJsb2NrIHRvIHJ1biBhZnRlciB0aGUgdHJ5L2NhdGNoIGhhcyBydW5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB0cnkgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlVHJ5U3RhdGVtZW50OiBmdW5jdGlvbihibG9jaywgaGFuZGxlciwgZmluYWxpemVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVHJ5U3RhdGVtZW50LFxuICAgICAgICAgICAgYmxvY2s6IGJsb2NrLFxuICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgIGZpbmFsaXplcjogZmluYWxpemVyXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdW5hcnkgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciBUaGUgdW5hcnkgb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSB1bmFyeSBvcGVyYW5kXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdW5hcnkgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZVVuYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24ob3BlcmF0b3IsIGFyZ3VtZW50KSB7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCIrK1wiIHx8IG9wZXJhdG9yID09PSBcIi0tXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlVwZGF0ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VbmFyeUV4cHJlc3Npb24sXG4gICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsXG4gICAgICAgICAgICBwcmVmaXg6IHRydWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB2YXJpYWJsZSBkZWNsYXJhdGlvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBkZWNsYXJhdGlvbnMgQW4gYXJyYXkgb2YgdmFyaWFibGUgZGVjbGFyYXRpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmQgVGhlIGtpbmQgb2YgdmFyaWFibGUgY3JlYXRlZCAoXCJ2YXJcIiwgXCJsZXRcIiwgZXRjLilcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB2YXJpYWJsZSBkZWNsYXJhdGlvblxuICAgICAqL1xuICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb246IGZ1bmN0aW9uKGRlY2xhcmF0aW9ucywga2luZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlZhcmlhYmxlRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnM6IGRlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgIGtpbmQ6IGtpbmRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB2YXJpYWJsZSBkZWNsYXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpZCBUaGUgdmFyaWFibGUgSURcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGluaXQgVGhlIHZhcmlhYmxlJ3MgaW5pdGlhbCB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHZhcmlhYmxlIGRlY2xhcmF0b3JcbiAgICAgKi9cbiAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0b3I6IGZ1bmN0aW9uKGlkLCBpbml0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVmFyaWFibGVEZWNsYXJhdG9yLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgaW5pdDogaW5pdFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHdpdGggc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBvYmplY3QgVGhlIHdpdGggc3RhdGVtZW50IG9iamVjdCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSB3aXRoIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgd2l0aCBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVXaXRoU3RhdGVtZW50OiBmdW5jdGlvbihvYmplY3QsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5XaXRoU3RhdGVtZW50LFxuICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZVlpZWxkRXhwcmVzc2lvbjogZnVuY3Rpb24oYXJndW1lbnQsIGRlbGVnYXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuWWllbGRFeHByZXNzaW9uLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50IHx8IG51bGwsXG4gICAgICAgICAgICBkZWxlZ2F0ZTogZGVsZWdhdGVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYQXR0cmlidXRlOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEF0dHJpYnV0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUgfHwgbnVsbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hTcHJlYWRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYU3ByZWFkQXR0cmlidXRlLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWElkZW50aWZpZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hJZGVudGlmaWVyLFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hOYW1lc3BhY2VkTmFtZTogZnVuY3Rpb24obmFtZXNwYWNlLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYTmFtZXNwYWNlZE5hbWUsXG4gICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE1lbWJlckV4cHJlc3Npb24sXG4gICAgICAgICAgICBvYmplY3Q6IG9iamVjdCxcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hFbGVtZW50OiBmdW5jdGlvbihvcGVuaW5nRWxlbWVudCwgY2xvc2luZ0VsZW1lbnQsIGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYRWxlbWVudCxcbiAgICAgICAgICAgIG9wZW5pbmdFbGVtZW50OiBvcGVuaW5nRWxlbWVudCxcbiAgICAgICAgICAgIGNsb3NpbmdFbGVtZW50OiBjbG9zaW5nRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hFbXB0eUV4cHJlc3Npb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEVtcHR5RXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hFeHByZXNzaW9uQ29udGFpbmVyOiBmdW5jdGlvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYT3BlbmluZ0VsZW1lbnQ6IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYT3BlbmluZ0VsZW1lbnQsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgc2VsZkNsb3Npbmc6IHNlbGZDbG9zaW5nLFxuICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hDbG9zaW5nRWxlbWVudDogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWENsb3NpbmdFbGVtZW50LFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uKGxvY2FsLCBleHBvcnRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydFNwZWNpZmllcixcbiAgICAgICAgICAgIGV4cG9ydGVkOiBleHBvcnRlZCB8fCBsb2NhbCxcbiAgICAgICAgICAgIGxvY2FsOiBsb2NhbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBmdW5jdGlvbihsb2NhbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkltcG9ydERlZmF1bHRTcGVjaWZpZXIsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiBmdW5jdGlvbihsb2NhbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcixcbiAgICAgICAgICAgIGxvY2FsOiBsb2NhbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwb3J0TmFtZWREZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsYXJhdGlvbixcbiAgICAgICAgICAgIHNwZWNpZmllcnM6IHNwZWNpZmllcnMsXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246IGZ1bmN0aW9uKGRlY2xhcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uLFxuICAgICAgICAgICAgZGVjbGFyYXRpb246IGRlY2xhcmF0aW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4cG9ydEFsbERlY2xhcmF0aW9uOiBmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5FeHBvcnRBbGxEZWNsYXJhdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUltcG9ydFNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwsIGltcG9ydGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSW1wb3J0U3BlY2lmaWVyLFxuICAgICAgICAgICAgbG9jYWw6IGxvY2FsIHx8IGltcG9ydGVkLFxuICAgICAgICAgICAgaW1wb3J0ZWQ6IGltcG9ydGVkXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUltcG9ydERlY2xhcmF0aW9uOiBmdW5jdGlvbihzcGVjaWZpZXJzLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnREZWNsYXJhdGlvbixcbiAgICAgICAgICAgIHNwZWNpZmllcnM6IHNwZWNpZmllcnMsXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH1cblxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBUaGUgQVNUIG5vZGUgdHlwZXMgcHJvZHVjZWQgYnkgdGhlIHBhcnNlci5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIsXG4gICAgQXNzaWdubWVudFBhdHRlcm46IFwiQXNzaWdubWVudFBhdHRlcm5cIixcbiAgICBBcnJheUV4cHJlc3Npb246IFwiQXJyYXlFeHByZXNzaW9uXCIsXG4gICAgQXJyYXlQYXR0ZXJuOiBcIkFycmF5UGF0dGVyblwiLFxuICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIsXG4gICAgQmxvY2tTdGF0ZW1lbnQ6IFwiQmxvY2tTdGF0ZW1lbnRcIixcbiAgICBCaW5hcnlFeHByZXNzaW9uOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICBCcmVha1N0YXRlbWVudDogXCJCcmVha1N0YXRlbWVudFwiLFxuICAgIENhbGxFeHByZXNzaW9uOiBcIkNhbGxFeHByZXNzaW9uXCIsXG4gICAgQ2F0Y2hDbGF1c2U6IFwiQ2F0Y2hDbGF1c2VcIixcbiAgICBDbGFzc0JvZHk6IFwiQ2xhc3NCb2R5XCIsXG4gICAgQ2xhc3NEZWNsYXJhdGlvbjogXCJDbGFzc0RlY2xhcmF0aW9uXCIsXG4gICAgQ2xhc3NFeHByZXNzaW9uOiBcIkNsYXNzRXhwcmVzc2lvblwiLFxuICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIixcbiAgICBDb250aW51ZVN0YXRlbWVudDogXCJDb250aW51ZVN0YXRlbWVudFwiLFxuICAgIERvV2hpbGVTdGF0ZW1lbnQ6IFwiRG9XaGlsZVN0YXRlbWVudFwiLFxuICAgIERlYnVnZ2VyU3RhdGVtZW50OiBcIkRlYnVnZ2VyU3RhdGVtZW50XCIsXG4gICAgRW1wdHlTdGF0ZW1lbnQ6IFwiRW1wdHlTdGF0ZW1lbnRcIixcbiAgICBFeHByZXNzaW9uU3RhdGVtZW50OiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICBGb3JTdGF0ZW1lbnQ6IFwiRm9yU3RhdGVtZW50XCIsXG4gICAgRm9ySW5TdGF0ZW1lbnQ6IFwiRm9ySW5TdGF0ZW1lbnRcIixcbiAgICBGb3JPZlN0YXRlbWVudDogXCJGb3JPZlN0YXRlbWVudFwiLFxuICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogXCJGdW5jdGlvbkV4cHJlc3Npb25cIixcbiAgICBJZGVudGlmaWVyOiBcIklkZW50aWZpZXJcIixcbiAgICBJZlN0YXRlbWVudDogXCJJZlN0YXRlbWVudFwiLFxuICAgIExpdGVyYWw6IFwiTGl0ZXJhbFwiLFxuICAgIExhYmVsZWRTdGF0ZW1lbnQ6IFwiTGFiZWxlZFN0YXRlbWVudFwiLFxuICAgIExvZ2ljYWxFeHByZXNzaW9uOiBcIkxvZ2ljYWxFeHByZXNzaW9uXCIsXG4gICAgTWVtYmVyRXhwcmVzc2lvbjogXCJNZW1iZXJFeHByZXNzaW9uXCIsXG4gICAgTWV0aG9kRGVmaW5pdGlvbjogXCJNZXRob2REZWZpbml0aW9uXCIsXG4gICAgTmV3RXhwcmVzc2lvbjogXCJOZXdFeHByZXNzaW9uXCIsXG4gICAgT2JqZWN0RXhwcmVzc2lvbjogXCJPYmplY3RFeHByZXNzaW9uXCIsXG4gICAgT2JqZWN0UGF0dGVybjogXCJPYmplY3RQYXR0ZXJuXCIsXG4gICAgUHJvZ3JhbTogXCJQcm9ncmFtXCIsXG4gICAgUHJvcGVydHk6IFwiUHJvcGVydHlcIixcbiAgICBSZXN0RWxlbWVudDogXCJSZXN0RWxlbWVudFwiLFxuICAgIFJldHVyblN0YXRlbWVudDogXCJSZXR1cm5TdGF0ZW1lbnRcIixcbiAgICBTZXF1ZW5jZUV4cHJlc3Npb246IFwiU2VxdWVuY2VFeHByZXNzaW9uXCIsXG4gICAgU3ByZWFkRWxlbWVudDogXCJTcHJlYWRFbGVtZW50XCIsXG4gICAgU3VwZXI6IFwiU3VwZXJcIixcbiAgICBTd2l0Y2hDYXNlOiBcIlN3aXRjaENhc2VcIixcbiAgICBTd2l0Y2hTdGF0ZW1lbnQ6IFwiU3dpdGNoU3RhdGVtZW50XCIsXG4gICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBcIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvblwiLFxuICAgIFRlbXBsYXRlRWxlbWVudDogXCJUZW1wbGF0ZUVsZW1lbnRcIixcbiAgICBUZW1wbGF0ZUxpdGVyYWw6IFwiVGVtcGxhdGVMaXRlcmFsXCIsXG4gICAgVGhpc0V4cHJlc3Npb246IFwiVGhpc0V4cHJlc3Npb25cIixcbiAgICBUaHJvd1N0YXRlbWVudDogXCJUaHJvd1N0YXRlbWVudFwiLFxuICAgIFRyeVN0YXRlbWVudDogXCJUcnlTdGF0ZW1lbnRcIixcbiAgICBVbmFyeUV4cHJlc3Npb246IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgVXBkYXRlRXhwcmVzc2lvbjogXCJVcGRhdGVFeHByZXNzaW9uXCIsXG4gICAgVmFyaWFibGVEZWNsYXJhdGlvbjogXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIsXG4gICAgVmFyaWFibGVEZWNsYXJhdG9yOiBcIlZhcmlhYmxlRGVjbGFyYXRvclwiLFxuICAgIFdoaWxlU3RhdGVtZW50OiBcIldoaWxlU3RhdGVtZW50XCIsXG4gICAgV2l0aFN0YXRlbWVudDogXCJXaXRoU3RhdGVtZW50XCIsXG4gICAgWWllbGRFeHByZXNzaW9uOiBcIllpZWxkRXhwcmVzc2lvblwiLFxuICAgIEpTWElkZW50aWZpZXI6IFwiSlNYSWRlbnRpZmllclwiLFxuICAgIEpTWE5hbWVzcGFjZWROYW1lOiBcIkpTWE5hbWVzcGFjZWROYW1lXCIsXG4gICAgSlNYTWVtYmVyRXhwcmVzc2lvbjogXCJKU1hNZW1iZXJFeHByZXNzaW9uXCIsXG4gICAgSlNYRW1wdHlFeHByZXNzaW9uOiBcIkpTWEVtcHR5RXhwcmVzc2lvblwiLFxuICAgIEpTWEV4cHJlc3Npb25Db250YWluZXI6IFwiSlNYRXhwcmVzc2lvbkNvbnRhaW5lclwiLFxuICAgIEpTWEVsZW1lbnQ6IFwiSlNYRWxlbWVudFwiLFxuICAgIEpTWENsb3NpbmdFbGVtZW50OiBcIkpTWENsb3NpbmdFbGVtZW50XCIsXG4gICAgSlNYT3BlbmluZ0VsZW1lbnQ6IFwiSlNYT3BlbmluZ0VsZW1lbnRcIixcbiAgICBKU1hBdHRyaWJ1dGU6IFwiSlNYQXR0cmlidXRlXCIsXG4gICAgSlNYU3ByZWFkQXR0cmlidXRlOiBcIkpTWFNwcmVhZEF0dHJpYnV0ZVwiLFxuICAgIEpTWFRleHQ6IFwiSlNYVGV4dFwiLFxuICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogXCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb25cIixcbiAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIixcbiAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiLFxuICAgIEV4cG9ydFNwZWNpZmllcjogXCJFeHBvcnRTcGVjaWZpZXJcIixcbiAgICBJbXBvcnREZWNsYXJhdGlvbjogXCJJbXBvcnREZWNsYXJhdGlvblwiLFxuICAgIEltcG9ydFNwZWNpZmllcjogXCJJbXBvcnRTcGVjaWZpZXJcIixcbiAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBcIkltcG9ydERlZmF1bHRTcGVjaWZpZXJcIixcbiAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6IFwiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyXCJcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQXR0YWNoZXMgY29tbWVudHMgdG8gdGhlIEFTVC5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNSBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBhc3ROb2RlVHlwZXMgPSByZXF1aXJlKFwiLi9hc3Qtbm9kZS10eXBlc1wiKTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByaXZhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBleHRyYSA9IHtcbiAgICAgICAgdHJhaWxpbmdDb21tZW50czogW10sXG4gICAgICAgIGxlYWRpbmdDb21tZW50czogW10sXG4gICAgICAgIGJvdHRvbVJpZ2h0U3RhY2s6IFtdXG4gICAgfTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBbXTtcbiAgICB9LFxuXG4gICAgYWRkQ29tbWVudDogZnVuY3Rpb24oY29tbWVudCkge1xuICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgIH0sXG5cbiAgICBwcm9jZXNzQ29tbWVudDogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICB2YXIgbGFzdENoaWxkLFxuICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyxcbiAgICAgICAgICAgIGk7XG5cbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlByb2dyYW0pIHtcbiAgICAgICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIElmIHRoZSBmaXJzdCBjb21tZW50IGluIHRyYWlsaW5nQ29tbWVudHMgY29tZXMgYWZ0ZXIgdGhlXG4gICAgICAgICAgICAgKiBjdXJyZW50IG5vZGUsIHRoZW4gd2UncmUgZ29vZCAtIGFsbCBjb21tZW50cyBpbiB0aGUgYXJyYXkgd2lsbFxuICAgICAgICAgICAgICogY29tZSBhZnRlciB0aGUgbm9kZSBhbmQgc28gaXQncyBzYWZlIHRvIGFkZCB0aGVuIGFzIG9mZmljaWFsXG4gICAgICAgICAgICAgKiB0cmFpbGluZ0NvbW1lbnRzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogT3RoZXJ3aXNlLCBpZiB0aGUgZmlyc3QgY29tbWVudCBkb2Vzbid0IGNvbWUgYWZ0ZXIgdGhlXG4gICAgICAgICAgICAgICAgICogY3VycmVudCBub2RlLCB0aGF0IG1lYW5zIHdlIGhhdmUgYSBtaXggb2YgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgICAgICAgICAgICAgICAgKiBjb21tZW50cyBpbiB0aGUgYXJyYXkgYW5kIHRoYXQgbGVhZGluZ0NvbW1lbnRzIGNvbnRhaW5zIHRoZVxuICAgICAgICAgICAgICAgICAqIHNhbWUgaXRlbXMgYXMgdHJhaWxpbmdDb21tZW50cy4gUmVzZXQgdHJhaWxpbmdDb21tZW50cyB0b1xuICAgICAgICAgICAgICAgICAqIHplcm8gaXRlbXMgYW5kIHdlJ2xsIGhhbmRsZSB0aGlzIGJ5IGV2YWx1YXRpbmcgbGVhZGluZ0NvbW1lbnRzXG4gICAgICAgICAgICAgICAgICogbGF0ZXIuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50cyAmJlxuICAgICAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suXG4gICAgICAgIHdoaWxlIChleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiYgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdENoaWxkKSB7XG4gICAgICAgICAgICBpZiAobGFzdENoaWxkLmxlYWRpbmdDb21tZW50cyAmJiBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzW2xhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICBpZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzW2V4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBleHRyYS5sZWFkaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc3ByZWUvaXNzdWVzLzJcblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogSW4gc3BlY2lhbCBjYXNlcywgc3VjaCBhcyByZXR1cm4gKHdpdGhvdXQgYSB2YWx1ZSkgYW5kXG4gICAgICAgICAgICAgICAgICogZGVidWdnZXIsIGFsbCBjb21tZW50cyB3aWxsIGVuZCB1cCBhcyBsZWFkaW5nQ29tbWVudHMgYW5kXG4gICAgICAgICAgICAgICAgICogd2lsbCBvdGhlcndpc2UgYmUgZWxpbWluYXRlZC4gVGhpcyBleHRyYSBzdGVwIHJ1bnMgd2hlbiB0aGVcbiAgICAgICAgICAgICAgICAgKiBib3R0b21SaWdodFN0YWNrIGlzIGVtcHR5IGFuZCB0aGVyZSBhcmUgY29tbWVudHMgbGVmdFxuICAgICAgICAgICAgICAgICAqIGluIGxlYWRpbmdDb21tZW50cy5cbiAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAqIFRoaXMgbG9vcCBmaWd1cmVzIG91dCB0aGUgc3RvcHBpbmcgcG9pbnQgYmV0d2VlbiB0aGUgYWN0dWFsXG4gICAgICAgICAgICAgICAgICogbGVhZGluZyBhbmQgdHJhaWxpbmcgY29tbWVudHMgYnkgZmluZGluZyB0aGUgbG9jYXRpb24gb2YgdGhlXG4gICAgICAgICAgICAgICAgICogZmlyc3QgY29tbWVudCB0aGF0IGNvbWVzIGFmdGVyIHRoZSBnaXZlbiBub2RlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmxlYWRpbmdDb21tZW50c1tpXS5yYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBTcGxpdCB0aGUgYXJyYXkgYmFzZWQgb24gdGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBjb21tZW50XG4gICAgICAgICAgICAgICAgICogdGhhdCBjb21lcyBhZnRlciB0aGUgbm9kZS4gS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBjb3VsZFxuICAgICAgICAgICAgICAgICAqIHJlc3VsdCBpbiBhbiBlbXB0eSBhcnJheSwgYW5kIGlmIHNvLCB0aGUgYXJyYXkgbXVzdCBiZVxuICAgICAgICAgICAgICAgICAqIGRlbGV0ZWQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBleHRyYS5sZWFkaW5nQ29tbWVudHMuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbm9kZS5sZWFkaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBTaW1pbGFybHksIHRyYWlsaW5nIGNvbW1lbnRzIGFyZSBhdHRhY2hlZCBsYXRlci4gVGhlIHZhcmlhYmxlXG4gICAgICAgICAgICAgICAgICogbXVzdCBiZSByZXNldCB0byBudWxsIGlmIHRoZXJlIGFyZSBubyB0cmFpbGluZyBjb21tZW50cy5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzLnNsaWNlKGkpO1xuICAgICAgICAgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cykge1xuICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzID0gdHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucHVzaChub2RlKTtcbiAgICB9XG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhlIGxpc3Qgb2YgZmVhdHVyZSBmbGFncyBzdXBwb3J0ZWQgYnkgdGhlIHBhcnNlciBhbmQgdGhlaXIgZGVmYXVsdFxuICogICAgICBzZXR0aW5ncy5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNSBGcmVkIEsuIFNjaG90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGFycm93IGZ1bmN0aW9uc1xuICAgIGFycm93RnVuY3Rpb25zOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGxldCBhbmQgY29uc3RcbiAgICBibG9ja0JpbmRpbmdzOiB0cnVlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgZGVzdHJ1Y3R1cmVkIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgIGRlc3RydWN0dXJpbmc6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVnZXggdSBmbGFnXG4gICAgcmVnZXhVRmxhZzogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiByZWdleCB5IGZsYWdcbiAgICByZWdleFlGbGFnOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHRlbXBsYXRlIHN0cmluZ3NcbiAgICB0ZW1wbGF0ZVN0cmluZ3M6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgYmluYXJ5IGxpdGVyYWxzXG4gICAgYmluYXJ5TGl0ZXJhbHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgRVM2IG9jdGFsIGxpdGVyYWxzXG4gICAgb2N0YWxMaXRlcmFsczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyB1bmljb2RlIGNvZGUgcG9pbnQgZXNjYXBlIHNlcXVlbmNlc1xuICAgIHVuaWNvZGVDb2RlUG9pbnRFc2NhcGVzOiB0cnVlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgZGVmYXVsdCBwYXJhbWV0ZXJzXG4gICAgZGVmYXVsdFBhcmFtczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiByZXN0IHBhcmFtZXRlcnNcbiAgICByZXN0UGFyYW1zOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGZvci1vZiBzdGF0ZW1lbnRzXG4gICAgZm9yT2Y6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgY29tcHV0ZWQgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllc1xuICAgIG9iamVjdExpdGVyYWxDb21wdXRlZFByb3BlcnRpZXM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2Ygc2hvcnRoYW5kIG9iamVjdCBsaXRlcmFsIG1ldGhvZHNcbiAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kTWV0aG9kczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBzaG9ydGhhbmQgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllc1xuICAgIG9iamVjdExpdGVyYWxTaG9ydGhhbmRQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIEFsbG93IGR1cGxpY2F0ZSBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0aWVzIChleGNlcHQgJ19fcHJvdG9fXycpXG4gICAgb2JqZWN0TGl0ZXJhbER1cGxpY2F0ZVByb3BlcnRpZXM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgZ2VuZXJhdG9ycy95aWVsZFxuICAgIGdlbmVyYXRvcnM6IGZhbHNlLFxuXG4gICAgLy8gc3VwcG9ydCB0aGUgc3ByZWFkIG9wZXJhdG9yXG4gICAgc3ByZWFkOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBzdXBlciBpbiBmdW5jdGlvbnNcbiAgICBzdXBlckluRnVuY3Rpb25zOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGNsYXNzZXNcbiAgICBjbGFzc2VzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIG1vZHVsZXNcbiAgICBtb2R1bGVzOiBmYWxzZSxcblxuICAgIC8vIFJlYWN0IEpTWCBwYXJzaW5nXG4gICAganN4OiBmYWxzZSxcblxuICAgIC8vIGFsbG93IHJldHVybiBzdGF0ZW1lbnQgaW4gZ2xvYmFsIHNjb3BlXG4gICAgZ2xvYmFsUmV0dXJuOiBmYWxzZVxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBFcnJvciBtZXNzYWdlcyByZXR1cm5lZCBieSB0aGUgcGFyc2VyLlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOCB3aGVyZSBwb3NzaWJsZVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVW5leHBlY3RlZFRva2VuOiBcIlVuZXhwZWN0ZWQgdG9rZW4gJTBcIixcbiAgICBVbmV4cGVjdGVkTnVtYmVyOiBcIlVuZXhwZWN0ZWQgbnVtYmVyXCIsXG4gICAgVW5leHBlY3RlZFN0cmluZzogXCJVbmV4cGVjdGVkIHN0cmluZ1wiLFxuICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiBcIlVuZXhwZWN0ZWQgaWRlbnRpZmllclwiLFxuICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogXCJVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmRcIixcbiAgICBVbmV4cGVjdGVkVGVtcGxhdGU6IFwiVW5leHBlY3RlZCBxdWFzaSAlMFwiLFxuICAgIFVuZXhwZWN0ZWRFT1M6IFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIixcbiAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogXCJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3dcIixcbiAgICBJbnZhbGlkUmVnRXhwOiBcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uXCIsXG4gICAgSW52YWxpZFJlZ0V4cEZsYWc6IFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ1wiLFxuICAgIFVudGVybWluYXRlZFJlZ0V4cDogXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvXCIsXG4gICAgSW52YWxpZExIU0luQXNzaWdubWVudDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnRcIixcbiAgICBJbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvcm1hbHMgbGlzdFwiLFxuICAgIEludmFsaWRMSFNJbkZvckluOiBcIkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluXCIsXG4gICAgTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiBcIk1vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudFwiLFxuICAgIE5vQ2F0Y2hPckZpbmFsbHk6IFwiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeVwiLFxuICAgIE5vVW5pbnRpYWxpemVkQ29uc3Q6IFwiQ29uc3QgbXVzdCBiZSBpbml0aWFsaXplZFwiLFxuICAgIFVua25vd25MYWJlbDogXCJVbmRlZmluZWQgbGFiZWwgJyUwJ1wiLFxuICAgIFJlZGVjbGFyYXRpb246IFwiJTAgJyUxJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkXCIsXG4gICAgSWxsZWdhbENvbnRpbnVlOiBcIklsbGVnYWwgY29udGludWUgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbEJyZWFrOiBcIklsbGVnYWwgYnJlYWsgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbFJldHVybjogXCJJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnRcIixcbiAgICBJbGxlZ2FsWWllbGQ6IFwiSWxsZWdhbCB5aWVsZCBleHByZXNzaW9uXCIsXG4gICAgSWxsZWdhbFNwcmVhZDogXCJJbGxlZ2FsIHNwcmVhZCBlbGVtZW50XCIsXG4gICAgU3RyaWN0TW9kZVdpdGg6IFwiU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudFwiLFxuICAgIFN0cmljdENhdGNoVmFyaWFibGU6IFwiQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFZhck5hbWU6IFwiVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1OYW1lOiBcIlBhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1EdXBlOiBcIlN0cmljdCBtb2RlIGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzXCIsXG4gICAgVGVtcGxhdGVPY3RhbExpdGVyYWw6IFwiT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuXCIsXG4gICAgUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyOiBcIlJlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyXCIsXG4gICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6IFwiUmVzdCBwYXJhbWV0ZXIgY2FuIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVwiLFxuICAgIEVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQ6IFwiU3ByZWFkIG11c3QgYmUgdGhlIGZpbmFsIGVsZW1lbnQgb2YgYW4gZWxlbWVudCBsaXN0XCIsXG4gICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjogXCJJbnZhbGlkIHJlc3QgcGFyYW1ldGVyXCIsXG4gICAgT2JqZWN0UGF0dGVybkFzU3ByZWFkOiBcIkludmFsaWQgc3ByZWFkIGFyZ3VtZW50XCIsXG4gICAgU3RyaWN0RnVuY3Rpb25OYW1lOiBcIkZ1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogXCJPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuXCIsXG4gICAgU3RyaWN0RGVsZXRlOiBcIkRlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLlwiLFxuICAgIFN0cmljdER1cGxpY2F0ZVByb3BlcnR5OiBcIkR1cGxpY2F0ZSBkYXRhIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgRHVwbGljYXRlUHJvdG90eXBlUHJvcGVydHk6IFwiRHVwbGljYXRlICdfX3Byb3RvX18nIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIGFyZSBub3QgYWxsb3dlZFwiLFxuICAgIENvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZDogXCJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yXCIsXG4gICAgRHVwbGljYXRlQ29uc3RydWN0b3I6IFwiQSBjbGFzcyBtYXkgb25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvclwiLFxuICAgIFN0YXRpY1Byb3RvdHlwZTogXCJDbGFzc2VzIG1heSBub3QgaGF2ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlXCIsXG4gICAgQWNjZXNzb3JEYXRhUHJvcGVydHk6IFwiT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZlIGRhdGEgYW5kIGFjY2Vzc29yIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZVwiLFxuICAgIEFjY2Vzc29yR2V0U2V0OiBcIk9iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBtdWx0aXBsZSBnZXQvc2V0IGFjY2Vzc29ycyB3aXRoIHRoZSBzYW1lIG5hbWVcIixcbiAgICBTdHJpY3RMSFNBc3NpZ25tZW50OiBcIkFzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBTdHJpY3RMSFNQb3N0Zml4OiBcIlBvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdExIU1ByZWZpeDogXCJQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFJlc2VydmVkV29yZDogXCJVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBJbnZhbGlkSlNYQXR0cmlidXRlVmFsdWU6IFwiSlNYIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgYW4gZXhwcmVzc2lvbiBvciBhIHF1b3RlZCBKU1ggdGV4dFwiLFxuICAgIEV4cGVjdGVkSlNYQ2xvc2luZ1RhZzogXCJFeHBlY3RlZCBjb3JyZXNwb25kaW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgJTBcIixcbiAgICBBZGphY2VudEpTWEVsZW1lbnRzOiBcIkFkamFjZW50IEpTWCBlbGVtZW50cyBtdXN0IGJlIHdyYXBwZWQgaW4gYW4gZW5jbG9zaW5nIHRhZ1wiLFxuICAgIE1pc3NpbmdGcm9tQ2xhdXNlOiBcIk1pc3NpbmcgZnJvbSBjbGF1c2VcIixcbiAgICBOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6IFwiTWlzc2luZyBhcyBhZnRlciBpbXBvcnQgKlwiLFxuICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6IFwiSW52YWxpZCBtb2R1bGUgc3BlY2lmaWVyXCIsXG4gICAgSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgaW1wb3J0IGRlY2xhcmF0aW9uXCIsXG4gICAgSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgZXhwb3J0IGRlY2xhcmF0aW9uXCJcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQSBzaW1wbGUgbWFwIHRoYXQgaGVscHMgYXZvaWQgY29sbGlzaW9ucyBvbiB0aGUgT2JqZWN0IHByb3RvdHlwZS5cbiAqIEBhdXRob3IgSmFtdW5kIEZlcmd1c29uXG4gKiBAY29weXJpZ2h0IDIwMTUgSmFtdW5kIEZlcmd1c29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gU3RyaW5nTWFwKCkge1xuICAgIHRoaXMuJGRhdGEgPSB7fTtcbn1cblxuU3RyaW5nTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5ID0gXCIkXCIgKyBrZXk7XG4gICAgcmV0dXJuIHRoaXMuJGRhdGFba2V5XTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBrZXkgPSBcIiRcIiArIGtleTtcbiAgICB0aGlzLiRkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy4kZGF0YSwga2V5KTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBkZWxldGUgdGhpcy4kZGF0YVtrZXldO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdNYXA7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVmFyaW91cyBzeW50YXgvcGF0dGVybiBjaGVja3MgZm9yIHBhcnNpbmcuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqIEBjb3B5cmlnaHQgMjAxMi0yMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByaXZhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanMuXG52YXIgUmVnZXggPSB7XG4gICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGMFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDgzLVxcdTA0ODdcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYxMC1cXHUwNjFBXFx1MDYyMC1cXHUwNjY5XFx1MDY2RS1cXHUwNkQzXFx1MDZENS1cXHUwNkRDXFx1MDZERi1cXHUwNkU4XFx1MDZFQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTAtXFx1MDc0QVxcdTA3NEQtXFx1MDdCMVxcdTA3QzAtXFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwOEEwXFx1MDhBMi1cXHUwOEFDXFx1MDhFNC1cXHUwOEZFXFx1MDkwMC1cXHUwOTYzXFx1MDk2Ni1cXHUwOTZGXFx1MDk3MS1cXHUwOTc3XFx1MDk3OS1cXHUwOTdGXFx1MDk4MS1cXHUwOTgzXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCQy1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0VcXHUwOUQ3XFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTNcXHUwOUU2LVxcdTA5RjFcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2M1xcdTBCNjYtXFx1MEI2RlxcdTBCNzFcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJFRlxcdTBDMDEtXFx1MEMwM1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OFxcdTBDNTlcXHUwQzYwLVxcdTBDNjNcXHUwQzY2LVxcdTBDNkZcXHUwQzgyXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMlxcdTBEMDNcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNELVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU3XFx1MEQ2MC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkYwXFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5RDlcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y2XFx1MUQwMC1cXHUxREU2XFx1MURGQy1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MjBFNS1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5XFx1MzA5QVxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY2RlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTY5N1xcdUE2OUYtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgyN1xcdUE4NDAtXFx1QTg3M1xcdUE4ODAtXFx1QThDNFxcdUE4RDAtXFx1QThEOVxcdUE4RTAtXFx1QThGN1xcdUE4RkJcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3QlxcdUFBODAtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCQzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMjZcXHVGRTMzXFx1RkUzNFxcdUZFNEQtXFx1RkU0RlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGM0ZcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIExlYWRpbmdaZXJvczogbmV3IFJlZ0V4cChcIl4wKyg/ISQpXCIpXG59O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIFJlZ2V4OiBSZWdleCxcblxuICAgIGlzRGVjaW1hbERpZ2l0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45XG4gICAgfSxcblxuICAgIGlzSGV4RGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3ODlhYmNkZWZBQkNERUZcIi5pbmRleE9mKGNoKSA+PSAwO1xuICAgIH0sXG5cbiAgICBpc09jdGFsRGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3XCIuaW5kZXhPZihjaCkgPj0gMDtcbiAgICB9LFxuXG4gICAgLy8gNy4yIFdoaXRlIFNwYWNlXG5cbiAgICBpc1doaXRlU3BhY2U6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTtcbiAgICB9LFxuXG4gICAgLy8gNy4zIExpbmUgVGVybWluYXRvcnNcblxuICAgIGlzTGluZVRlcm1pbmF0b3I6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8IChjaCA9PT0gMHgyMDI5KTtcbiAgICB9LFxuXG4gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBpc0lkZW50aWZpZXJTdGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFxcIChiYWNrc2xhc2gpXG4gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTtcbiAgICB9LFxuXG4gICAgaXNJZGVudGlmaWVyUGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAgICAgICAgIC8vIDAuLjlcbiAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfSxcblxuICAgIC8vIDcuNi4xLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzXG5cbiAgICBpc0Z1dHVyZVJlc2VydmVkV29yZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgY2FzZSBcImV4cG9ydFwiOlxuICAgICAgICAgICAgY2FzZSBcImV4dGVuZHNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvcnRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzdXBlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkOiBmdW5jdGlvbihpZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW1wbGVtZW50c1wiOlxuICAgICAgICAgICAgY2FzZSBcImludGVyZmFjZVwiOlxuICAgICAgICAgICAgY2FzZSBcInBhY2thZ2VcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwcml2YXRlXCI6XG4gICAgICAgICAgICBjYXNlIFwicHJvdGVjdGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwicHVibGljXCI6XG4gICAgICAgICAgICBjYXNlIFwic3RhdGljXCI6XG4gICAgICAgICAgICBjYXNlIFwieWllbGRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJsZXRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGlzUmVzdHJpY3RlZFdvcmQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIHJldHVybiBpZCA9PT0gXCJldmFsXCIgfHwgaWQgPT09IFwiYXJndW1lbnRzXCI7XG4gICAgfSxcblxuICAgIC8vIDcuNi4xLjEgS2V5d29yZHNcblxuICAgIGlzS2V5d29yZDogZnVuY3Rpb24oaWQsIHN0cmljdCwgZWNtYUZlYXR1cmVzKSB7XG5cbiAgICAgICAgaWYgKHN0cmljdCAmJiB0aGlzLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gXCJjb25zdFwiIGlzIHNwZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguXG4gICAgICAgIC8vIFwieWllbGRcIiBhbmQgXCJsZXRcIiBhcmUgZm9yIGNvbXBhdGlibGl0eSB3aXRoIFNwaWRlck1vbmtleSBhbmQgRVMubmV4dC5cbiAgICAgICAgLy8gU29tZSBvdGhlcnMgYXJlIGZyb20gZnV0dXJlIHJlc2VydmVkIHdvcmRzLlxuXG4gICAgICAgIHN3aXRjaCAoaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJpZlwiKSB8fCAoaWQgPT09IFwiaW5cIikgfHwgKGlkID09PSBcImRvXCIpO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwidmFyXCIpIHx8IChpZCA9PT0gXCJmb3JcIikgfHwgKGlkID09PSBcIm5ld1wiKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaWQgPT09IFwidHJ5XCIpIHx8IChpZCA9PT0gXCJsZXRcIik7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJ0aGlzXCIpIHx8IChpZCA9PT0gXCJlbHNlXCIpIHx8IChpZCA9PT0gXCJjYXNlXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJ2b2lkXCIpIHx8IChpZCA9PT0gXCJ3aXRoXCIpIHx8IChpZCA9PT0gXCJlbnVtXCIpO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwid2hpbGVcIikgfHwgKGlkID09PSBcImJyZWFrXCIpIHx8IChpZCA9PT0gXCJjYXRjaFwiKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaWQgPT09IFwidGhyb3dcIikgfHwgKGlkID09PSBcImNvbnN0XCIpIHx8ICghZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnMgJiYgaWQgPT09IFwieWllbGRcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcImNsYXNzXCIpIHx8IChpZCA9PT0gXCJzdXBlclwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcInJldHVyblwiKSB8fCAoaWQgPT09IFwidHlwZW9mXCIpIHx8IChpZCA9PT0gXCJkZWxldGVcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInN3aXRjaFwiKSB8fCAoaWQgPT09IFwiZXhwb3J0XCIpIHx8IChpZCA9PT0gXCJpbXBvcnRcIik7XG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJkZWZhdWx0XCIpIHx8IChpZCA9PT0gXCJmaW5hbGx5XCIpIHx8IChpZCA9PT0gXCJleHRlbmRzXCIpO1xuICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiZnVuY3Rpb25cIikgfHwgKGlkID09PSBcImNvbnRpbnVlXCIpIHx8IChpZCA9PT0gXCJkZWJ1Z2dlclwiKTtcbiAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJpbnN0YW5jZW9mXCIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNKU1hJZGVudGlmaWVyU3RhcnQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIC8vIGV4Y2x1ZGUgYmFja3NsYXNoIChcXClcbiAgICAgICAgcmV0dXJuIChjaCAhPT0gOTIpICYmIHRoaXMuaXNJZGVudGlmaWVyU3RhcnQoY2gpO1xuICAgIH0sXG5cbiAgICBpc0pTWElkZW50aWZpZXJQYXJ0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICAvLyBleGNsdWRlIGJhY2tzbGFzaCAoXFwpIGFuZCBhZGQgaHlwaGVuICgtKVxuICAgICAgICByZXR1cm4gKGNoICE9PSA5MikgJiYgKGNoID09PSA0NSB8fCB0aGlzLmlzSWRlbnRpZmllclBhcnQoY2gpKTtcbiAgICB9XG5cblxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBDb250YWlucyB0b2tlbiBpbmZvcm1hdGlvbi5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50eWxAZ21haWwuY29tPlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByaXZhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBUb2tlbiA9IHtcbiAgICBCb29sZWFuTGl0ZXJhbDogMSxcbiAgICBFT0Y6IDIsXG4gICAgSWRlbnRpZmllcjogMyxcbiAgICBLZXl3b3JkOiA0LFxuICAgIE51bGxMaXRlcmFsOiA1LFxuICAgIE51bWVyaWNMaXRlcmFsOiA2LFxuICAgIFB1bmN0dWF0b3I6IDcsXG4gICAgU3RyaW5nTGl0ZXJhbDogOCxcbiAgICBSZWd1bGFyRXhwcmVzc2lvbjogOSxcbiAgICBUZW1wbGF0ZTogMTAsXG4gICAgSlNYSWRlbnRpZmllcjogMTEsXG4gICAgSlNYVGV4dDogMTJcbn07XG5cbnZhciBUb2tlbk5hbWUgPSB7fTtcblRva2VuTmFtZVtUb2tlbi5Cb29sZWFuTGl0ZXJhbF0gPSBcIkJvb2xlYW5cIjtcblRva2VuTmFtZVtUb2tlbi5FT0ZdID0gXCI8ZW5kPlwiO1xuVG9rZW5OYW1lW1Rva2VuLklkZW50aWZpZXJdID0gXCJJZGVudGlmaWVyXCI7XG5Ub2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSBcIktleXdvcmRcIjtcblRva2VuTmFtZVtUb2tlbi5OdWxsTGl0ZXJhbF0gPSBcIk51bGxcIjtcblRva2VuTmFtZVtUb2tlbi5OdW1lcmljTGl0ZXJhbF0gPSBcIk51bWVyaWNcIjtcblRva2VuTmFtZVtUb2tlbi5QdW5jdHVhdG9yXSA9IFwiUHVuY3R1YXRvclwiO1xuVG9rZW5OYW1lW1Rva2VuLlN0cmluZ0xpdGVyYWxdID0gXCJTdHJpbmdcIjtcblRva2VuTmFtZVtUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbl0gPSBcIlJlZ3VsYXJFeHByZXNzaW9uXCI7XG5Ub2tlbk5hbWVbVG9rZW4uVGVtcGxhdGVdID0gXCJUZW1wbGF0ZVwiO1xuVG9rZW5OYW1lW1Rva2VuLkpTWElkZW50aWZpZXJdID0gXCJKU1hJZGVudGlmaWVyXCI7XG5Ub2tlbk5hbWVbVG9rZW4uSlNYVGV4dF0gPSBcIkpTWFRleHRcIjtcblxuLy8gQSBmdW5jdGlvbiBmb2xsb3dpbmcgb25lIG9mIHRob3NlIHRva2VucyBpcyBhbiBleHByZXNzaW9uLlxudmFyIEZuRXhwclRva2VucyA9IFtcIihcIiwgXCJ7XCIsIFwiW1wiLCBcImluXCIsIFwidHlwZW9mXCIsIFwiaW5zdGFuY2VvZlwiLCBcIm5ld1wiLFxuICAgICAgICAgICAgICAgIFwicmV0dXJuXCIsIFwiY2FzZVwiLCBcImRlbGV0ZVwiLCBcInRocm93XCIsIFwidm9pZFwiLFxuICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzXG4gICAgICAgICAgICAgICAgXCI9XCIsIFwiKz1cIiwgXCItPVwiLCBcIio9XCIsIFwiLz1cIiwgXCIlPVwiLCBcIjw8PVwiLCBcIj4+PVwiLCBcIj4+Pj1cIixcbiAgICAgICAgICAgICAgICBcIiY9XCIsIFwifD1cIiwgXCJePVwiLCBcIixcIixcbiAgICAgICAgICAgICAgICAvLyBiaW5hcnkvdW5hcnkgb3BlcmF0b3JzXG4gICAgICAgICAgICAgICAgXCIrXCIsIFwiLVwiLCBcIipcIiwgXCIvXCIsIFwiJVwiLCBcIisrXCIsIFwiLS1cIiwgXCI8PFwiLCBcIj4+XCIsIFwiPj4+XCIsIFwiJlwiLFxuICAgICAgICAgICAgICAgIFwifFwiLCBcIl5cIiwgXCIhXCIsIFwiflwiLCBcIiYmXCIsIFwifHxcIiwgXCI/XCIsIFwiOlwiLCBcIj09PVwiLCBcIj09XCIsIFwiPj1cIixcbiAgICAgICAgICAgICAgICBcIjw9XCIsIFwiPFwiLCBcIj5cIiwgXCIhPVwiLCBcIiE9PVwiXTtcblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBUb2tlbjogVG9rZW4sXG4gICAgVG9rZW5OYW1lOiBUb2tlbk5hbWUsXG4gICAgRm5FeHByVG9rZW5zOiBGbkV4cHJUb2tlbnNcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhlIGxpc3Qgb2YgWEhUTUwgZW50aXRpZXMgdGhhdCBhcmUgdmFsaWQgaW4gSlNYLlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHF1b3Q6IFwiXFx1MDAyMlwiLFxuICAgIGFtcDogXCImXCIsXG4gICAgYXBvczogXCJcXHUwMDI3XCIsXG4gICAgbHQ6IFwiPFwiLFxuICAgIGd0OiBcIj5cIixcbiAgICBuYnNwOiBcIlxcdTAwQTBcIixcbiAgICBpZXhjbDogXCJcXHUwMEExXCIsXG4gICAgY2VudDogXCJcXHUwMEEyXCIsXG4gICAgcG91bmQ6IFwiXFx1MDBBM1wiLFxuICAgIGN1cnJlbjogXCJcXHUwMEE0XCIsXG4gICAgeWVuOiBcIlxcdTAwQTVcIixcbiAgICBicnZiYXI6IFwiXFx1MDBBNlwiLFxuICAgIHNlY3Q6IFwiXFx1MDBBN1wiLFxuICAgIHVtbDogXCJcXHUwMEE4XCIsXG4gICAgY29weTogXCJcXHUwMEE5XCIsXG4gICAgb3JkZjogXCJcXHUwMEFBXCIsXG4gICAgbGFxdW86IFwiXFx1MDBBQlwiLFxuICAgIG5vdDogXCJcXHUwMEFDXCIsXG4gICAgc2h5OiBcIlxcdTAwQURcIixcbiAgICByZWc6IFwiXFx1MDBBRVwiLFxuICAgIG1hY3I6IFwiXFx1MDBBRlwiLFxuICAgIGRlZzogXCJcXHUwMEIwXCIsXG4gICAgcGx1c21uOiBcIlxcdTAwQjFcIixcbiAgICBzdXAyOiBcIlxcdTAwQjJcIixcbiAgICBzdXAzOiBcIlxcdTAwQjNcIixcbiAgICBhY3V0ZTogXCJcXHUwMEI0XCIsXG4gICAgbWljcm86IFwiXFx1MDBCNVwiLFxuICAgIHBhcmE6IFwiXFx1MDBCNlwiLFxuICAgIG1pZGRvdDogXCJcXHUwMEI3XCIsXG4gICAgY2VkaWw6IFwiXFx1MDBCOFwiLFxuICAgIHN1cDE6IFwiXFx1MDBCOVwiLFxuICAgIG9yZG06IFwiXFx1MDBCQVwiLFxuICAgIHJhcXVvOiBcIlxcdTAwQkJcIixcbiAgICBmcmFjMTQ6IFwiXFx1MDBCQ1wiLFxuICAgIGZyYWMxMjogXCJcXHUwMEJEXCIsXG4gICAgZnJhYzM0OiBcIlxcdTAwQkVcIixcbiAgICBpcXVlc3Q6IFwiXFx1MDBCRlwiLFxuICAgIEFncmF2ZTogXCJcXHUwMEMwXCIsXG4gICAgQWFjdXRlOiBcIlxcdTAwQzFcIixcbiAgICBBY2lyYzogXCJcXHUwMEMyXCIsXG4gICAgQXRpbGRlOiBcIlxcdTAwQzNcIixcbiAgICBBdW1sOiBcIlxcdTAwQzRcIixcbiAgICBBcmluZzogXCJcXHUwMEM1XCIsXG4gICAgQUVsaWc6IFwiXFx1MDBDNlwiLFxuICAgIENjZWRpbDogXCJcXHUwMEM3XCIsXG4gICAgRWdyYXZlOiBcIlxcdTAwQzhcIixcbiAgICBFYWN1dGU6IFwiXFx1MDBDOVwiLFxuICAgIEVjaXJjOiBcIlxcdTAwQ0FcIixcbiAgICBFdW1sOiBcIlxcdTAwQ0JcIixcbiAgICBJZ3JhdmU6IFwiXFx1MDBDQ1wiLFxuICAgIElhY3V0ZTogXCJcXHUwMENEXCIsXG4gICAgSWNpcmM6IFwiXFx1MDBDRVwiLFxuICAgIEl1bWw6IFwiXFx1MDBDRlwiLFxuICAgIEVUSDogXCJcXHUwMEQwXCIsXG4gICAgTnRpbGRlOiBcIlxcdTAwRDFcIixcbiAgICBPZ3JhdmU6IFwiXFx1MDBEMlwiLFxuICAgIE9hY3V0ZTogXCJcXHUwMEQzXCIsXG4gICAgT2NpcmM6IFwiXFx1MDBENFwiLFxuICAgIE90aWxkZTogXCJcXHUwMEQ1XCIsXG4gICAgT3VtbDogXCJcXHUwMEQ2XCIsXG4gICAgdGltZXM6IFwiXFx1MDBEN1wiLFxuICAgIE9zbGFzaDogXCJcXHUwMEQ4XCIsXG4gICAgVWdyYXZlOiBcIlxcdTAwRDlcIixcbiAgICBVYWN1dGU6IFwiXFx1MDBEQVwiLFxuICAgIFVjaXJjOiBcIlxcdTAwREJcIixcbiAgICBVdW1sOiBcIlxcdTAwRENcIixcbiAgICBZYWN1dGU6IFwiXFx1MDBERFwiLFxuICAgIFRIT1JOOiBcIlxcdTAwREVcIixcbiAgICBzemxpZzogXCJcXHUwMERGXCIsXG4gICAgYWdyYXZlOiBcIlxcdTAwRTBcIixcbiAgICBhYWN1dGU6IFwiXFx1MDBFMVwiLFxuICAgIGFjaXJjOiBcIlxcdTAwRTJcIixcbiAgICBhdGlsZGU6IFwiXFx1MDBFM1wiLFxuICAgIGF1bWw6IFwiXFx1MDBFNFwiLFxuICAgIGFyaW5nOiBcIlxcdTAwRTVcIixcbiAgICBhZWxpZzogXCJcXHUwMEU2XCIsXG4gICAgY2NlZGlsOiBcIlxcdTAwRTdcIixcbiAgICBlZ3JhdmU6IFwiXFx1MDBFOFwiLFxuICAgIGVhY3V0ZTogXCJcXHUwMEU5XCIsXG4gICAgZWNpcmM6IFwiXFx1MDBFQVwiLFxuICAgIGV1bWw6IFwiXFx1MDBFQlwiLFxuICAgIGlncmF2ZTogXCJcXHUwMEVDXCIsXG4gICAgaWFjdXRlOiBcIlxcdTAwRURcIixcbiAgICBpY2lyYzogXCJcXHUwMEVFXCIsXG4gICAgaXVtbDogXCJcXHUwMEVGXCIsXG4gICAgZXRoOiBcIlxcdTAwRjBcIixcbiAgICBudGlsZGU6IFwiXFx1MDBGMVwiLFxuICAgIG9ncmF2ZTogXCJcXHUwMEYyXCIsXG4gICAgb2FjdXRlOiBcIlxcdTAwRjNcIixcbiAgICBvY2lyYzogXCJcXHUwMEY0XCIsXG4gICAgb3RpbGRlOiBcIlxcdTAwRjVcIixcbiAgICBvdW1sOiBcIlxcdTAwRjZcIixcbiAgICBkaXZpZGU6IFwiXFx1MDBGN1wiLFxuICAgIG9zbGFzaDogXCJcXHUwMEY4XCIsXG4gICAgdWdyYXZlOiBcIlxcdTAwRjlcIixcbiAgICB1YWN1dGU6IFwiXFx1MDBGQVwiLFxuICAgIHVjaXJjOiBcIlxcdTAwRkJcIixcbiAgICB1dW1sOiBcIlxcdTAwRkNcIixcbiAgICB5YWN1dGU6IFwiXFx1MDBGRFwiLFxuICAgIHRob3JuOiBcIlxcdTAwRkVcIixcbiAgICB5dW1sOiBcIlxcdTAwRkZcIixcbiAgICBPRWxpZzogXCJcXHUwMTUyXCIsXG4gICAgb2VsaWc6IFwiXFx1MDE1M1wiLFxuICAgIFNjYXJvbjogXCJcXHUwMTYwXCIsXG4gICAgc2Nhcm9uOiBcIlxcdTAxNjFcIixcbiAgICBZdW1sOiBcIlxcdTAxNzhcIixcbiAgICBmbm9mOiBcIlxcdTAxOTJcIixcbiAgICBjaXJjOiBcIlxcdTAyQzZcIixcbiAgICB0aWxkZTogXCJcXHUwMkRDXCIsXG4gICAgQWxwaGE6IFwiXFx1MDM5MVwiLFxuICAgIEJldGE6IFwiXFx1MDM5MlwiLFxuICAgIEdhbW1hOiBcIlxcdTAzOTNcIixcbiAgICBEZWx0YTogXCJcXHUwMzk0XCIsXG4gICAgRXBzaWxvbjogXCJcXHUwMzk1XCIsXG4gICAgWmV0YTogXCJcXHUwMzk2XCIsXG4gICAgRXRhOiBcIlxcdTAzOTdcIixcbiAgICBUaGV0YTogXCJcXHUwMzk4XCIsXG4gICAgSW90YTogXCJcXHUwMzk5XCIsXG4gICAgS2FwcGE6IFwiXFx1MDM5QVwiLFxuICAgIExhbWJkYTogXCJcXHUwMzlCXCIsXG4gICAgTXU6IFwiXFx1MDM5Q1wiLFxuICAgIE51OiBcIlxcdTAzOURcIixcbiAgICBYaTogXCJcXHUwMzlFXCIsXG4gICAgT21pY3JvbjogXCJcXHUwMzlGXCIsXG4gICAgUGk6IFwiXFx1MDNBMFwiLFxuICAgIFJobzogXCJcXHUwM0ExXCIsXG4gICAgU2lnbWE6IFwiXFx1MDNBM1wiLFxuICAgIFRhdTogXCJcXHUwM0E0XCIsXG4gICAgVXBzaWxvbjogXCJcXHUwM0E1XCIsXG4gICAgUGhpOiBcIlxcdTAzQTZcIixcbiAgICBDaGk6IFwiXFx1MDNBN1wiLFxuICAgIFBzaTogXCJcXHUwM0E4XCIsXG4gICAgT21lZ2E6IFwiXFx1MDNBOVwiLFxuICAgIGFscGhhOiBcIlxcdTAzQjFcIixcbiAgICBiZXRhOiBcIlxcdTAzQjJcIixcbiAgICBnYW1tYTogXCJcXHUwM0IzXCIsXG4gICAgZGVsdGE6IFwiXFx1MDNCNFwiLFxuICAgIGVwc2lsb246IFwiXFx1MDNCNVwiLFxuICAgIHpldGE6IFwiXFx1MDNCNlwiLFxuICAgIGV0YTogXCJcXHUwM0I3XCIsXG4gICAgdGhldGE6IFwiXFx1MDNCOFwiLFxuICAgIGlvdGE6IFwiXFx1MDNCOVwiLFxuICAgIGthcHBhOiBcIlxcdTAzQkFcIixcbiAgICBsYW1iZGE6IFwiXFx1MDNCQlwiLFxuICAgIG11OiBcIlxcdTAzQkNcIixcbiAgICBudTogXCJcXHUwM0JEXCIsXG4gICAgeGk6IFwiXFx1MDNCRVwiLFxuICAgIG9taWNyb246IFwiXFx1MDNCRlwiLFxuICAgIHBpOiBcIlxcdTAzQzBcIixcbiAgICByaG86IFwiXFx1MDNDMVwiLFxuICAgIHNpZ21hZjogXCJcXHUwM0MyXCIsXG4gICAgc2lnbWE6IFwiXFx1MDNDM1wiLFxuICAgIHRhdTogXCJcXHUwM0M0XCIsXG4gICAgdXBzaWxvbjogXCJcXHUwM0M1XCIsXG4gICAgcGhpOiBcIlxcdTAzQzZcIixcbiAgICBjaGk6IFwiXFx1MDNDN1wiLFxuICAgIHBzaTogXCJcXHUwM0M4XCIsXG4gICAgb21lZ2E6IFwiXFx1MDNDOVwiLFxuICAgIHRoZXRhc3ltOiBcIlxcdTAzRDFcIixcbiAgICB1cHNpaDogXCJcXHUwM0QyXCIsXG4gICAgcGl2OiBcIlxcdTAzRDZcIixcbiAgICBlbnNwOiBcIlxcdTIwMDJcIixcbiAgICBlbXNwOiBcIlxcdTIwMDNcIixcbiAgICB0aGluc3A6IFwiXFx1MjAwOVwiLFxuICAgIHp3bmo6IFwiXFx1MjAwQ1wiLFxuICAgIHp3ajogXCJcXHUyMDBEXCIsXG4gICAgbHJtOiBcIlxcdTIwMEVcIixcbiAgICBybG06IFwiXFx1MjAwRlwiLFxuICAgIG5kYXNoOiBcIlxcdTIwMTNcIixcbiAgICBtZGFzaDogXCJcXHUyMDE0XCIsXG4gICAgbHNxdW86IFwiXFx1MjAxOFwiLFxuICAgIHJzcXVvOiBcIlxcdTIwMTlcIixcbiAgICBzYnF1bzogXCJcXHUyMDFBXCIsXG4gICAgbGRxdW86IFwiXFx1MjAxQ1wiLFxuICAgIHJkcXVvOiBcIlxcdTIwMURcIixcbiAgICBiZHF1bzogXCJcXHUyMDFFXCIsXG4gICAgZGFnZ2VyOiBcIlxcdTIwMjBcIixcbiAgICBEYWdnZXI6IFwiXFx1MjAyMVwiLFxuICAgIGJ1bGw6IFwiXFx1MjAyMlwiLFxuICAgIGhlbGxpcDogXCJcXHUyMDI2XCIsXG4gICAgcGVybWlsOiBcIlxcdTIwMzBcIixcbiAgICBwcmltZTogXCJcXHUyMDMyXCIsXG4gICAgUHJpbWU6IFwiXFx1MjAzM1wiLFxuICAgIGxzYXF1bzogXCJcXHUyMDM5XCIsXG4gICAgcnNhcXVvOiBcIlxcdTIwM0FcIixcbiAgICBvbGluZTogXCJcXHUyMDNFXCIsXG4gICAgZnJhc2w6IFwiXFx1MjA0NFwiLFxuICAgIGV1cm86IFwiXFx1MjBBQ1wiLFxuICAgIGltYWdlOiBcIlxcdTIxMTFcIixcbiAgICB3ZWllcnA6IFwiXFx1MjExOFwiLFxuICAgIHJlYWw6IFwiXFx1MjExQ1wiLFxuICAgIHRyYWRlOiBcIlxcdTIxMjJcIixcbiAgICBhbGVmc3ltOiBcIlxcdTIxMzVcIixcbiAgICBsYXJyOiBcIlxcdTIxOTBcIixcbiAgICB1YXJyOiBcIlxcdTIxOTFcIixcbiAgICByYXJyOiBcIlxcdTIxOTJcIixcbiAgICBkYXJyOiBcIlxcdTIxOTNcIixcbiAgICBoYXJyOiBcIlxcdTIxOTRcIixcbiAgICBjcmFycjogXCJcXHUyMUI1XCIsXG4gICAgbEFycjogXCJcXHUyMUQwXCIsXG4gICAgdUFycjogXCJcXHUyMUQxXCIsXG4gICAgckFycjogXCJcXHUyMUQyXCIsXG4gICAgZEFycjogXCJcXHUyMUQzXCIsXG4gICAgaEFycjogXCJcXHUyMUQ0XCIsXG4gICAgZm9yYWxsOiBcIlxcdTIyMDBcIixcbiAgICBwYXJ0OiBcIlxcdTIyMDJcIixcbiAgICBleGlzdDogXCJcXHUyMjAzXCIsXG4gICAgZW1wdHk6IFwiXFx1MjIwNVwiLFxuICAgIG5hYmxhOiBcIlxcdTIyMDdcIixcbiAgICBpc2luOiBcIlxcdTIyMDhcIixcbiAgICBub3RpbjogXCJcXHUyMjA5XCIsXG4gICAgbmk6IFwiXFx1MjIwQlwiLFxuICAgIHByb2Q6IFwiXFx1MjIwRlwiLFxuICAgIHN1bTogXCJcXHUyMjExXCIsXG4gICAgbWludXM6IFwiXFx1MjIxMlwiLFxuICAgIGxvd2FzdDogXCJcXHUyMjE3XCIsXG4gICAgcmFkaWM6IFwiXFx1MjIxQVwiLFxuICAgIHByb3A6IFwiXFx1MjIxRFwiLFxuICAgIGluZmluOiBcIlxcdTIyMUVcIixcbiAgICBhbmc6IFwiXFx1MjIyMFwiLFxuICAgIGFuZDogXCJcXHUyMjI3XCIsXG4gICAgb3I6IFwiXFx1MjIyOFwiLFxuICAgIGNhcDogXCJcXHUyMjI5XCIsXG4gICAgY3VwOiBcIlxcdTIyMkFcIixcbiAgICBcImludFwiOiBcIlxcdTIyMkJcIixcbiAgICB0aGVyZTQ6IFwiXFx1MjIzNFwiLFxuICAgIHNpbTogXCJcXHUyMjNDXCIsXG4gICAgY29uZzogXCJcXHUyMjQ1XCIsXG4gICAgYXN5bXA6IFwiXFx1MjI0OFwiLFxuICAgIG5lOiBcIlxcdTIyNjBcIixcbiAgICBlcXVpdjogXCJcXHUyMjYxXCIsXG4gICAgbGU6IFwiXFx1MjI2NFwiLFxuICAgIGdlOiBcIlxcdTIyNjVcIixcbiAgICBzdWI6IFwiXFx1MjI4MlwiLFxuICAgIHN1cDogXCJcXHUyMjgzXCIsXG4gICAgbnN1YjogXCJcXHUyMjg0XCIsXG4gICAgc3ViZTogXCJcXHUyMjg2XCIsXG4gICAgc3VwZTogXCJcXHUyMjg3XCIsXG4gICAgb3BsdXM6IFwiXFx1MjI5NVwiLFxuICAgIG90aW1lczogXCJcXHUyMjk3XCIsXG4gICAgcGVycDogXCJcXHUyMkE1XCIsXG4gICAgc2RvdDogXCJcXHUyMkM1XCIsXG4gICAgbGNlaWw6IFwiXFx1MjMwOFwiLFxuICAgIHJjZWlsOiBcIlxcdTIzMDlcIixcbiAgICBsZmxvb3I6IFwiXFx1MjMwQVwiLFxuICAgIHJmbG9vcjogXCJcXHUyMzBCXCIsXG4gICAgbGFuZzogXCJcXHUyMzI5XCIsXG4gICAgcmFuZzogXCJcXHUyMzJBXCIsXG4gICAgbG96OiBcIlxcdTI1Q0FcIixcbiAgICBzcGFkZXM6IFwiXFx1MjY2MFwiLFxuICAgIGNsdWJzOiBcIlxcdTI2NjNcIixcbiAgICBoZWFydHM6IFwiXFx1MjY2NVwiLFxuICAgIGRpYW1zOiBcIlxcdTI2NjZcIlxufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwiZXNwcmVlXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJBbiBhY3RpdmVseS1tYWludGFpbmVkIGZvcmsgb2YgRXNwcmltYSwgdGhlIEVDTUFTY3JpcHQgcGFyc2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgbXVsdGlwdXJwb3NlIGFuYWx5c2lzXCIsXG4gIFwiYXV0aG9yXCI6IHtcbiAgICBcIm5hbWVcIjogXCJOaWNob2xhcyBDLiBaYWthc1wiLFxuICAgIFwiZW1haWxcIjogXCJuaWNob2xhcytucG1AbmN6Y29uc3VsdGluZy5jb21cIlxuICB9LFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc3ByZWVcIixcbiAgXCJtYWluXCI6IFwiZXNwcmVlLmpzXCIsXG4gIFwiYmluXCI6IHtcbiAgICBcImVzcGFyc2VcIjogXCIuL2Jpbi9lc3BhcnNlLmpzXCIsXG4gICAgXCJlc3ZhbGlkYXRlXCI6IFwiLi9iaW4vZXN2YWxpZGF0ZS5qc1wiXG4gIH0sXG4gIFwidmVyc2lvblwiOiBcIjIuMC4yXCIsXG4gIFwiZmlsZXNcIjogW1xuICAgIFwiYmluXCIsXG4gICAgXCJsaWJcIixcbiAgICBcInRlc3QvcnVuLmpzXCIsXG4gICAgXCJ0ZXN0L3J1bm5lci5qc1wiLFxuICAgIFwidGVzdC90ZXN0LmpzXCIsXG4gICAgXCJ0ZXN0L2NvbXBhdC5qc1wiLFxuICAgIFwidGVzdC9yZWZsZWN0LmpzXCIsXG4gICAgXCJlc3ByZWUuanNcIlxuICBdLFxuICBcImVuZ2luZXNcIjoge1xuICAgIFwibm9kZVwiOiBcIj49MC4xMC4wXCJcbiAgfSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImh0dHA6Ly9naXRodWIuY29tL2VzbGludC9lc3ByZWUuZ2l0XCJcbiAgfSxcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHA6Ly9naXRodWIuY29tL2VzbGludC9lc3ByZWUuZ2l0XCJcbiAgfSxcbiAgXCJsaWNlbnNlc1wiOiBbXG4gICAge1xuICAgICAgXCJ0eXBlXCI6IFwiQlNEXCIsXG4gICAgICBcInVybFwiOiBcImh0dHA6Ly9naXRodWIuY29tL256YWthcy9lc3ByZWUvcmF3L21hc3Rlci9MSUNFTlNFXCJcbiAgICB9XG4gIF0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeNy4wLjBcIixcbiAgICBcImNoYWlcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJjb21wbGV4aXR5LXJlcG9ydFwiOiBcIn4wLjYuMVwiLFxuICAgIFwiZGF0ZWZvcm1hdFwiOiBcIl4xLjAuMTFcIixcbiAgICBcImVzbGludFwiOiBcIl4wLjkuMlwiLFxuICAgIFwiZXNwcmltYVwiOiBcImdpdDovL2dpdGh1Yi5jb20vanF1ZXJ5L2VzcHJpbWFcIixcbiAgICBcImVzcHJpbWEtZmJcIjogXCJeODAwMS4yMDAxLjAtZGV2LWhhcm1vbnktZmJcIixcbiAgICBcImlzdGFuYnVsXCI6IFwifjAuMi42XCIsXG4gICAgXCJqc29uLWRpZmZcIjogXCJ+MC4zLjFcIixcbiAgICBcImxlY2hlXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjAuMVwiLFxuICAgIFwibnBtLWxpY2Vuc2VcIjogXCJeMC4yLjNcIixcbiAgICBcIm9wdGltaXN0XCI6IFwifjAuNi4wXCIsXG4gICAgXCJyZWdlbmVyYXRlXCI6IFwifjAuNS40XCIsXG4gICAgXCJzZW12ZXJcIjogXCJeNC4xLjFcIixcbiAgICBcInNoZWxsanNcIjogXCJeMC4zLjBcIixcbiAgICBcInNoZWxsanMtbm9kZWNsaVwiOiBcIl4wLjEuMVwiLFxuICAgIFwidW5pY29kZS02LjMuMFwiOiBcIn4wLjEuMFwiXG4gIH0sXG4gIFwia2V5d29yZHNcIjogW1xuICAgIFwiYXN0XCIsXG4gICAgXCJlY21hc2NyaXB0XCIsXG4gICAgXCJqYXZhc2NyaXB0XCIsXG4gICAgXCJwYXJzZXJcIixcbiAgICBcInN5bnRheFwiXG4gIF0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJnZW5lcmF0ZS1yZWdleFwiOiBcIm5vZGUgdG9vbHMvZ2VuZXJhdGUtaWRlbnRpZmllci1yZWdleC5qc1wiLFxuICAgIFwidGVzdFwiOiBcIm5wbSBydW4tc2NyaXB0IGxpbnQgJiYgbm9kZSBNYWtlZmlsZS5qcyB0ZXN0ICYmIG5vZGUgdGVzdC9ydW4uanNcIixcbiAgICBcImxpbnRcIjogXCJub2RlIE1ha2VmaWxlLmpzIGxpbnRcIixcbiAgICBcInBhdGNoXCI6IFwibm9kZSBNYWtlZmlsZS5qcyBwYXRjaFwiLFxuICAgIFwibWlub3JcIjogXCJub2RlIE1ha2VmaWxlLmpzIG1pbm9yXCIsXG4gICAgXCJtYWpvclwiOiBcIm5vZGUgTWFrZWZpbGUuanMgbWFqb3JcIixcbiAgICBcImJyb3dzZXJpZnlcIjogXCJub2RlIE1ha2VmaWxlLmpzIGJyb3dzZXJpZnlcIixcbiAgICBcImNvdmVyYWdlXCI6IFwibnBtIHJ1bi1zY3JpcHQgYW5hbHl6ZS1jb3ZlcmFnZSAmJiBucG0gcnVuLXNjcmlwdCBjaGVjay1jb3ZlcmFnZVwiLFxuICAgIFwiYW5hbHl6ZS1jb3ZlcmFnZVwiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL2lzdGFuYnVsL2xpYi9jbGkuanMgY292ZXIgdGVzdC9ydW5uZXIuanNcIixcbiAgICBcImNoZWNrLWNvdmVyYWdlXCI6IFwibm9kZSBub2RlX21vZHVsZXMvaXN0YW5idWwvbGliL2NsaS5qcyBjaGVjay1jb3ZlcmFnZSAtLXN0YXRlbWVudCA5OSAtLWJyYW5jaCA5OSAtLWZ1bmN0aW9uIDk5XCIsXG4gICAgXCJjb21wbGV4aXR5XCI6IFwibnBtIHJ1bi1zY3JpcHQgYW5hbHl6ZS1jb21wbGV4aXR5ICYmIG5wbSBydW4tc2NyaXB0IGNoZWNrLWNvbXBsZXhpdHlcIixcbiAgICBcImFuYWx5emUtY29tcGxleGl0eVwiOiBcIm5vZGUgdG9vbHMvbGlzdC1jb21wbGV4aXR5LmpzXCIsXG4gICAgXCJjaGVjay1jb21wbGV4aXR5XCI6IFwibm9kZSBub2RlX21vZHVsZXMvY29tcGxleGl0eS1yZXBvcnQvc3JjL2NsaS5qcyAtLW1heGNjIDE0IC0tc2lsZW50IC1sIC13IGVzcHJlZS5qc1wiLFxuICAgIFwiYmVuY2htYXJrXCI6IFwibm9kZSB0ZXN0L2JlbmNobWFya3MuanNcIixcbiAgICBcImJlbmNobWFyay1xdWlja1wiOiBcIm5vZGUgdGVzdC9iZW5jaG1hcmtzLmpzIHF1aWNrXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge30sXG4gIFwiZ2l0SGVhZFwiOiBcIjcxYjQzM2JmMWIzZjU3MDQ1MmI5ODdhMDZjNWRiNjE1ZDExMjI1ZTZcIixcbiAgXCJfaWRcIjogXCJlc3ByZWVAMi4wLjJcIixcbiAgXCJfc2hhc3VtXCI6IFwiYWRhZWZkODAzYWQ1MDE3NzllMjA2M2IzNTc1NDlhZTMzNjZmZDE0Y1wiLFxuICBcIl9mcm9tXCI6IFwiZXNwcmVlQD49Mi4wLjEgPDMuMC4wXCIsXG4gIFwiX25wbVZlcnNpb25cIjogXCIxLjQuMjhcIixcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwibnpha2FzXCIsXG4gICAgXCJlbWFpbFwiOiBcIm5pY2hvbGFzQG5jemNvbnN1bHRpbmcuY29tXCJcbiAgfSxcbiAgXCJtYWludGFpbmVyc1wiOiBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwibnpha2FzXCIsXG4gICAgICBcImVtYWlsXCI6IFwibmljaG9sYXNAbmN6Y29uc3VsdGluZy5jb21cIlxuICAgIH1cbiAgXSxcbiAgXCJkaXN0XCI6IHtcbiAgICBcInNoYXN1bVwiOiBcImFkYWVmZDgwM2FkNTAxNzc5ZTIwNjNiMzU3NTQ5YWUzMzY2ZmQxNGNcIixcbiAgICBcInRhcmJhbGxcIjogXCJodHRwOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJlZS8tL2VzcHJlZS0yLjAuMi50Z3pcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHt9LFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJlZS8tL2VzcHJlZS0yLjAuMi50Z3pcIixcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCJcbn1cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG4vKmpzbGludCB2YXJzOmZhbHNlLCBiaXR3aXNlOnRydWUqL1xuLypqc2hpbnQgaW5kZW50OjQqL1xuLypnbG9iYWwgZXhwb3J0czp0cnVlKi9cbihmdW5jdGlvbiBjbG9uZShleHBvcnRzKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIFN5bnRheCxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAgVmlzaXRvck9wdGlvbixcbiAgICAgICAgVmlzaXRvcktleXMsXG4gICAgICAgIG9iamVjdENyZWF0ZSxcbiAgICAgICAgb2JqZWN0S2V5cyxcbiAgICAgICAgQlJFQUssXG4gICAgICAgIFNLSVAsXG4gICAgICAgIFJFTU9WRTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUpTSGludEVycm9yKCkgeyB9XG5cbiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICBpZiAoIWlzQXJyYXkpIHtcbiAgICAgICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleSwgdmFsO1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBkZWVwQ29weSh2YWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldFtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYWxsb3dDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKHNoYWxsb3dDb3B5KTtcblxuICAgIC8vIGJhc2VkIG9uIExMVk0gbGliYysrIHVwcGVyX2JvdW5kIC8gbG93ZXJfYm91bmRcbiAgICAvLyBNSVQgTGljZW5zZVxuXG4gICAgZnVuY3Rpb24gdXBwZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKGxvd2VyQm91bmQpO1xuXG4gICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSB8fCAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBGKCkgeyB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICBGLnByb3RvdHlwZSA9IG87XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYoKTtcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgIHZhciBrZXlzID0gW10sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gbykge1xuICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGV4dGVuZCh0bywgZnJvbSkge1xuICAgICAgICB2YXIga2V5cyA9IG9iamVjdEtleXMoZnJvbSksIGtleSwgaSwgbGVuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgU3ludGF4ID0ge1xuICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJyxcbiAgICAgICAgQXNzaWdubWVudFBhdHRlcm46ICdBc3NpZ25tZW50UGF0dGVybicsXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsXG4gICAgICAgIEFycmF5UGF0dGVybjogJ0FycmF5UGF0dGVybicsXG4gICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nLFxuICAgICAgICBBd2FpdEV4cHJlc3Npb246ICdBd2FpdEV4cHJlc3Npb24nLCAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJyxcbiAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsXG4gICAgICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLFxuICAgICAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJyxcbiAgICAgICAgQ2xhc3NCb2R5OiAnQ2xhc3NCb2R5JyxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICBDbGFzc0V4cHJlc3Npb246ICdDbGFzc0V4cHJlc3Npb24nLFxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6ICdDb21wcmVoZW5zaW9uQmxvY2snLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiAnQ29tcHJlaGVuc2lvbkV4cHJlc3Npb24nLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLFxuICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JyxcbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiAnRGlyZWN0aXZlU3RhdGVtZW50JyxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLFxuICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JyxcbiAgICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb246ICdFeHBvcnRBbGxEZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiAnRXhwb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLFxuICAgICAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JyxcbiAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6ICdGb3JPZlN0YXRlbWVudCcsXG4gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJyxcbiAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogJ0dlbmVyYXRvckV4cHJlc3Npb24nLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsXG4gICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiAnSW1wb3J0RGVjbGFyYXRpb24nLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydFNwZWNpZmllcjogJ0ltcG9ydFNwZWNpZmllcicsXG4gICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJyxcbiAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHByZXNzaW9uJyxcbiAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLFxuICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogJ01vZHVsZVNwZWNpZmllcicsXG4gICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJyxcbiAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLFxuICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0UGF0dGVybicsXG4gICAgICAgIFByb2dyYW06ICdQcm9ncmFtJyxcbiAgICAgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsXG4gICAgICAgIFJlc3RFbGVtZW50OiAnUmVzdEVsZW1lbnQnLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLFxuICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLFxuICAgICAgICBTcHJlYWRFbGVtZW50OiAnU3ByZWFkRWxlbWVudCcsXG4gICAgICAgIFN1cGVyRXhwcmVzc2lvbjogJ1N1cGVyRXhwcmVzc2lvbicsXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsXG4gICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJyxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJyxcbiAgICAgICAgVGVtcGxhdGVFbGVtZW50OiAnVGVtcGxhdGVFbGVtZW50JyxcbiAgICAgICAgVGVtcGxhdGVMaXRlcmFsOiAnVGVtcGxhdGVMaXRlcmFsJyxcbiAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsXG4gICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLFxuICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLFxuICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJyxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJyxcbiAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsXG4gICAgICAgIFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JyxcbiAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRFeHByZXNzaW9uJ1xuICAgIH07XG5cbiAgICBWaXNpdG9yS2V5cyA9IHtcbiAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBBc3NpZ25tZW50UGF0dGVybjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogWydlbGVtZW50cyddLFxuICAgICAgICBBcnJheVBhdHRlcm46IFsnZWxlbWVudHMnXSxcbiAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IFsncGFyYW1zJywgJ2JvZHknXSxcbiAgICAgICAgQXdhaXRFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBCbG9ja1N0YXRlbWVudDogWydib2R5J10sXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBCcmVha1N0YXRlbWVudDogWydsYWJlbCddLFxuICAgICAgICBDYWxsRXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1lbnRzJ10sXG4gICAgICAgIENhdGNoQ2xhdXNlOiBbJ3BhcmFtJywgJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NCb2R5OiBbJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogWydpZCcsICdzdXBlckNsYXNzJywgJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBbJ2lkJywgJ3N1cGVyQ2xhc3MnLCAnYm9keSddLFxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6IFsnbGVmdCcsICdyaWdodCddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiBbJ2Jsb2NrcycsICdmaWx0ZXInLCAnYm9keSddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnLCAnYWx0ZXJuYXRlJ10sXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiBbJ2xhYmVsJ10sXG4gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogWydib2R5JywgJ3Rlc3QnXSxcbiAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6IFtdLFxuICAgICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogWydzb3VyY2UnXSxcbiAgICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9uJ10sXG4gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb24nLCAnc3BlY2lmaWVycycsICdzb3VyY2UnXSxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiBbJ2V4cG9ydGVkJywgJ2xvY2FsJ10sXG4gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IFsnZXhwcmVzc2lvbiddLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6IFsnaW5pdCcsICd0ZXN0JywgJ3VwZGF0ZScsICdib2R5J10sXG4gICAgICAgIEZvckluU3RhdGVtZW50OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9keSddLFxuICAgICAgICBGb3JPZlN0YXRlbWVudDogWydsZWZ0JywgJ3JpZ2h0JywgJ2JvZHknXSxcbiAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogWydpZCcsICdwYXJhbXMnLCAnYm9keSddLFxuICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246IFsnaWQnLCAncGFyYW1zJywgJ2JvZHknXSxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogWydibG9ja3MnLCAnZmlsdGVyJywgJ2JvZHknXSwgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBJZGVudGlmaWVyOiBbXSxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6IFsndGVzdCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLFxuICAgICAgICBJbXBvcnREZWNsYXJhdGlvbjogWydzcGVjaWZpZXJzJywgJ3NvdXJjZSddLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBbJ2xvY2FsJ10sXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogWydsb2NhbCddLFxuICAgICAgICBJbXBvcnRTcGVjaWZpZXI6IFsnaW1wb3J0ZWQnLCAnbG9jYWwnXSxcbiAgICAgICAgTGl0ZXJhbDogW10sXG4gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6IFsnbGFiZWwnLCAnYm9keSddLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIE1lbWJlckV4cHJlc3Npb246IFsnb2JqZWN0JywgJ3Byb3BlcnR5J10sXG4gICAgICAgIE1ldGhvZERlZmluaXRpb246IFsna2V5JywgJ3ZhbHVlJ10sXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogW10sXG4gICAgICAgIE5ld0V4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3VtZW50cyddLFxuICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBbJ3Byb3BlcnRpZXMnXSxcbiAgICAgICAgT2JqZWN0UGF0dGVybjogWydwcm9wZXJ0aWVzJ10sXG4gICAgICAgIFByb2dyYW06IFsnYm9keSddLFxuICAgICAgICBQcm9wZXJ0eTogWydrZXknLCAndmFsdWUnXSxcbiAgICAgICAgUmVzdEVsZW1lbnQ6IFsgJ2FyZ3VtZW50JyBdLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiBbJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFNwcmVhZEVsZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU3VwZXJFeHByZXNzaW9uOiBbJ3N1cGVyJ10sXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogWydkaXNjcmltaW5hbnQnLCAnY2FzZXMnXSxcbiAgICAgICAgU3dpdGNoQ2FzZTogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnXSxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBbJ3RhZycsICdxdWFzaSddLFxuICAgICAgICBUZW1wbGF0ZUVsZW1lbnQ6IFtdLFxuICAgICAgICBUZW1wbGF0ZUxpdGVyYWw6IFsncXVhc2lzJywgJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFRoaXNFeHByZXNzaW9uOiBbXSxcbiAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgVHJ5U3RhdGVtZW50OiBbJ2Jsb2NrJywgJ2hhbmRsZXInLCAnZmluYWxpemVyJ10sXG4gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogWydhcmd1bWVudCddLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb25zJ10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogWydpZCcsICdpbml0J10sXG4gICAgICAgIFdoaWxlU3RhdGVtZW50OiBbJ3Rlc3QnLCAnYm9keSddLFxuICAgICAgICBXaXRoU3RhdGVtZW50OiBbJ29iamVjdCcsICdib2R5J10sXG4gICAgICAgIFlpZWxkRXhwcmVzc2lvbjogWydhcmd1bWVudCddXG4gICAgfTtcblxuICAgIC8vIHVuaXF1ZSBpZFxuICAgIEJSRUFLID0ge307XG4gICAgU0tJUCA9IHt9O1xuICAgIFJFTU9WRSA9IHt9O1xuXG4gICAgVmlzaXRvck9wdGlvbiA9IHtcbiAgICAgICAgQnJlYWs6IEJSRUFLLFxuICAgICAgICBTa2lwOiBTS0lQLFxuICAgICAgICBSZW1vdmU6IFJFTU9WRVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBSZWZlcmVuY2UocGFyZW50LCBrZXkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cblxuICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uobm9kZSkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLmtleV0gPSBub2RlO1xuICAgIH07XG5cbiAgICBSZWZlcmVuY2UucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGhpcy5wYXJlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zcGxpY2UodGhpcy5rZXksIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UobnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gRWxlbWVudChub2RlLCBwYXRoLCB3cmFwLCByZWYpIHtcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgdGhpcy5yZWYgPSByZWY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQ29udHJvbGxlcigpIHsgfVxuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiBwcm9wZXJ0eSBwYXRoIGFycmF5IGZyb20gcm9vdCB0byBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gcGF0aCgpIHtcbiAgICAgICAgdmFyIGksIGl6LCBqLCBqeiwgcmVzdWx0LCBlbGVtZW50O1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFRvUGF0aChyZXN1bHQsIHBhdGgpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMCwganogPSBwYXRoLmxlbmd0aDsgaiA8IGp6OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aFtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJvb3Qgbm9kZVxuICAgICAgICBpZiAoIXRoaXMuX19jdXJyZW50LnBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50aW5lbCwgc2Vjb25kIG5vZGUgaXMgcm9vdCBlbGVtZW50XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAyLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuX19sZWF2ZWxpc3RbaV07XG4gICAgICAgICAgICBhZGRUb1BhdGgocmVzdWx0LCBlbGVtZW50LnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRvUGF0aChyZXN1bHQsIHRoaXMuX19jdXJyZW50LnBhdGgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIHR5cGUgb2YgY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUudHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmN1cnJlbnQoKTtcbiAgICAgICAgcmV0dXJuIG5vZGUudHlwZSB8fCB0aGlzLl9fY3VycmVudC53cmFwO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIGFycmF5IG9mIHBhcmVudCBlbGVtZW50c1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnBhcmVudHMgPSBmdW5jdGlvbiBwYXJlbnRzKCkge1xuICAgICAgICB2YXIgaSwgaXosIHJlc3VsdDtcblxuICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5fX2xlYXZlbGlzdFtpXS5ub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyByZXR1cm4gY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIGN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fY3VycmVudC5ub2RlO1xuICAgIH07XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fX2V4ZWN1dGUgPSBmdW5jdGlvbiBfX2V4ZWN1dGUoY2FsbGJhY2ssIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzLCByZXN1bHQ7XG5cbiAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHByZXZpb3VzICA9IHRoaXMuX19jdXJyZW50O1xuICAgICAgICB0aGlzLl9fY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2suY2FsbCh0aGlzLCBlbGVtZW50Lm5vZGUsIHRoaXMuX19sZWF2ZWxpc3RbdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGggLSAxXS5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9fY3VycmVudCA9IHByZXZpb3VzO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyBub3RpZnkgY29udHJvbCBza2lwIC8gYnJlYWtcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZmxhZykge1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBmbGFnO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gc2tpcCBjaGlsZCBub2RlcyBvZiBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeShTS0lQKTtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIGJyZWFrIHRyYXZlcnNhbHNcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZVsnYnJlYWsnXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoQlJFQUspO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmVtb3ZlIG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KFJFTU9WRSk7XG4gICAgfTtcblxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdGhpcy52aXNpdG9yID0gdmlzaXRvcjtcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgdGhpcy5fX3dvcmtsaXN0ID0gW107XG4gICAgICAgIHRoaXMuX19sZWF2ZWxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9fZmFsbGJhY2sgPSB2aXNpdG9yLmZhbGxiYWNrID09PSAnaXRlcmF0aW9uJztcbiAgICAgICAgdGhpcy5fX2tleXMgPSBWaXNpdG9yS2V5cztcbiAgICAgICAgaWYgKHZpc2l0b3Iua2V5cykge1xuICAgICAgICAgICAgdGhpcy5fX2tleXMgPSBleHRlbmQob2JqZWN0Q3JlYXRlKHRoaXMuX19rZXlzKSwgdmlzaXRvci5rZXlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc05vZGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZS50eXBlID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Byb3BlcnR5KG5vZGVUeXBlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIChub2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RQYXR0ZXJuKSAmJiAncHJvcGVydGllcycgPT09IGtleTtcbiAgICB9XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIHdvcmtsaXN0LFxuICAgICAgICAgICAgbGVhdmVsaXN0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjdXJyZW50MixcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICAgICAgICBjYW5kaWRhdGUsXG4gICAgICAgICAgICBzZW50aW5lbDtcblxuICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTtcblxuICAgICAgICBzZW50aW5lbCA9IHt9O1xuXG4gICAgICAgIC8vIHJlZmVyZW5jZVxuICAgICAgICB3b3JrbGlzdCA9IHRoaXMuX193b3JrbGlzdDtcbiAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDtcblxuICAgICAgICAvLyBpbml0aWFsaXplXG4gICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQocm9vdCwgbnVsbCwgbnVsbCwgbnVsbCkpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChuZXcgRWxlbWVudChudWxsLCBudWxsLCBudWxsLCBudWxsKSk7XG5cbiAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGUpIHtcblxuICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7XG4gICAgICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBTS0lQIHx8IHJldCA9PT0gU0tJUCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gdGhpcy5fX2tleXNbbm9kZVR5cGVdO1xuICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gb2JqZWN0S2V5cyhub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBjYW5kaWRhdGVzW2N1cnJlbnRdO1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQyID0gY2FuZGlkYXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlW2N1cnJlbnQyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvcGVydHkobm9kZVR5cGUsIGNhbmRpZGF0ZXNbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sICdQcm9wZXJ0eScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBudWxsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uocm9vdCwgdmlzaXRvcikge1xuICAgICAgICBmdW5jdGlvbiByZW1vdmVFbGVtKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBuZXh0RWxlbSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnJlZi5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHJlZmVyZW5jZSBpcyBhbiBlbGVtZW50IG9mIGFuIGFycmF5LlxuICAgICAgICAgICAgICAgIGtleSA9IGVsZW1lbnQucmVmLmtleTtcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtZW50LnJlZi5wYXJlbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiByZW1vdmVkIGZyb20gYXJyYXksIHRoZW4gZGVjcmVhc2UgZm9sbG93aW5nIGl0ZW1zJyBrZXlzLlxuICAgICAgICAgICAgICAgIGkgPSB3b3JrbGlzdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbSA9IHdvcmtsaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW0ucmVmICYmIG5leHRFbGVtLnJlZi5wYXJlbnQgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgIChuZXh0RWxlbS5yZWYua2V5IDwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAtLW5leHRFbGVtLnJlZi5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd29ya2xpc3QsXG4gICAgICAgICAgICBsZWF2ZWxpc3QsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZVR5cGUsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGN1cnJlbnQyLFxuICAgICAgICAgICAgY2FuZGlkYXRlcyxcbiAgICAgICAgICAgIGNhbmRpZGF0ZSxcbiAgICAgICAgICAgIHNlbnRpbmVsLFxuICAgICAgICAgICAgb3V0ZXIsXG4gICAgICAgICAgICBrZXk7XG5cbiAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7XG5cbiAgICAgICAgc2VudGluZWwgPSB7fTtcblxuICAgICAgICAvLyByZWZlcmVuY2VcbiAgICAgICAgd29ya2xpc3QgPSB0aGlzLl9fd29ya2xpc3Q7XG4gICAgICAgIGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxpc3Q7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZVxuICAgICAgICBvdXRlciA9IHtcbiAgICAgICAgICAgIHJvb3Q6IHJvb3RcbiAgICAgICAgfTtcbiAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG5ldyBSZWZlcmVuY2Uob3V0ZXIsICdyb290JykpO1xuICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTtcblxuICAgICAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3QucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBzZW50aW5lbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsZWF2ZWxpc3QucG9wKCk7XG5cbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmxlYXZlLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCxcbiAgICAgICAgICAgICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuZGVmaW5lZCBhbmQgbnVsbCBpbiB0aGlzIHBsYWNlXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWYucmVwbGFjZSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFbGVtKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgLy8gbm9kZSBtYXkgYmUgcmVwbGFjZWQgd2l0aCBudWxsLFxuICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZVxuICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZVxuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5vZGUgPSB0YXJnZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUVsZW0oZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5ub2RlID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgdGFyZ2V0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBub2RlIG1heSBiZSBudWxsXG4gICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc2VudGluZWwpO1xuICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFNLSVAgfHwgdGFyZ2V0ID09PSBTS0lQKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSB0aGlzLl9fa2V5c1tub2RlVHlwZV07XG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBvYmplY3RLZXlzKG5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVbY3VycmVudDJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eShub2RlVHlwZSwgY2FuZGlkYXRlc1tjdXJyZW50XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVsbCwgbmV3IFJlZmVyZW5jZShjYW5kaWRhdGUsIGN1cnJlbnQyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUsIGtleSwgbnVsbCwgbmV3IFJlZmVyZW5jZShub2RlLCBrZXkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci50cmF2ZXJzZShyb290LCB2aXNpdG9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci5yZXBsYWNlKHJvb3QsIHZpc2l0b3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZENvbW1lbnRSYW5nZShjb21tZW50LCB0b2tlbnMpIHtcbiAgICAgICAgdmFyIHRhcmdldDtcblxuICAgICAgICB0YXJnZXQgPSB1cHBlckJvdW5kKHRva2VucywgZnVuY3Rpb24gc2VhcmNoKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4ucmFuZ2VbMF0gPiBjb21tZW50LnJhbmdlWzBdO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbY29tbWVudC5yYW5nZVswXSwgY29tbWVudC5yYW5nZVsxXV07XG5cbiAgICAgICAgaWYgKHRhcmdldCAhPT0gdG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQgLT0gMTtcbiAgICAgICAgaWYgKHRhcmdldCA+PSAwKSB7XG4gICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0gPSB0b2tlbnNbdGFyZ2V0XS5yYW5nZVsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21tZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHRyZWUsIHByb3ZpZGVkQ29tbWVudHMsIHRva2Vucykge1xuICAgICAgICAvLyBBdCBmaXJzdCwgd2Ugc2hvdWxkIGNhbGN1bGF0ZSBleHRlbmRlZCBjb21tZW50IHJhbmdlcy5cbiAgICAgICAgdmFyIGNvbW1lbnRzID0gW10sIGNvbW1lbnQsIGxlbiwgaSwgY3Vyc29yO1xuXG4gICAgICAgIGlmICghdHJlZS5yYW5nZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRhY2hDb21tZW50cyBuZWVkcyByYW5nZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG9rZW5zIGFycmF5IGlzIGVtcHR5LCB3ZSBhdHRhY2ggY29tbWVudHMgdG8gdHJlZSBhcyAnbGVhZGluZ0NvbW1lbnRzJ1xuICAgICAgICBpZiAoIXRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChwcm92aWRlZENvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbMCwgdHJlZS5yYW5nZVswXV07XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyZWUubGVhZGluZ0NvbW1lbnRzID0gY29tbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJlZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZXh0ZW5kQ29tbWVudFJhbmdlKGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pLCB0b2tlbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gSm9obiBGcmVlbWFuJ3MgaW1wbGVtZW50YXRpb24uXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9PT0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPCBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPT09IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLnRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cblxuICAgIGV4cG9ydHMudmVyc2lvbiA9IHJlcXVpcmUoJy4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgICBleHBvcnRzLlN5bnRheCA9IFN5bnRheDtcbiAgICBleHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7XG4gICAgZXhwb3J0cy5yZXBsYWNlID0gcmVwbGFjZTtcbiAgICBleHBvcnRzLmF0dGFjaENvbW1lbnRzID0gYXR0YWNoQ29tbWVudHM7XG4gICAgZXhwb3J0cy5WaXNpdG9yS2V5cyA9IFZpc2l0b3JLZXlzO1xuICAgIGV4cG9ydHMuVmlzaXRvck9wdGlvbiA9IFZpc2l0b3JPcHRpb247XG4gICAgZXhwb3J0cy5Db250cm9sbGVyID0gQ29udHJvbGxlcjtcbiAgICBleHBvcnRzLmNsb25lRW52aXJvbm1lbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjbG9uZSh7fSk7IH07XG5cbiAgICByZXR1cm4gZXhwb3J0cztcbn0oZXhwb3J0cykpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwiZXN0cmF2ZXJzZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiRUNNQVNjcmlwdCBKUyBBU1QgdHJhdmVyc2FsIGZ1bmN0aW9uc1wiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZVwiLFxuICBcIm1haW5cIjogXCJlc3RyYXZlcnNlLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMS4wXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0wLjEwLjBcIlxuICB9LFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJjb25zdGVsbGF0aW9uXCIsXG4gICAgICBcImVtYWlsXCI6IFwidXRhdGFuZS50ZWFAZ21haWwuY29tXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIm1pY2hhZWxmaWNhcnJhXCIsXG4gICAgICBcImVtYWlsXCI6IFwibnBtQG1pY2hhZWwuZmljYXJyYS5tZVwiXG4gICAgfVxuICBdLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXN0b29scy9lc3RyYXZlcnNlLmdpdFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImNoYWlcIjogXCJeMi4xLjFcIixcbiAgICBcImNvZmZlZS1zY3JpcHRcIjogXCJeMS44LjBcIixcbiAgICBcImVzcHJlZVwiOiBcIl4xLjExLjBcIixcbiAgICBcImd1bHBcIjogXCJeMy44LjEwXCIsXG4gICAgXCJndWxwLWJ1bXBcIjogXCJeMC4yLjJcIixcbiAgICBcImd1bHAtZmlsdGVyXCI6IFwiXjIuMC4wXCIsXG4gICAgXCJndWxwLWdpdFwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC10YWctdmVyc2lvblwiOiBcIl4xLjIuMVwiLFxuICAgIFwianNoaW50XCI6IFwiXjIuNS42XCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjEuMFwiXG4gIH0sXG4gIFwibGljZW5zZXNcIjogW1xuICAgIHtcbiAgICAgIFwidHlwZVwiOiBcIkJTRFwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9lc3Rvb2xzL2VzdHJhdmVyc2UvcmF3L21hc3Rlci9MSUNFTlNFLkJTRFwiXG4gICAgfVxuICBdLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwidGVzdFwiOiBcIm5wbSBydW4tc2NyaXB0IGxpbnQgJiYgbnBtIHJ1bi1zY3JpcHQgdW5pdC10ZXN0XCIsXG4gICAgXCJsaW50XCI6IFwianNoaW50IGVzdHJhdmVyc2UuanNcIixcbiAgICBcInVuaXQtdGVzdFwiOiBcIm1vY2hhIC0tY29tcGlsZXJzIGNvZmZlZTpjb2ZmZWUtc2NyaXB0L3JlZ2lzdGVyXCJcbiAgfSxcbiAgXCJnaXRIZWFkXCI6IFwiMTY2ZWJiZTBhOGQ0NWNlYjIzOTFiNmY1ZWY1ZDFiYWI2YmZiMjY3YVwiLFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZS9pc3N1ZXNcIlxuICB9LFxuICBcIl9pZFwiOiBcImVzdHJhdmVyc2VAMy4xLjBcIixcbiAgXCJfc2hhc3VtXCI6IFwiMTVlMjhhNDQ2YjhiODJiYzcwMGNjYzhiOTZjNzhhZjRkYTBkNmNiYVwiLFxuICBcIl9mcm9tXCI6IFwiZXN0cmF2ZXJzZUA+PTMuMS4wIDw0LjAuMFwiLFxuICBcIl9ucG1WZXJzaW9uXCI6IFwiMi4wLjAtYWxwaGEtNVwiLFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJjb25zdGVsbGF0aW9uXCIsXG4gICAgXCJlbWFpbFwiOiBcInV0YXRhbmUudGVhQGdtYWlsLmNvbVwiXG4gIH0sXG4gIFwiZGlzdFwiOiB7XG4gICAgXCJzaGFzdW1cIjogXCIxNWUyOGE0NDZiOGI4MmJjNzAwY2NjOGI5NmM3OGFmNGRhMGQ2Y2JhXCIsXG4gICAgXCJ0YXJiYWxsXCI6IFwiaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS0zLjEuMC50Z3pcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHt9LFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdHJhdmVyc2UvLS9lc3RyYXZlcnNlLTMuMS4wLnRnelwiLFxuICBcInJlYWRtZVwiOiBcIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCFcIlxufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgc2V0SW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gYWRkRnJvbVNldEltbWVkaWF0ZUFyZ3VtZW50cyhhcmdzKSB7XG4gICAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSBwYXJ0aWFsbHlBcHBsaWVkLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBzZXRJbW1lZGlhdGUsIGJ1dFxuICAgIC8vIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIG5vIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBwYXJ0aWFsbHlBcHBsaWVkKGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAobmV3IEZ1bmN0aW9uKFwiXCIgKyBoYW5kbGVyKSkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHBhcnRpYWxseUFwcGxpZWQocnVuSWZQcmVzZW50LCBoYW5kbGUpLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgc2V0SW1tZWRpYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gYWRkRnJvbVNldEltbWVkaWF0ZUFyZ3VtZW50cyhhcmd1bWVudHMpO1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhwYXJ0aWFsbHlBcHBsaWVkKHJ1bklmUHJlc2VudCwgaGFuZGxlKSk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRJbW1lZGlhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBhZGRGcm9tU2V0SW1tZWRpYXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRJbW1lZGlhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBhZGRGcm9tU2V0SW1tZWRpYXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgc2V0SW1tZWRpYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gYWRkRnJvbVNldEltbWVkaWF0ZUFyZ3VtZW50cyhhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGFkZEZyb21TZXRJbW1lZGlhdGVBcmd1bWVudHMoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocGFydGlhbGx5QXBwbGllZChydW5JZlByZXNlbnQsIGhhbmRsZSksIDApO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkpKTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuIC8qanNsaW50IG5vZGU6IHRydWUgKi9cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTdGF0aWMgYW5hbHlzaXMgZm9yIFBvbHltZXIuXG4gKiBAbmFtZXNwYWNlIGh5ZHJvbHlzaXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFuYWx5emVyOiAgICAgcmVxdWlyZSgnLi9saWIvYW5hbHl6ZXInKSxcbiAgZG9jczogICAgICAgICByZXF1aXJlKCcuL2xpYi9hc3QtdXRpbHMvZG9jcycpLFxuICBGU1Jlc29sdmVyOiAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci9mcy1yZXNvbHZlcicpLFxuICBqc2RvYzogICAgICAgIHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9qc2RvYycpLFxuICBMb2FkZXI6ICAgICAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci9maWxlLWxvYWRlcicpLFxuICBOb29wUmVzb2x2ZXI6IHJlcXVpcmUoJy4vbGliL2xvYWRlci9ub29wLXJlc29sdmVyJyksXG4gIFhIUlJlc29sdmVyOiAgcmVxdWlyZSgnLi9saWIvbG9hZGVyL3hoci1yZXNvbHZlcicpLFxuICBfanNQYXJzZTogICAgIHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9qcy1wYXJzZScpLFxuICBfaW1wb3J0UGFyc2U6IHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9pbXBvcnQtcGFyc2UnKSxcbn07XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvYW5hbHl6ZXIuanMiLCJsaWIvYXN0LXV0aWxzL2FuYWx5emUtcHJvcGVydGllcy5qcyIsImxpYi9hc3QtdXRpbHMvYXN0LXZhbHVlLmpzIiwibGliL2FzdC11dGlscy9iZWhhdmlvci1maW5kZXIuanMiLCJsaWIvYXN0LXV0aWxzL2RvY3MuanMiLCJsaWIvYXN0LXV0aWxzL2VsZW1lbnQtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9lc3V0aWwuanMiLCJsaWIvYXN0LXV0aWxzL2ZlYXR1cmUtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9maW5kLWFsaWFzLmpzIiwibGliL2FzdC11dGlscy9pbXBvcnQtcGFyc2UuanMiLCJsaWIvYXN0LXV0aWxzL2pzLXBhcnNlLmpzIiwibGliL2FzdC11dGlscy9qc2RvYy5qcyIsImxpYi9sb2FkZXIvZmlsZS1sb2FkZXIuanMiLCJsaWIvbG9hZGVyL2ZzLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci9ub29wLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci94aHItcmVzb2x2ZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3BhdGgtYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHVueWNvZGUvcHVueWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2RlY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy91cmwvdXJsLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvZG9tNS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vZG9jdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9mb3JlaWduX2NvbnRlbnQuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vaHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi91bmljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvanNkb20vanNkb21fcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvanNkb20vcGFyc2luZ191bml0LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvc2VyaWFsaXphdGlvbi9zZXJpYWxpemVyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvc2ltcGxlX2FwaS9zaW1wbGVfYXBpX3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3NpbXBsZV9hcGkvdG9rZW5pemVyX3Byb3h5LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdG9rZW5pemF0aW9uL2xvY2F0aW9uX2luZm9fbWl4aW4uanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vbmFtZWRfZW50aXR5X3RyaWUuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vcHJlcHJvY2Vzc29yLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdG9rZW5pemF0aW9uL3Rva2VuaXplci5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfYWRhcHRlcnMvZGVmYXVsdC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfYWRhcHRlcnMvaHRtbHBhcnNlcjIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2NvbnN0cnVjdGlvbi9mb3JtYXR0aW5nX2VsZW1lbnRfbGlzdC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL2xvY2F0aW9uX2luZm9fbWl4aW4uanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2NvbnN0cnVjdGlvbi9vcGVuX2VsZW1lbnRfc3RhY2suanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90cmVlX2NvbnN0cnVjdGlvbi9wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZXM2LXByb21pc2UvZGlzdC9lczYtcHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvZXNwcmVlLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvYXN0LW5vZGUtZmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL2FzdC1ub2RlLXR5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvY29tbWVudC1hdHRhY2htZW50LmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvZmVhdHVyZXMuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9tZXNzYWdlcy5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL3N0cmluZy1tYXAuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9zeW50YXguanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi90b2tlbi1pbmZvLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIveGh0bWwtZW50aXRpZXMuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9lc3RyYXZlcnNlL2VzdHJhdmVyc2UuanMiLCJub2RlX21vZHVsZXMvZXN0cmF2ZXJzZS9wYWNrYWdlLmpzb24iLCJub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3hlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcllBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3d0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM3dGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4OEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcDJLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcDZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3owQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDL0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0Jztcbi8vIGpzaGludCAtVzA3OVxudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZSB8fCByZXF1aXJlKCdlczYtcHJvbWlzZScpLlByb21pc2U7XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8ganNoaW50ICtXMDc5XG5cbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuXG52YXIgZG9jcyA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2RvY3MnKTtcbnZhciBGaWxlTG9hZGVyID0gcmVxdWlyZSgnLi9sb2FkZXIvZmlsZS1sb2FkZXInKTtcbnZhciBpbXBvcnRQYXJzZSA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2ltcG9ydC1wYXJzZScpO1xudmFyIGpzUGFyc2UgPSByZXF1aXJlKCcuL2FzdC11dGlscy9qcy1wYXJzZScpO1xudmFyIE5vb3BSZXNvbHZlciA9IHJlcXVpcmUoJy4vbG9hZGVyL25vb3AtcmVzb2x2ZXInKTtcblxuZnVuY3Rpb24gcmVkdWNlTWV0YWRhdGEobTEsIG0yKSB7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6ICBtMS5lbGVtZW50cy5jb25jYXQobTIuZWxlbWVudHMpLFxuICAgIGZlYXR1cmVzOiAgbTEuZmVhdHVyZXMuY29uY2F0KG0yLmZlYXR1cmVzKSxcbiAgICBiZWhhdmlvcnM6IG0xLmJlaGF2aW9ycy5jb25jYXQobTIuYmVoYXZpb3JzKSxcbiAgfTtcbn1cblxudmFyIEVNUFRZX01FVEFEQVRBID0ge2VsZW1lbnRzOiBbXSwgZmVhdHVyZXM6IFtdLCBiZWhhdmlvcnM6IFtdfTtcblxuLyoqXG4gKiBQYXJzZTUncyByZXByZXNlbnRhdGlvbiBvZiBhIHBhcnNlZCBodG1sIGRvY3VtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb2N1bWVudEFTVFxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgcG9seW1lciBlbGVtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbGVtZW50RGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBQb2x5bWVyIGZlYXR1cmUuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGZWF0dXJlRGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBQb2x5bWVyIGJlaGF2aW9yIG1peGluLlxuICogQHR5cGVkZWYge09iamVjdH0gQmVoYXZpb3JEZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIGZvciBhbGwgZmVhdHVyZXMgYW5kIGVsZW1lbnRzIGRlZmluZWQgaW4gb25lIGRvY3VtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb2N1bWVudERlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge0FycmF5PEVsZW1lbnREZXNjcmlwdG9yPn0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIGZyb20gdGhlIGRvY3VtZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn0gIGZlYXR1cmVzIFRoZSBmZWF0dXJlcyBmcm9tIHRoZSBkb2N1bWVudFxuICogQHByb3BlcnR5IHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59ICBiZWhhdmlvcnMgVGhlIGJlaGF2aW9ycyBmcm9tIHRoZSBkb2N1bWVudFxuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIG9mIGFuIGVudGlyZSBIVE1MIGRvY3VtZW50LCBpbiBwcm9taXNlcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFuYWx5emVkRG9jdW1lbnRcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZiBUaGUgdXJsIG9mIHRoZSBkb2N1bWVudC5cbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxQYXJzZWRJbXBvcnQ+fSAgaHRtbExvYWRlZCBUaGUgcGFyc2VkIHJlcHJlc2VudGF0aW9uIG9mXG4gKiAgICAgdGhlIGRvYy4gVXNlIHRoZSBgYXN0YCBwcm9wZXJ0eSB0byBnZXQgdGhlIGZ1bGwgYHBhcnNlNWAgYXN0XG4gKlxuICogQHByb3BlcnR5IHtQcm9taXNlPEFycmF5PHN0cmluZz4+fSBkZXBzTG9hZGVkIFJlc29sdmVzIHRvIHRoZSBsaXN0IG9mIHRoaXNcbiAqICAgICBEb2N1bWVudCdzIHRyYW5zaXRpdmUgaW1wb3J0IGRlcGVuZGVuY2llc1xuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gZGVwSHJlZnMgVGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgb2YgdGhlIGRvY3VtZW50LlxuICpcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxEb2N1bWVudERlc2NyaXB0b3I+fSBtZXRhZGF0YUxvYWRlZCBSZXNvbHZlcyB0byB0aGUgbGlzdCBvZlxuICogICAgIHRoaXMgRG9jdW1lbnQncyBpbXBvcnQgZGVwZW5kZW5jaWVzXG4gKi9cblxuLyoqXG4gKiBBIGRhdGFiYXNlIG9mIFBvbHltZXIgbWV0YWRhdGEgZGVmaW5lZCBpbiBIVE1MXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyT2YgaHlkcm9seXNpc1xuICogQHBhcmFtICB7Ym9vbGVhbn0gYXR0YWNoQVNUICBJZiB0cnVlLCBhdHRhY2ggYSBwYXJzZTUgY29tcGxpYW50IEFTVFxuICogQHBhcmFtICB7RmlsZUxvYWRlcj19IGxvYWRlciBBbiBvcHRpb25hbCBgRmlsZUxvYWRlcmAgdXNlZCB0byBsb2FkIGV4dGVybmFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1xuICovXG52YXIgQW5hbHl6ZXIgPSBmdW5jdGlvbiBBbmFseXplcihhdHRhY2hBU1QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIpIHtcbiAgdGhpcy5sb2FkZXIgPSBsb2FkZXI7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhbGwgZWxlbWVudHMgdGhlIGBBbmFseXplcmAgaGFzIG1ldGFkYXRhIGZvci5cbiAgICogQG1lbWJlciB7QXJyYXkuPEVsZW1lbnREZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZWxlbWVudHMgPSBbXTtcblxuICAvKipcbiAgICogQSB2aWV3IGludG8gYGVsZW1lbnRzYCwga2V5ZWQgYnkgdGFnIG5hbWUuXG4gICAqIEBtZW1iZXIge09iamVjdC48c3RyaW5nLEVsZW1lbnREZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZWxlbWVudHNCeVRhZ05hbWUgPSB7fTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIEFQSSBmZWF0dXJlcyBhZGRlZCB0byBgUG9seW1lci5CYXNlYCBlbmNvdW50ZXJlZCBieSB0aGVcbiAgICogYW5hbHl6ZXIuXG4gICAqIEBtZW1iZXIge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZmVhdHVyZXMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9ycyBjb2xsZWN0ZWQgYnkgdGhlIGFuYWx5c2lzIHBhc3MuXG4gICAqXG4gICAqIEBtZW1iZXIge0FycmF5PEJlaGF2aW9yRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmJlaGF2aW9ycyA9IFtdO1xuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgYWJzb2x1dGUgcGF0aCwgb2YgRG9jdW1lbnQgbWV0YWRhdGEuXG4gICAqIEBtZW1iZXIge09iamVjdDxzdHJpbmcsQW5hbHl6ZWREb2N1bWVudD59XG4gICAqL1xuICB0aGlzLmh0bWwgPSB7fTtcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IHBhdGgsIG9mIEhUTUwgZG9jdW1lbnQgQVNUcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMucGFyc2VkRG9jdW1lbnRzID0ge307XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBBbmFseXplci5hbmFsenllYFxuICogQHR5cGVkZWYge09iamVjdH0gTG9hZE9wdGlvbnNcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vQW5ub3RhdGlvbnMgV2hldGhlciBgYW5ub3RhdGUoKWAgc2hvdWxkIGJlIHNraXBwZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNsZWFuIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBkZXNjcmlwdG9ycyBzaG91bGQgYmUgY2xlYW5lZFxuICogICAgIG9mIHJlZHVuZGFudCBkYXRhLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcpOiBib29sZWFufSBmaWx0ZXIgQSBwcmVkaWNhdGUgZnVuY3Rpb24gdGhhdFxuICogICAgIGluZGljYXRlcyB3aGljaCBmaWxlcyBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgbG9hZGVyLiBCeSBkZWZhdWx0IGFsbFxuICogICAgIGZpbGVzIG5vdCBsb2NhdGVkIHVuZGVyIHRoZSBkaXJuYW1lIG9mIGBocmVmYCB3aWxsIGJlIGlnbm9yZWQuXG4gKi9cblxuLyoqXG4gKiBTaG9ydGhhbmQgZm9yIHRyYW5zaXRpdmVseSBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nIGFsbCBpbXBvcnRzIGJlZ2lubmluZyBhdFxuICogYGhyZWZgLlxuICpcbiAqIEluIG9yZGVyIHRvIHByb3Blcmx5IGZpbHRlciBwYXRocywgYGhyZWZgIF9tdXN0XyBiZSBhbiBhYnNvbHV0ZSBVUkkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgVGhlIHJvb3QgaW1wb3J0IHRvIGJlZ2luIGxvYWRpbmcgZnJvbS5cbiAqIEBwYXJhbSB7TG9hZE9wdGlvbnM9fSBvcHRpb25zIEFueSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHJldHVybiB7UHJvbWlzZTxBbmFseXplcj59IEEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIGBocmVmYCBhbmQgaXRzXG4gKiAgICAgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBsb2FkZWQgYW5kIGFuYWx5emVkLlxuICovXG5BbmFseXplci5hbmFseXplID0gZnVuY3Rpb24gYW5hbHl6ZShocmVmLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyIHx8IF9kZWZhdWx0RmlsdGVyKGhyZWYpO1xuXG4gIHZhciBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcigpO1xuICB2YXIgUHJpbWFyeVJlc29sdmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXIvZnMtcmVzb2x2ZXInKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlci94aHItcmVzb2x2ZXInKTtcbiAgbG9hZGVyLmFkZFJlc29sdmVyKG5ldyBQcmltYXJ5UmVzb2x2ZXIob3B0aW9ucykpO1xuICBsb2FkZXIuYWRkUmVzb2x2ZXIobmV3IE5vb3BSZXNvbHZlcih7dGVzdDogb3B0aW9ucy5maWx0ZXJ9KSk7XG5cbiAgdmFyIGFuYWx5emVyID0gbmV3IHRoaXMobnVsbCwgbG9hZGVyKTtcbiAgcmV0dXJuIGFuYWx5emVyLm1ldGFkYXRhVHJlZShocmVmKS50aGVuKGZ1bmN0aW9uKHJvb3QpIHtcbiAgICBpZiAoIW9wdGlvbnMubm9Bbm5vdGF0aW9ucykge1xuICAgICAgYW5hbHl6ZXIuYW5ub3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2xlYW4pIHtcbiAgICAgIGFuYWx5emVyLmNsZWFuKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYW5hbHl6ZXIpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihzdHJpbmcpOiBib29sZWFufVxuICovXG5mdW5jdGlvbiBfZGVmYXVsdEZpbHRlcihocmVmKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGxhc3QgYC9gIG9yIGBcXGAuXG4gIHZhciBiYXNlID0gaHJlZi5tYXRjaCgvXiguKj8pW15cXC9cXFxcXSokLylbMV07XG4gIHJldHVybiBmdW5jdGlvbih1cmkpIHtcbiAgICByZXR1cm4gdXJpLmluZGV4T2YoYmFzZSkgIT09IDA7XG4gIH07XG59XG5cbkFuYWx5emVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gbG9hZChocmVmKSB7XG4gIHJldHVybiB0aGlzLmxvYWRlci5yZXF1ZXN0KGhyZWYpLnRoZW4oZnVuY3Rpb24oY29udGVudCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9wYXJzZUhUTUwoY29udGVudCwgaHJlZikpO1xuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICB9LmJpbmQodGhpcykpO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGBBbmFseXplZERvY3VtZW50YCByZXByZXNlbnRpbmcgdGhlIHByb3ZpZGVkIGRvY3VtZW50XG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7c3RyaW5nfSBodG1sSW1wb3J0IFJhdyB0ZXh0IG9mIGFuIEhUTUwgZG9jdW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gaHJlZiAgICAgICBUaGUgZG9jdW1lbnQncyBVUkwuXG4gKiBAcmV0dXJuIHtBbmFseXplZERvY3VtZW50fSAgICAgICBBbiAgYEFuYWx5emVkRG9jdW1lbnRgXG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5fcGFyc2VIVE1MID0gZnVuY3Rpb24gX3BhcnNlSFRNTChodG1sSW1wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKSB7XG4gIGlmIChocmVmIGluIHRoaXMuaHRtbCkge1xuICAgIHJldHVybiB0aGlzLmh0bWxbaHJlZl07XG4gIH1cbiAgdmFyIGRlcHNMb2FkZWQgPSBbXTtcbiAgdmFyIGRlcEhyZWZzID0gW107XG4gIHZhciBtZXRhZGF0YUxvYWRlZCA9IFByb21pc2UucmVzb2x2ZShFTVBUWV9NRVRBREFUQSk7XG4gIHZhciBwYXJzZWQ7XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gaW1wb3J0UGFyc2UoaHRtbEltcG9ydCwgaHJlZik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmchJyk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHZhciBodG1sTG9hZGVkID0gUHJvbWlzZS5yZXNvbHZlKHBhcnNlZCk7XG4gIGlmIChwYXJzZWQuc2NyaXB0KSB7XG4gICAgbWV0YWRhdGFMb2FkZWQgPSB0aGlzLl9wcm9jZXNzU2NyaXB0cyhwYXJzZWQuc2NyaXB0LCBocmVmKTtcbiAgICBkZXBzTG9hZGVkLnB1c2gobWV0YWRhdGFMb2FkZWQpO1xuICB9XG5cbiAgaWYgKHRoaXMubG9hZGVyKSB7XG4gICAgdmFyIGJhc2VVcmkgPSBocmVmO1xuICAgIGlmIChwYXJzZWQuYmFzZS5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiT25seSBvbmUgYmFzZSB0YWcgcGVyIGRvY3VtZW50IVwiKTtcbiAgICAgIHRocm93IFwiTXVsdGlwbGUgYmFzZSB0YWdzIGluIFwiICsgaHJlZjtcbiAgICB9IGVsc2UgaWYgKHBhcnNlZC5iYXNlLmxlbmd0aCA9PSAxKSB7XG4gICAgICB2YXIgYmFzZUhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShwYXJzZWQuYmFzZVswXSwgXCJocmVmXCIpO1xuICAgICAgaWYgKGJhc2VIcmVmKSB7XG4gICAgICAgIGJhc2VIcmVmID0gYmFzZUhyZWYgKyBcIi9cIjtcbiAgICAgICAgYmFzZVVyaSA9IHVybC5yZXNvbHZlKGJhc2VVcmksIGJhc2VIcmVmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VkLmltcG9ydC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmspIHtcbiAgICAgIHZhciBsaW5rdXJsID0gZG9tNS5nZXRBdHRyaWJ1dGUobGluaywgJ2hyZWYnKTtcbiAgICAgIGlmIChsaW5rdXJsKSB7XG4gICAgICAgIHZhciByZXNvbHZlZFVybCA9IHVybC5yZXNvbHZlKGJhc2VVcmksIGxpbmt1cmwpO1xuICAgICAgICBkZXBIcmVmcy5wdXNoKHJlc29sdmVkVXJsKTtcbiAgICAgICAgZGVwc0xvYWRlZC5wdXNoKHRoaXMuX2RlcGVuZGVuY2llc0xvYWRlZEZvcihyZXNvbHZlZFVybCwgaHJlZikpO1xuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG4gIH1cbiAgZGVwc0xvYWRlZCA9IFByb21pc2UuYWxsKGRlcHNMb2FkZWQpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge3JldHVybiBkZXBIcmVmczt9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyKSB7dGhyb3cgZXJyO30pO1xuICB0aGlzLnBhcnNlZERvY3VtZW50c1tocmVmXSA9IHBhcnNlZC5hc3Q7XG4gIHRoaXMuaHRtbFtocmVmXSA9IHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICBodG1sTG9hZGVkOiBodG1sTG9hZGVkLFxuICAgICAgbWV0YWRhdGFMb2FkZWQ6IG1ldGFkYXRhTG9hZGVkLFxuICAgICAgZGVwSHJlZnM6IGRlcEhyZWZzLFxuICAgICAgZGVwc0xvYWRlZDogZGVwc0xvYWRlZFxuICB9O1xuICByZXR1cm4gdGhpcy5odG1sW2hyZWZdO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9wcm9jZXNzU2NyaXB0cyA9IGZ1bmN0aW9uIF9wcm9jZXNzU2NyaXB0cyhzY3JpcHRzLCBocmVmKSB7XG4gIHZhciBzY3JpcHRQcm9taXNlcyA9IFtdO1xuICBzY3JpcHRzLmZvckVhY2goZnVuY3Rpb24oc2NyaXB0KSB7XG4gICAgc2NyaXB0UHJvbWlzZXMucHVzaCh0aGlzLl9wcm9jZXNzU2NyaXB0KHNjcmlwdCwgaHJlZikpO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gUHJvbWlzZS5hbGwoc2NyaXB0UHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24obWV0YWRhdGFMaXN0KSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhTGlzdC5yZWR1Y2UocmVkdWNlTWV0YWRhdGEsIEVNUFRZX01FVEFEQVRBKTtcbiAgfSk7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX3Byb2Nlc3NTY3JpcHQgPSBmdW5jdGlvbiBfcHJvY2Vzc1NjcmlwdChzY3JpcHQsIGhyZWYpIHtcbiAgdmFyIHNyYyA9IGRvbTUuZ2V0QXR0cmlidXRlKHNjcmlwdCwgJ3NyYycpO1xuICB2YXIgcGFyc2VkSnM7XG4gIGlmICghc3JjKSB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZEpzID0ganNQYXJzZShzY3JpcHQuY2hpbGROb2Rlc1swXS52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBGaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGxpbmUgbnVtYmVyIGZvciB0aGUgZXJyb3IuXG4gICAgICB2YXIgbGluZSA9IDA7XG4gICAgICB2YXIgY29sID0gMDtcbiAgICAgIGlmIChzY3JpcHQuX19vd25lckRvY3VtZW50ICYmIHNjcmlwdC5fX293bmVyRG9jdW1lbnQgPT0gaHJlZikge1xuICAgICAgICBsaW5lID0gc2NyaXB0Ll9fbG9jYXRpb25EZXRhaWwubGluZSAtIDE7XG4gICAgICAgIGNvbCA9IHNjcmlwdC5fX2xvY2F0aW9uRGV0YWlsLmxpbmUgLSAxO1xuICAgICAgfVxuICAgICAgbGluZSArPSBlcnIubGluZU51bWJlcjtcbiAgICAgIGNvbCArPSBlcnIuY29sdW1uO1xuICAgICAgdmFyIG1lc3NhZ2UgPSBcIkVycm9yIHBhcnNpbmcgc2NyaXB0IGluIFwiICsgaHJlZiArIFwiIGF0IFwiICsgbGluZSArIFwiOlwiICsgY29sO1xuICAgICAgbWVzc2FnZSArPSBcIlxcblwiICsgZXJyLmRlc2NyaXB0aW9uO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkSnMuZWxlbWVudHMpIHtcbiAgICAgIHBhcnNlZEpzLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNjcmlwdEVsZW1lbnQgPSBzY3JpcHQ7XG4gICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQuaXMgaW4gdGhpcy5lbGVtZW50c0J5VGFnTmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSWdub3JpbmcgZHVwbGljYXRlIGVsZW1lbnQgZGVmaW5pdGlvbjogJyArIGVsZW1lbnQuaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZWxlbWVudC5pc10gPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkSnMuZmVhdHVyZXMpIHtcbiAgICAgIHRoaXMuZmVhdHVyZXMgPSB0aGlzLmZlYXR1cmVzLmNvbmNhdChwYXJzZWRKcy5mZWF0dXJlcyk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5iZWhhdmlvcnMpIHtcbiAgICAgIHRoaXMuYmVoYXZpb3JzID0gdGhpcy5iZWhhdmlvcnMuY29uY2F0KHBhcnNlZEpzLmJlaGF2aW9ycyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRKcztcbiAgfVxuICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICB2YXIgcmVzb2x2ZWRTcmMgPSB1cmwucmVzb2x2ZShocmVmLCBzcmMpO1xuICAgIHJldHVybiB0aGlzLmxvYWRlci5yZXF1ZXN0KHJlc29sdmVkU3JjKS50aGVuKGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICAgIHZhciByZXNvbHZlZFNjcmlwdCA9IE9iamVjdC5jcmVhdGUoc2NyaXB0KTtcbiAgICAgIHJlc29sdmVkU2NyaXB0LmNoaWxkTm9kZXMgPSBbe3ZhbHVlOiBjb250ZW50fV07XG4gICAgICByZXNvbHZlZFNjcmlwdC5hdHRycyA9IHJlc29sdmVkU2NyaXB0LmF0dHJzLnNsaWNlKCk7XG4gICAgICBkb201LnJlbW92ZUF0dHJpYnV0ZShyZXNvbHZlZFNjcmlwdCwgJ3NyYycpO1xuICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NTY3JpcHQocmVzb2x2ZWRTY3JpcHQsIGhyZWYpO1xuICAgIH0uYmluZCh0aGlzKSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7dGhyb3cgZXJyO30pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRU1QVFlfTUVUQURBVEEpO1xuICB9XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX2RlcGVuZGVuY2llc0xvYWRlZEZvciA9IGZ1bmN0aW9uIF9kZXBlbmRlbmNpZXNMb2FkZWRGb3IoaHJlZiwgcm9vdCkge1xuICB2YXIgZm91bmQgPSB7fTtcbiAgaWYgKHJvb3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGZvdW5kW3Jvb3RdID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fZ2V0RGVwZW5kZW5jaWVzKGhyZWYsIGZvdW5kKS50aGVuKGZ1bmN0aW9uKGRlcHMpIHtcbiAgICB2YXIgZGVwTWV0YWRhdGFMb2FkZWQgPSBbXTtcbiAgICB2YXIgZGVwUHJvbWlzZXMgPSBkZXBzLm1hcChmdW5jdGlvbihkZXBIcmVmKXtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQoZGVwSHJlZikudGhlbihmdW5jdGlvbihodG1sTW9ub21lcikge1xuICAgICAgICByZXR1cm4gaHRtbE1vbm9tZXIubWV0YWRhdGFMb2FkZWQ7XG4gICAgICB9KTtcbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChkZXBQcm9taXNlcyk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIExpc3QgYWxsIHRoZSBodG1sIGRlcGVuZGVuY2llcyBmb3IgdGhlIGRvY3VtZW50IGF0IGBocmVmYC5cbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgICAgICAgaHJlZiAgICAgIFRoZSBocmVmIHRvIGdldCBkZXBlbmRlbmNpZXMgZm9yLlxuICogQHBhcmFtICB7T2JqZWN0LjxzdHJpbmcsYm9vbGVhbj49fSBmb3VuZCAgICAgQW4gb2JqZWN0IGtleWVkIGJ5IFVSTCBvZiB0aGVcbiAqICAgICBhbHJlYWR5IHJlc29sdmVkIGRlcGVuZGVuY2llcy5cbiAqIEBwYXJhbSAge2Jvb2xlYW49fSAgICAgICAgICAgICAgICB0cmFuc2l0aXZlIFdoZXRoZXIgdG8gbG9hZCB0cmFuc2l0aXZlXG4gKiAgICAgZGVwZW5kZW5jaWVzLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59ICBBIGxpc3Qgb2YgYWxsIHRoZSBodG1sIGRlcGVuZGVuY2llcy5cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLl9nZXREZXBlbmRlbmNpZXMgPSBmdW5jdGlvbiBfZ2V0RGVwZW5kZW5jaWVzKGhyZWYsIGZvdW5kLCB0cmFuc2l0aXZlKSB7XG4gIGlmIChmb3VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm91bmQgPSB7fTtcbiAgICBmb3VuZFtocmVmXSA9IHRydWU7XG4gIH1cbiAgaWYgKHRyYW5zaXRpdmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zaXRpdmUgPSB0cnVlO1xuICB9XG4gIHZhciBkZXBzID0gW107XG4gIHJldHVybiB0aGlzLmxvYWQoaHJlZikudGhlbihmdW5jdGlvbihodG1sTW9ub21lcikge1xuICAgIHZhciB0cmFuc2l0aXZlRGVwcyA9IFtdO1xuICAgIGh0bWxNb25vbWVyLmRlcEhyZWZzLmZvckVhY2goZnVuY3Rpb24oZGVwSHJlZil7XG4gICAgICBpZiAoZm91bmRbZGVwSHJlZl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVwcy5wdXNoKGRlcEhyZWYpO1xuICAgICAgZm91bmRbZGVwSHJlZl0gPSB0cnVlO1xuICAgICAgaWYgKHRyYW5zaXRpdmUpIHtcbiAgICAgICAgdHJhbnNpdGl2ZURlcHMucHVzaCh0aGlzLl9nZXREZXBlbmRlbmNpZXMoZGVwSHJlZiwgZm91bmQpKTtcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbCh0cmFuc2l0aXZlRGVwcyk7XG4gIH0uYmluZCh0aGlzKSkudGhlbihmdW5jdGlvbih0cmFuc2l0aXZlRGVwcykge1xuICAgIHZhciBhbGxkZXBzID0gdHJhbnNpdGl2ZURlcHMucmVkdWNlKGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICB9LCBbXSkuY29uY2F0KGRlcHMpO1xuICAgIHJldHVybiBhbGxkZXBzO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIFBPSk8gcmVwcmVzZW50YXRpb24gb2YgdGhlIGltcG9ydFxuICogdHJlZSwgaW4gYSBmb3JtYXQgdGhhdCBtYWludGFpbnMgdGhlIG9yZGVyaW5nIG9mIHRoZSBIVE1MIGltcG9ydHMgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIHRoZSBpbXBvcnQgdG8gZ2V0IG1ldGFkYXRhIGZvci5cbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5tZXRhZGF0YVRyZWUgPSBmdW5jdGlvbiBtZXRhZGF0YVRyZWUoaHJlZikge1xuICByZXR1cm4gdGhpcy5sb2FkKGhyZWYpLnRoZW4oZnVuY3Rpb24obW9ub21lcil7XG4gICAgdmFyIGxvYWRlZEhyZWZzID0ge307XG4gICAgbG9hZGVkSHJlZnNbaHJlZl0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVRyZWUobW9ub21lciwgbG9hZGVkSHJlZnMpO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9tZXRhZGF0YVRyZWUgPSBmdW5jdGlvbiBfbWV0YWRhdGFUcmVlKGh0bWxNb25vbWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZEhyZWZzKSB7XG4gIGlmIChsb2FkZWRIcmVmcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbG9hZGVkSHJlZnMgPSB7fTtcbiAgfVxuICByZXR1cm4gaHRtbE1vbm9tZXIubWV0YWRhdGFMb2FkZWQudGhlbihmdW5jdGlvbihtZXRhZGF0YSkge1xuICAgIG1ldGFkYXRhID0ge1xuICAgICAgZWxlbWVudHM6IG1ldGFkYXRhLmVsZW1lbnRzLFxuICAgICAgZmVhdHVyZXM6IG1ldGFkYXRhLmZlYXR1cmVzLFxuICAgICAgaHJlZjogaHRtbE1vbm9tZXIuaHJlZlxuICAgIH07XG4gICAgcmV0dXJuIGh0bWxNb25vbWVyLmRlcHNMb2FkZWQudGhlbihmdW5jdGlvbihocmVmcykge1xuICAgICAgdmFyIGRlcE1ldGFkYXRhID0gW107XG4gICAgICBocmVmcy5mb3JFYWNoKGZ1bmN0aW9uKGhyZWYpIHtcbiAgICAgICAgdmFyIG1ldGFkYXRhUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgaWYgKGRlcE1ldGFkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBtZXRhZGF0YVByb21pc2UgPSBkZXBNZXRhZGF0YVtkZXBNZXRhZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBtZXRhZGF0YVByb21pc2UgPSBtZXRhZGF0YVByb21pc2UudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIWxvYWRlZEhyZWZzW2hyZWZdKSB7XG4gICAgICAgICAgICBsb2FkZWRIcmVmc1tocmVmXSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFUcmVlKHRoaXMuaHRtbFtocmVmXSwgbG9hZGVkSHJlZnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIGRlcE1ldGFkYXRhLnB1c2gobWV0YWRhdGFQcm9taXNlKTtcbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZGVwTWV0YWRhdGEpLnRoZW4oZnVuY3Rpb24oaW1wb3J0TWV0YWRhdGEpIHtcbiAgICAgICAgbWV0YWRhdGEuaW1wb3J0cyA9IGltcG9ydE1ldGFkYXRhO1xuICAgICAgICByZXR1cm4gaHRtbE1vbm9tZXIuaHRtbExvYWRlZC50aGVuKGZ1bmN0aW9uKHBhcnNlZEh0bWwpIHtcbiAgICAgICAgICBtZXRhZGF0YS5odG1sID0gcGFyc2VkSHRtbDtcbiAgICAgICAgICBpZiAobWV0YWRhdGEuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgICBhdHRhY2hEb21Nb2R1bGUocGFyc2VkSHRtbCwgZWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIENhbGxzIGBkb201Lm5vZGVXYWxrYCBvbiBlYWNoIGRvY3VtZW50IHRoYXQgYEFuYXl6bGVyYCBoYXMgbGFvZGVkLlxuICogQHBhcmFtICB7T2JqZWN0fSBwcmVkaWNhdGUgQSBkb201IHByZWRpY2F0ZS5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLm5vZGVXYWxrRG9jdW1lbnRzID0gZnVuY3Rpb24gbm9kZVdhbGtEb2N1bWVudHMocHJlZGljYXRlKSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIGZvciAodmFyIGhyZWYgaW4gdGhpcy5wYXJzZWREb2N1bWVudHMpIHtcbiAgICB2YXIgbmV3Tm9kZXMgPSBkb201Lm5vZGVXYWxrQWxsKHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdLCBwcmVkaWNhdGUpO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChuZXdOb2Rlcyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKiogQW5ub3RhdGVzIGFsbCBsb2FkZWQgbWV0YWRhdGEgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbi4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5hbm5vdGF0ZSA9IGZ1bmN0aW9uIGFubm90YXRlKCkge1xuICBpZiAodGhpcy5mZWF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGZlYXR1cmVFbCA9IGRvY3MuZmVhdHVyZUVsZW1lbnQodGhpcy5mZWF0dXJlcyk7XG4gICAgdGhpcy5lbGVtZW50cy51bnNoaWZ0KGZlYXR1cmVFbCk7XG4gICAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZVtmZWF0dXJlRWwuaXNdID0gZmVhdHVyZUVsO1xuICB9XG5cbiAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGRvY3MuYW5ub3RhdGVFbGVtZW50KTtcbiAgdGhpcy5iZWhhdmlvcnMuZm9yRWFjaChkb2NzLmFubm90YXRlRWxlbWVudCk7IC8vIFNhbWUgc2hhcGUuXG59O1xuXG5mdW5jdGlvbiBhdHRhY2hEb21Nb2R1bGUocGFyc2VkSW1wb3J0LCBlbGVtZW50KSB7XG4gIHZhciBkb21Nb2R1bGVzID0gcGFyc2VkSW1wb3J0Wydkb20tbW9kdWxlJ107XG4gIGZvciAodmFyIGkgPSAwLCBkb21Nb2R1bGU7IGkgPCBkb21Nb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZG9tTW9kdWxlID0gZG9tTW9kdWxlc1tpXTtcbiAgICBpZiAoZG9tNS5nZXRBdHRyaWJ1dGUoZG9tTW9kdWxlLCAnaWQnKSA9PT0gZWxlbWVudC5pcykge1xuICAgICAgZWxlbWVudC5kb21Nb2R1bGUgPSBkb21Nb2R1bGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbi8qKiBSZW1vdmVzIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGZyb20gdGhlIGNvbGxlY3RlZCBkZXNjcmlwdG9ycy4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5jbGVhbiA9IGZ1bmN0aW9uIGNsZWFuKCkge1xuICB0aGlzLmVsZW1lbnRzLmZvckVhY2goZG9jcy5jbGVhbkVsZW1lbnQpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBbmFseXplcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcblxudmFyIGVzdXRpbCAgICA9IHJlcXVpcmUoJy4vZXN1dGlsJyk7XG52YXIgYXN0VmFsdWUgPSByZXF1aXJlKCcuL2FzdC12YWx1ZScpO1xuXG52YXIgYW5hbHl6ZVByb3BlcnRpZXMgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIGFuYWx5emVkUHJvcHMgPSBbXTtcblxuICBpZiAobm9kZS50eXBlICE9ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJvcGVydHkgPSBub2RlLnByb3BlcnRpZXNbaV07XG4gICAgdmFyIHByb3AgPSBlc3V0aWwudG9Qcm9wZXJ0eURlc2NyaXB0b3IocHJvcGVydHkpO1xuICAgIHByb3AucHVibGlzaGVkID0gdHJ1ZTtcblxuICAgIGlmIChwcm9wZXJ0eS52YWx1ZS50eXBlID09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgLyoqXG4gICAgICAgKiBQYXJzZSB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgYSBwcm9wZXJ0eSBvYmplY3QgYmxvY2suXG4gICAgICAgKiBwcm9wZXJ0eToge1xuICAgICAgICogICBrZXk6IHtcbiAgICAgICAqICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgKiAgICAgbm90aWZ5OiB0cnVlLFxuICAgICAgICogICAgIHZhbHVlOiAtMSxcbiAgICAgICAqICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAqICAgICByZWZsZWN0VG9BdHRyaWJ1dGU6IHRydWVcbiAgICAgICAqICAgfVxuICAgICAgICogfVxuICAgICAgICovXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BlcnR5LnZhbHVlLnByb3BlcnRpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHByb3BlcnR5QXJnID0gcHJvcGVydHkudmFsdWUucHJvcGVydGllc1tqXTtcbiAgICAgICAgdmFyIHByb3BlcnR5S2V5ID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3BlcnR5QXJnLmtleSk7XG5cbiAgICAgICAgc3dpdGNoKHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgY2FzZSAndHlwZSc6IHtcbiAgICAgICAgICAgIHByb3AudHlwZSA9IGVzdXRpbC5vYmplY3RLZXlUb1N0cmluZyhwcm9wZXJ0eUFyZy52YWx1ZSk7XG4gICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHR5cGUgaW4gcHJvcGVydHkgb2JqZWN0LicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHByb3BlcnR5QXJnLmxvYy5zdGFydFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdub3RpZnknOiB7XG4gICAgICAgICAgICBwcm9wLm5vdGlmeSA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLm5vdGlmeSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBwcm9wLm5vdGlmeSA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVhZE9ubHknOiB7XG4gICAgICAgICAgICBwcm9wLnJlYWRPbmx5ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByb3AucmVhZE9ubHkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5yZWFkT25seSA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVmbGVjdFRvQXR0cmlidXRlJzoge1xuICAgICAgICAgICAgcHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUgPSBhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShwcm9wZXJ0eUFyZyk7XG4gICAgICAgICAgICBpZiAocHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3ZhbHVlJzoge1xuICAgICAgICAgICAgcHJvcC5kZWZhdWx0ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByb3AuZGVmYXVsdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBwcm9wLmRlZmF1bHQgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXByb3AudHlwZSkge1xuICAgICAgdGhyb3cge1xuICAgICAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIGRldGVybWluZSBuYW1lIGZvciBwcm9wZXJ0eSBrZXkuJyxcbiAgICAgICAgbG9jYXRpb246IG5vZGUubG9jLnN0YXJ0XG4gICAgICB9O1xuICAgIH1cblxuICAgIGFuYWx5emVkUHJvcHMucHVzaChwcm9wKTtcbiAgfVxuICByZXR1cm4gYW5hbHl6ZWRQcm9wcztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBhbmFseXplUHJvcGVydGllcztcblxuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG4vLyB1c2VmdWwgdG9vbCB0byB2aXN1YWxpemUgQVNUOiBodHRwOi8vZXNwcmltYS5vcmcvZGVtby9wYXJzZS5odG1sXG5cbi8qKlxuICogY29udmVydHMgbGl0ZXJhbDoge1widHlwZVwiOiBcIkxpdGVyYWxcIiwgXCJ2YWx1ZVwiOiA1LCAgXCJyYXdcIjogXCI1XCIgfVxuICogdG8gc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGxpdGVyYWxUb1ZhbHVlKGxpdGVyYWwpIHtcbiAgcmV0dXJuIGxpdGVyYWwudmFsdWU7XG59XG5cbi8qKlxuICogY29udmVydHMgdW5hcnkgdG8gc3RyaW5nXG4gKiB1bmFyeTogeyB0eXBlOiAnVW5hcnlFeHByZXNzaW9uJywgb3BlcmF0b3I6ICctJywgYXJndW1lbnQ6IHsgLi4uIH0gfVxuICovXG5mdW5jdGlvbiB1bmFyeVRvVmFsdWUodW5hcnkpIHtcbiAgdmFyIGFyZ1ZhbHVlID0gZXhwcmVzc2lvblRvVmFsdWUodW5hcnkuYXJndW1lbnQpO1xuICBpZiAoYXJnVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm47XG4gIHJldHVybiB1bmFyeS5vcGVyYXRvciArIGFyZ1ZhbHVlO1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIGlkZW50aWZpZXIgdG8gaXRzIHZhbHVlXG4gKiBpZGVudGlmaWVyIHsgXCJ0eXBlXCI6IFwiSWRlbnRpZmllclwiLCBcIm5hbWVcIjogXCJOdW1iZXIgfVxuICovXG5mdW5jdGlvbiBpZGVudGlmaWVyVG9WYWx1ZShpZGVudGlmaWVyKSB7XG4gIHJldHVybiBpZGVudGlmaWVyLm5hbWU7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gaXMgYSBibG9jayBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGZ1bmN0aW9uRGVjbGFyYXRpb25Ub1ZhbHVlKGZuKSB7XG4gIGlmIChmbi5ib2R5LnR5cGUgPT0gXCJCbG9ja1N0YXRlbWVudFwiKVxuICAgIHJldHVybiBibG9ja1N0YXRlbWVudFRvVmFsdWUoZm4uYm9keSk7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uRXhwcmVzc2lvblRvVmFsdWUoZm4pIHtcbiAgaWYgKGZuLmJvZHkudHlwZSA9PSBcIkJsb2NrU3RhdGVtZW50XCIpXG4gICAgcmV0dXJuIGJsb2NrU3RhdGVtZW50VG9WYWx1ZShmbi5ib2R5KTtcbn1cbi8qKlxuICogQmxvY2sgc3RhdGVtZW50OiBmaW5kIGxhc3QgcmV0dXJuIHN0YXRlbWVudCwgYW5kIHJldHVybiBpdHMgdmFsdWVcbiAqL1xuZnVuY3Rpb24gYmxvY2tTdGF0ZW1lbnRUb1ZhbHVlKGJsb2NrKSB7XG4gIGZvciAodmFyIGk9YmxvY2suYm9keS5sZW5ndGggLSAxOyBpPj0gMDsgaS0tKSB7XG4gICAgaWYgKGJsb2NrLmJvZHlbaV0udHlwZSA9PT0gXCJSZXR1cm5TdGF0ZW1lbnRcIilcbiAgICAgIHJldHVybiByZXR1cm5TdGF0ZW1lbnRUb1ZhbHVlKGJsb2NrLmJvZHlbaV0pO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIHJldHVybidzIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIHJldHVyblN0YXRlbWVudFRvVmFsdWUocmV0KSB7XG4gIHJldHVybiBleHByZXNzaW9uVG9WYWx1ZShyZXQuYXJndW1lbnQpO1xufVxuXG4vKipcbiAqIEVuY2xvc2UgY29udGFpbmluZyB2YWx1ZXMgaW4gW11cbiAqL1xuZnVuY3Rpb24gYXJyYXlFeHByZXNzaW9uVG9WYWx1ZShhcnJ5KSB7XG4gIHZhciB2YWx1ZSA9ICdbJztcbiAgZm9yICh2YXIgaT0wOyBpPGFycnkuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdiA9IGV4cHJlc3Npb25Ub1ZhbHVlKGFycnkuZWxlbWVudHNbaV0pO1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpXG4gICAgICB2ID0gQ0FOVF9DT05WRVJUO1xuICAgIGlmIChpICE9PSAwKVxuICAgICAgdmFsdWUgKz0gJywgJztcbiAgICB2YWx1ZSArPSB2O1xuICB9XG4gIHZhbHVlICs9ICddJztcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIE1ha2UgaXQgbG9vayBsaWtlIGFuIG9iamVjdFxuICovXG5mdW5jdGlvbiBvYmplY3RFeHByZXNzaW9uVG9WYWx1ZShvYmopIHtcbiAgdmFyIHZhbHVlID0gJ3snO1xuICBmb3IgKHZhciBpPTA7IGk8b2JqLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgayA9IGV4cHJlc3Npb25Ub1ZhbHVlKG9iai5wcm9wZXJ0aWVzW2ldLmtleSk7XG4gICAgdmFyIHYgPSBleHByZXNzaW9uVG9WYWx1ZShvYmoucHJvcGVydGllc1tpXS52YWx1ZSk7XG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgIHYgPSBDQU5UX0NPTlZFUlQ7XG4gICAgaWYgKGkgIT09IDApXG4gICAgICB2YWx1ZSArPSAnLCAnO1xuICAgIHZhbHVlICs9ICdcIicgKyBrICsgJ1wiOiAnICsgdjtcbiAgfVxuICB2YWx1ZSArPSAnfSc7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBNZW1iZXJFeHByZXNzaW9uIHJlZmVyZW5jZXMgYSB2YXJpYWJsZSB3aXRoIG5hbWVcbiAqL1xuZnVuY3Rpb24gbWVtYmVyRXhwcmVzc2lvblRvVmFsdWUobWVtYmVyKSB7XG4gIHJldHVybiBleHByZXNzaW9uVG9WYWx1ZShtZW1iZXIub2JqZWN0KSArIFwiLlwiICsgZXhwcmVzc2lvblRvVmFsdWUobWVtYmVyLnByb3BlcnR5KTtcbn1cblxuLyoqXG4gKiBUcmllcyB0byBnZXQgYSB2YWx1ZSBmcm9tIGV4cHJlc3Npb24uIEhhbmRsZXMgTGl0ZXJhbCwgVW5hcnlFeHByZXNzaW9uXG4gKiByZXR1cm5zIHVuZGVmaW5lZCBvbiBmYWlsdXJlXG4gKiB2YWx1ZUV4cHJlc3Npb24gZXhhbXBsZTpcbiAqIHsgdHlwZTogXCJMaXRlcmFsXCIsXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbikge1xuICBzd2l0Y2godmFsdWVFeHByZXNzaW9uLnR5cGUpIHtcbiAgICBjYXNlICdMaXRlcmFsJzpcbiAgICAgIHJldHVybiBsaXRlcmFsVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ1VuYXJ5RXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gdW5hcnlUb1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6XG4gICAgICByZXR1cm4gaWRlbnRpZmllclRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdGdW5jdGlvbkRlY2xhcmF0aW9uJzpcbiAgICAgIHJldHVybiBmdW5jdGlvbkRlY2xhcmF0aW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ0Z1bmN0aW9uRXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gZnVuY3Rpb25FeHByZXNzaW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ0FycmF5RXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gYXJyYXlFeHByZXNzaW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ09iamVjdEV4cHJlc3Npb24nOlxuICAgICAgcmV0dXJuIG9iamVjdEV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6XG4gICAgICByZXR1cm4gaWRlbnRpZmllclRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiBtZW1iZXJFeHByZXNzaW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxudmFyIENBTlRfQ09OVkVSVCA9ICdVTktOT1dOJztcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDQU5UX0NPTlZFUlQ6IENBTlRfQ09OVkVSVCxcbiAgZXhwcmVzc2lvblRvVmFsdWU6IGV4cHJlc3Npb25Ub1ZhbHVlXG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGVzdHJhdmVyc2UgPSByZXF1aXJlKCdlc3RyYXZlcnNlJyk7XG5cbnZhciBkb2NzICAgPSByZXF1aXJlKCcuL2RvY3MnKTtcbnZhciBlc3V0aWwgPSByZXF1aXJlKCcuL2VzdXRpbCcpO1xudmFyIGpzZG9jICA9IHJlcXVpcmUoJy4vanNkb2MnKTtcbnZhciBhbmFseXplUHJvcGVydGllcyA9IHJlcXVpcmUoJy4vYW5hbHl6ZS1wcm9wZXJ0aWVzJyk7XG52YXIgYXN0VmFsdWUgPSByZXF1aXJlKCcuL2FzdC12YWx1ZS5qcycpO1xuXG52YXIgbnVtRmVhdHVyZXMgPSAwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJlaGF2aW9yRmluZGVyKCkge1xuICAvKiogQHR5cGUgeyFBcnJheTxCZWhhdmlvckRlc2NyaXB0b3I+fSBUaGUgYmVoYXZpb3JzIHdlJ3ZlIGZvdW5kLiAqL1xuICB2YXIgYmVoYXZpb3JzID0gW107XG5cbiAgdmFyIGN1cnJlbnRCZWhhdmlvciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIHNwZWNpYWwtY2FzZSBwcm9wZXJ0aWVzXG4gICAqL1xuICB2YXIgcHJvcGVydHlIYW5kbGVycyA9IHtcbiAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgcHJvcHMgPSBhbmFseXplUHJvcGVydGllcyhub2RlKTtcblxuICAgICAgZm9yICh2YXIgaT0wOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMucHVzaChwcm9wc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBtZXJnZXMgYmVoYXZpb3Igd2l0aCBwcmVleGlzdGluZyBiZWhhdmlvciB3aXRoIHRoZSBzYW1lIG5hbWUuXG4gICAqIGhlcmUgdG8gc3VwcG9ydCBtdWx0aXBsZSBAcG9seW1lckJlaGF2aW9yIHRhZ3MgcmVmZXJyaW5nXG4gICAqIHRvIHNhbWUgYmVoYXZpb3IuIFNlZSBpcm9uLW11bHRpLXNlbGVjdGFibGUgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZUJlaGF2aW9yKG5ld0JlaGF2aW9yKSB7XG4gICAgdmFyIGlzQmVoYXZpb3JJbXBsID0gZnVuY3Rpb24oYikgeyAvLyBmaWx0ZXIgb3V0IEJlaGF2aW9ySW1wbFxuICAgICAgcmV0dXJuIGIuaW5kZXhPZihuZXdCZWhhdmlvci5pcykgPT09IC0xO1xuICAgIH07XG4gICAgZm9yICh2YXIgaT0wOyBpPGJlaGF2aW9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5ld0JlaGF2aW9yLmlzICE9PSBiZWhhdmlvcnNbaV0uaXMpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgLy8gbWVyZ2UgZGVzYywgbG9uZ2VzdCBkZXNjIHdpbnNcbiAgICAgIGlmIChuZXdCZWhhdmlvci5kZXNjKSB7XG4gICAgICAgIGlmIChiZWhhdmlvcnNbaV0uZGVzYykge1xuICAgICAgICAgIGlmIChuZXdCZWhhdmlvci5kZXNjLmxlbmd0aCA+IGJlaGF2aW9yc1tpXS5kZXNjLmxlbmd0aClcbiAgICAgICAgICAgIGJlaGF2aW9yc1tpXS5kZXNjID0gbmV3QmVoYXZpb3IuZGVzYztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBiZWhhdmlvcnNbaV0uZGVzYyA9IG5ld0JlaGF2aW9yLmRlc2M7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIG1lcmdlIGRlbW9zXG4gICAgICBiZWhhdmlvcnNbaV0uZGVtb3MgPSAoYmVoYXZpb3JzW2ldLmRlbW9zIHx8IFtdKS5jb25jYXQobmV3QmVoYXZpb3IuZGVtb3MgfHwgW10pO1xuICAgICAgLy8gbWVyZ2UgZXZlbnRzLFxuICAgICAgYmVoYXZpb3JzW2ldLmV2ZW50cyA9IChiZWhhdmlvcnNbaV0uZXZlbnRzIHx8IFtdKS5jb25jYXQobmV3QmVoYXZpb3IuZXZlbnRzIHx8IFtdKTtcbiAgICAgIC8vIG1lcmdlIHByb3BlcnRpZXNcbiAgICAgIGJlaGF2aW9yc1tpXS5wcm9wZXJ0aWVzID0gKGJlaGF2aW9yc1tpXS5wcm9wZXJ0aWVzIHx8IFtdKS5jb25jYXQobmV3QmVoYXZpb3IucHJvcGVydGllcyB8fCBbXSk7XG4gICAgICAvLyBtZXJnZSBiZWhhdmlvcnNcbiAgICAgIGJlaGF2aW9yc1tpXS5iZWhhdmlvcnMgPVxuICAgICAgICAoYmVoYXZpb3JzW2ldLmJlaGF2aW9ycyB8fCBbXSkuY29uY2F0KG5ld0JlaGF2aW9yLmJlaGF2aW9ycyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcihpc0JlaGF2aW9ySW1wbCk7XG4gICAgICByZXR1cm4gYmVoYXZpb3JzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QmVoYXZpb3I7XG4gIH1cblxuICB2YXIgdmlzaXRvcnMgPSB7XG5cbiAgICAvKipcbiAgICAgKiBMb29rIGZvciBvYmplY3QgZGVjbGFyYXRpb25zIHdpdGggQGJlaGF2aW9yIGluIHRoZSBkb2NzLlxuICAgICAqL1xuICAgIGVudGVyVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7XG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoICE9PSAxKSByZXR1cm47ICAvLyBBbWJpZ3VvdXMuXG4gICAgICB0aGlzLl9pbml0QmVoYXZpb3Iobm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb29rIGZvciBvYmplY3QgYXNzaWdubWVudHMgd2l0aCBAcG9seW1lckJlaGF2aW9yIGluIHRoZSBkb2NzLlxuICAgICAqL1xuICAgIGVudGVyQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdGhpcy5faW5pdEJlaGF2aW9yKHBhcmVudCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKG5vZGUubGVmdCk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX3BhcnNlQ2hhaW5lZEJlaGF2aW9yczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgLy8gaWYgY3VycmVudCBiZWhhdmlvciBpcyBwYXJ0IG9mIGFuIGFycmF5LCBpdCBnZXRzIGV4dGVuZGVkIGJ5IG90aGVyIGJlaGF2aW9yc1xuICAgICAgLy8gaW5zaWRlIHRoZSBhcnJheS4gRXg6XG4gICAgICAvLyBQb2x5bWVyLklyb25NdWx0aVNlbGVjdGFibGVCZWhhdmlvciA9IFsgey4uLi59LCBQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3JdXG4gICAgICAvLyBXZSBhZGQgdGhlc2UgdG8gYmVoYXZpb3JzIGFycmF5XG4gICAgICB2YXIgZXhwcmVzc2lvbjtcbiAgICAgIHN3aXRjaChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnRXhwcmVzc2lvblN0YXRlbWVudCc6XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IG5vZGUuZXhwcmVzc2lvbi5yaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGV4cHJlc3Npb24gPSBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggPiAwID8gbm9kZS5kZWNsYXJhdGlvbnNbMF0uaW5pdCA6IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFyIGNoYWluZWQgPSBbXTtcbiAgICAgIGlmIChleHByZXNzaW9uICYmIGV4cHJlc3Npb24udHlwZSA9PT0gJ0FycmF5RXhwcmVzc2lvbicpIHtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgZXhwcmVzc2lvbi5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChleHByZXNzaW9uLmVsZW1lbnRzW2ldLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJylcbiAgICAgICAgICAgIGNoYWluZWQucHVzaChhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShleHByZXNzaW9uLmVsZW1lbnRzW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYWluZWQubGVuZ3RoID4gMClcbiAgICAgICAgICBjdXJyZW50QmVoYXZpb3IuYmVoYXZpb3JzID0gY2hhaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRCZWhhdmlvcjogZnVuY3Rpb24obm9kZSwgZ2V0TmFtZSkge1xuICAgICAgdmFyIGNvbW1lbnQgPSBlc3V0aWwuZ2V0QXR0YWNoZWRDb21tZW50KG5vZGUpO1xuICAgICAgLy8gUXVpY2tseSBmaWx0ZXIgZG93biB0byBwb3RlbnRpYWwgY2FuZGlkYXRlcy5cbiAgICAgIGlmICghY29tbWVudCB8fCBjb21tZW50LmluZGV4T2YoJ0Bwb2x5bWVyQmVoYXZpb3InKSA9PT0gLTEpIHJldHVybjtcblxuXG4gICAgICBjdXJyZW50QmVoYXZpb3IgPSB7XG4gICAgICAgIHR5cGU6ICdiZWhhdmlvcicsXG4gICAgICAgIGRlc2M6IGNvbW1lbnQsXG4gICAgICAgIGV2ZW50czogZXN1dGlsLmdldEV2ZW50Q29tbWVudHMobm9kZSkubWFwKCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIHJldHVybiB7IGRlc2M6IGV2ZW50fTtcbiAgICAgICAgfSlcbiAgICAgIH07XG5cbiAgICAgIGRvY3MuYW5ub3RhdGVCZWhhdmlvcihjdXJyZW50QmVoYXZpb3IpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgYWN0dWFsbHkgcGFyc2VkIGEgYmVoYXZpb3IgdGFnIVxuICAgICAgaWYgKCFqc2RvYy5oYXNUYWcoY3VycmVudEJlaGF2aW9yLmpzZG9jLCAncG9seW1lckJlaGF2aW9yJykpIHtcbiAgICAgICAgY3VycmVudEJlaGF2aW9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmFtZSA9IGpzZG9jLmdldFRhZyhjdXJyZW50QmVoYXZpb3IuanNkb2MsICdwb2x5bWVyQmVoYXZpb3InLCAnbmFtZScpO1xuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIG5hbWUgPSBnZXROYW1lKCk7XG4gICAgICB9XG4gICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZGV0ZXJtaW5lIG5hbWUgZm9yIEBwb2x5bWVyQmVoYXZpb3I6JywgY29tbWVudCk7XG4gICAgICB9XG4gICAgICBjdXJyZW50QmVoYXZpb3IuaXMgPSBuYW1lO1xuXG4gICAgICB0aGlzLl9wYXJzZUNoYWluZWRCZWhhdmlvcnMobm9kZSk7XG5cbiAgICAgIGN1cnJlbnRCZWhhdmlvciA9IG1lcmdlQmVoYXZpb3IoY3VycmVudEJlaGF2aW9yKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2UgYXNzdW1lIHRoYXQgdGhlIG9iamVjdCBleHByZXNzaW9uIGFmdGVyIHN1Y2ggYW4gYXNzaWdubWVudCBpcyB0aGVcbiAgICAgKiBiZWhhdmlvcidzIGRlY2xhcmF0aW9uLiBTZWVtcyB0byBiZSBhIGRlY2VudCBhc3N1bXB0aW9uIGZvciBub3cuXG4gICAgICovXG4gICAgZW50ZXJPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmICghY3VycmVudEJlaGF2aW9yIHx8IGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzKSByZXR1cm47XG5cbiAgICAgIGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzID0gY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMgfHwgW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcCA9IG5vZGUucHJvcGVydGllc1tpXTtcbiAgICAgICAgdmFyIG5hbWUgPSBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcocHJvcC5rZXkpO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICBtZXNzYWdlOiAnQ2FudCBkZXRlcm1pbmUgbmFtZSBmb3IgcHJvcGVydHkga2V5LicsXG4gICAgICAgICAgICBsb2NhdGlvbjogbm9kZS5sb2Muc3RhcnRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lIGluIHByb3BlcnR5SGFuZGxlcnMpIHtcbiAgICAgICAgICBwcm9wZXJ0eUhhbmRsZXJzW25hbWVdKHByb3AudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzLnB1c2goZXN1dGlsLnRvUHJvcGVydHlEZXNjcmlwdG9yKHByb3ApKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmVoYXZpb3JzLnB1c2goY3VycmVudEJlaGF2aW9yKTtcbiAgICAgIGN1cnJlbnRCZWhhdmlvciA9IG51bGw7XG4gICAgfSxcblxuICB9O1xuXG4gIHJldHVybiB7dmlzaXRvcnM6IHZpc2l0b3JzLCBiZWhhdmlvcnM6IGJlaGF2aW9yc307XG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8vIGpzaGludCBub2RlOnRydWVcblxudmFyIGpzZG9jID0gcmVxdWlyZSgnLi9qc2RvYycpO1xuXG52YXIgZG9tNSA9IHJlcXVpcmUoJ2RvbTUnKTtcblxuLyoqIFByb3BlcnRpZXMgb24gZWxlbWVudCBwcm90b3R5cGVzIHRoYXQgYXJlIHB1cmVseSBjb25maWd1cmF0aW9uLiAqL1xudmFyIEVMRU1FTlRfQ09ORklHVVJBVElPTiA9IFtcbiAgJ2F0dGFjaGVkJyxcbiAgJ2F0dHJpYnV0ZUNoYW5nZWQnLFxuICAnY29uZmlndXJlJyxcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2NyZWF0ZWQnLFxuICAnZGV0YWNoZWQnLFxuICAnZW5hYmxlQ3VzdG9tU3R5bGVQcm9wZXJ0aWVzJyxcbiAgJ2V4dGVuZHMnLFxuICAnaG9zdEF0dHJpYnV0ZXMnLFxuICAnaXMnLFxuICAnbGlzdGVuZXJzJyxcbiAgJ21peGlucycsXG4gICdvYnNlcnZlcnMnLFxuICAncHJvcGVydGllcycsXG4gICdyZWFkeScsXG4gICdyZWdpc3RlcmVkJ1xuXTtcblxuLyoqIFRhZ3MgdW5kZXJzdG9vZCBieSB0aGUgYW5ub3RhdGlvbiBwcm9jZXNzLCB0byBiZSByZW1vdmVkIGR1cmluZyBgY2xlYW5gLiAqL1xudmFyIEhBTkRMRURfVEFHUyA9IFtcbiAgJ3BhcmFtJyxcbiAgJ3JldHVybicsXG4gICd0eXBlJyxcbl07XG5cbi8qKlxuICogQW5ub3RhdGVzIEh5ZHJvbHlzaXMgZGVzY3JpcHRvcnMsIHByb2Nlc3NpbmcgYW55IGBkZXNjYCBwcm9wZXJ0aWVzIGFzIEpTRG9jLlxuICpcbiAqIFlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSBhIG1vcmUgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiB0aGlzLCBzdWNoIGFzXG4gKiBgYW5ub3RhdGVFbGVtZW50YC5cbiAqXG4gKiBQcm9jZXNzZWQgSlNEb2MgdmFsdWVzIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdmlhIHRoZSBganNkb2NgIHByb3BlcnR5IG9uIGFcbiAqIGRlc2NyaXB0b3Igbm9kZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvciBUaGUgZGVzY3JpcHRvciBub2RlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBkZXNjcmlwdG9yIHRoYXQgd2FzIGdpdmVuLlxuICovXG5mdW5jdGlvbiBhbm5vdGF0ZShkZXNjcmlwdG9yKSB7XG4gIGlmICghZGVzY3JpcHRvciB8fCBkZXNjcmlwdG9yLmpzZG9jKSByZXR1cm4gZGVzY3JpcHRvcjtcblxuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IuZGVzYyA9PT0gJ3N0cmluZycpIHtcbiAgICBkZXNjcmlwdG9yLmpzZG9jID0ganNkb2MucGFyc2VKc2RvYyhkZXNjcmlwdG9yLmRlc2MpO1xuICAgIC8vIFdlIHdhbnQgdG8gcHJlc2VudCB0aGUgbm9ybWFsaXplZCBmb3JtIG9mIGEgZGVzY3JpcHRvci5cbiAgICBkZXNjcmlwdG9yLmpzZG9jLm9yaWcgPSBkZXNjcmlwdG9yLmRlc2M7XG4gICAgZGVzY3JpcHRvci5kZXNjICAgICAgID0gZGVzY3JpcHRvci5qc2RvYy5ib2R5O1xuICB9XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIEBldmVudCwgQGhlcm8sICYgQGRlbW8gdGFnc1xuICovXG5mdW5jdGlvbiBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5ldmVudHMpIHtcbiAgICBkZXNjcmlwdG9yLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBfYW5ub3RhdGVFdmVudChldmVudCk7XG4gICAgfSk7XG4gICAgZGVzY3JpcHRvci5ldmVudHMuc29ydCggZnVuY3Rpb24oYSxiKSB7XG4gICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9KTtcbiAgfVxuICBkZXNjcmlwdG9yLmRlbW9zID0gW107XG4gIGlmIChkZXNjcmlwdG9yLmpzZG9jICYmIGRlc2NyaXB0b3IuanNkb2MudGFncykge1xuICAgIGRlc2NyaXB0b3IuanNkb2MudGFncy5mb3JFYWNoKCBmdW5jdGlvbih0YWcpIHtcbiAgICAgIHN3aXRjaCh0YWcudGFnKSB7XG4gICAgICAgIGNhc2UgJ2hlcm8nOlxuICAgICAgICAgIGRlc2NyaXB0b3IuaGVybyA9IHRhZy5uYW1lIHx8ICdoZXJvLnBuZyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlbW8nOlxuICAgICAgICAgIGRlc2NyaXB0b3IuZGVtb3MucHVzaCh7XG4gICAgICAgICAgICBkZXNjOiB0YWcuYm9keSB8fCAnZGVtbycsXG4gICAgICAgICAgICBwYXRoOiB0YWcubmFtZSB8fCAnZGVtby9pbmRleC5odG1sJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGRvY3VtZW50YXRpb24gZm91bmQgd2l0aGluIGEgSHlkcm9seXNpcyBlbGVtZW50IGRlc2NyaXB0b3IuIEFsc29cbiAqIHN1cHBvcnRzIGJlaGF2aW9ycy5cbiAqXG4gKiBJZiB0aGUgZWxlbWVudCB3YXMgcHJvY2Vzc2VkIHZpYSBgaHlkcm9saXplYCwgdGhlIGVsZW1lbnQncyBkb2N1bWVudGF0aW9uXG4gKiB3aWxsIGFsc28gYmUgZXh0cmFjdGVkIHZpYSBpdHMgPGRvbS1tb2R1bGU+LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBlbGVtZW50IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBkZXNjcmlwdG9yIHRoYXQgd2FzIGdpdmVuLlxuICovXG5mdW5jdGlvbiBhbm5vdGF0ZUVsZW1lbnQoZGVzY3JpcHRvcikge1xuICBpZiAoIWRlc2NyaXB0b3IuZGVzYyAmJiBkZXNjcmlwdG9yLnR5cGUgPT09ICdlbGVtZW50Jykge1xuICAgIGRlc2NyaXB0b3IuZGVzYyA9IF9maW5kRWxlbWVudERvY3MoZGVzY3JpcHRvci5pcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZG9tTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zY3JpcHRFbGVtZW50KTtcbiAgfVxuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcblxuICAvLyBUaGUgYDxkb20tbW9kdWxlPmAgaXMgdG9vIGxvdyBsZXZlbCBmb3IgbW9zdCBuZWVkcywgYW5kIGl0IGlzIF9ub3RfXG4gIC8vIHNlcmlhbGl6YWJsZS4gU28gd2UgZHJvcCBpdCBub3cgdGhhdCB3ZSd2ZSBleHRyYWN0ZWQgYWxsIHRoZSB1c2VmdWwgYml0c1xuICAvLyBmcm9tIGl0LlxuICBkZWxldGUgZGVzY3JpcHRvci5kb21Nb2R1bGU7XG5cbiAgLy8gRGVzY3JpcHRvcnMgdGhhdCBzaG91bGQgaGF2ZSB0aGVpciBgZGVzY2AgcHJvcGVydGllcyBwYXJzZWQgYXMgSlNEb2MuXG4gIGRlc2NyaXB0b3IucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgLy8gRmVhdHVyZSBwcm9wZXJ0aWVzIGFyZSBzcGVjaWFsLCBjb25maWd1cmF0aW9uIGlzIHJlYWxseSBqdXN0IGEgbWF0dGVyIG9mXG4gICAgLy8gaW5oZXJpdGFuY2UuLi5cbiAgICBhbm5vdGF0ZVByb3BlcnR5KHByb3BlcnR5LCBkZXNjcmlwdG9yLmFic3RyYWN0KTtcbiAgfSk7XG5cbiAgLy8gSXQgbWF5IHNlZW0gbGlrZSBvdmVya2lsbCB0byBhbHdheXMgc29ydCwgYnV0IHdlIGhhdmUgYW4gYXNzdW1wdGlvbiB0aGF0XG4gIC8vIHRoZXNlIHByb3BlcnRpZXMgYXJlIHR5cGljYWxseSBiZWluZyBjb25zdW1lZCBieSB1c2VyLXZpc2libGUgdG9vbGluZy5cbiAgLy8gQXMgc3VjaCwgaXQncyBnb29kIHRvIGhhdmUgY29uc2lzdGVudCBvdXRwdXQvb3JkZXJpbmcgdG8gYWlkIHRoZSB1c2VyLlxuICBkZXNjcmlwdG9yLnByb3BlcnRpZXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzIGFyZSBhbHdheXMgbGFzdC5cbiAgICBpZiAoYS5wcml2YXRlICYmICFiLnByaXZhdGUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoIWEucHJpdmF0ZSAmJiBiLnByaXZhdGUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGp1c3Qgc29ydGluZyBhbHBoYWJldGljYWxseS5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgfVxuICB9KTtcblxuICBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcik7XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGJlaGF2aW9yIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvciBiZWhhdmlvciBkZXNjcmlwdG9yXG4gKiBAcmV0dXJuIHtPYmplY3R9IGRlc2NyaXB0b3IgcGFzc2VkIGluIGFzIHBhcmFtXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlQmVoYXZpb3IoZGVzY3JpcHRvcikge1xuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcblxuICBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcik7XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGV2ZW50IGRvY3VtZW50YXRpb25cbiAqL1xuZnVuY3Rpb24gX2Fubm90YXRlRXZlbnQoZGVzY3JpcHRvcikge1xuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcbiAgLy8gcHJvY2VzcyBAZXZlbnRcbiAgdmFyIGV2ZW50VGFnID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICdldmVudCcpO1xuICBkZXNjcmlwdG9yLm5hbWUgPSBldmVudFRhZyA/IGV2ZW50VGFnLm5hbWUgOiBcIk4vQVwiO1xuXG4gIC8vIHByb2Nlc3MgQHBhcmFtc1xuICBkZXNjcmlwdG9yLnBhcmFtcyA9IChkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pXG4gICAgLmZpbHRlciggZnVuY3Rpb24odGFnKSB7XG4gICAgICByZXR1cm4gdGFnLnRhZyA9PT0gJ3BhcmFtJztcbiAgICB9KVxuICAgIC5tYXAoIGZ1bmN0aW9uKHRhZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdGFnLnR5cGUgfHwgXCJOL0FcIixcbiAgICAgICAgZGVzYzogdGFnLmJvZHksXG4gICAgICAgIG5hbWU6IHRhZy5uYW1lIHx8IFwiTi9BXCJcbiAgICAgIH07XG4gICAgfSk7XG4gIC8vIHByb2Nlc3MgQHBhcmFtc1xuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgZG9jdW1lbnRhdGlvbiBmb3VuZCBhYm91dCBhIEh5ZHJvbHlzaXMgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvciBUaGUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQ29uZmlndXJhdGlvbiBJZiB0cnVlLCBgY29uZmlndXJhdGlvbmAgaXMgbm90IHNldC5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGRlc2NyaXB0aW9yIHRoYXQgd2FzIGdpdmVuLlxuICovXG5mdW5jdGlvbiBhbm5vdGF0ZVByb3BlcnR5KGRlc2NyaXB0b3IsIGlnbm9yZUNvbmZpZ3VyYXRpb24pIHtcbiAgYW5ub3RhdGUoZGVzY3JpcHRvcik7XG4gIGlmIChkZXNjcmlwdG9yLm5hbWVbMF0gPT09ICdfJyB8fCBqc2RvYy5oYXNUYWcoZGVzY3JpcHRvci5qc2RvYywgJ3ByaXZhdGUnKSkge1xuICAgIGRlc2NyaXB0b3IucHJpdmF0ZSA9IHRydWU7XG4gIH1cblxuICBpZiAoIWlnbm9yZUNvbmZpZ3VyYXRpb24gJiYgRUxFTUVOVF9DT05GSUdVUkFUSU9OLmluZGV4T2YoZGVzY3JpcHRvci5uYW1lKSAhPT0gLTEpIHtcbiAgICBkZXNjcmlwdG9yLnByaXZhdGUgICAgICAgPSB0cnVlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhdGlvbiA9IHRydWU7XG4gIH1cblxuICAvLyBAdHlwZSBKU0RvYyB3aW5zXG4gIGRlc2NyaXB0b3IudHlwZSA9IGpzZG9jLmdldFRhZyhkZXNjcmlwdG9yLmpzZG9jLCAndHlwZScsICd0eXBlJykgfHwgZGVzY3JpcHRvci50eXBlO1xuXG4gIGlmIChkZXNjcmlwdG9yLnR5cGUubWF0Y2goL15mdW5jdGlvbi9pKSkge1xuICAgIF9hbm5vdGF0ZUZ1bmN0aW9uUHJvcGVydHkoZGVzY3JpcHRvcik7XG4gIH1cblxuICAvLyBAZGVmYXVsdCBKU0RvYyB3aW5zXG4gIHZhciBkZWZhdWx0VGFnID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICdkZWZhdWx0Jyk7XG4gIGlmIChkZWZhdWx0VGFnICE9PSBudWxsKSB7XG4gICAgZGVzY3JpcHRvci5kZWZhdWx0ID0gKGRlZmF1bHRUYWcubmFtZSB8fCAnJykgKyAoZGVmYXVsdFRhZy5ib2R5IHx8ICcnKTtcbiAgfVxuXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG4vKiogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgKi9cbmZ1bmN0aW9uIF9hbm5vdGF0ZUZ1bmN0aW9uUHJvcGVydHkoZGVzY3JpcHRvcikge1xuICBkZXNjcmlwdG9yLmZ1bmN0aW9uID0gdHJ1ZTtcblxuICB2YXIgcmV0dXJuVGFnID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICdyZXR1cm4nKTtcbiAgaWYgKHJldHVyblRhZykge1xuICAgIGRlc2NyaXB0b3IucmV0dXJuID0ge1xuICAgICAgdHlwZTogcmV0dXJuVGFnLnR5cGUsXG4gICAgICBkZXNjOiByZXR1cm5UYWcuYm9keSxcbiAgICB9O1xuICB9XG5cbiAgdmFyIHBhcmFtc0J5TmFtZSA9IHt9O1xuICAoZGVzY3JpcHRvci5wYXJhbXMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24ocGFyYW0pIHtcbiAgICBwYXJhbXNCeU5hbWVbcGFyYW0ubmFtZV0gPSBwYXJhbTtcbiAgfSk7XG4gIChkZXNjcmlwdG9yLmpzZG9jICYmIGRlc2NyaXB0b3IuanNkb2MudGFncyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbih0YWcpIHtcbiAgICBpZiAodGFnLnRhZyAhPT0gJ3BhcmFtJykgcmV0dXJuO1xuICAgIHZhciBwYXJhbSA9IHBhcmFtc0J5TmFtZVt0YWcubmFtZV07XG4gICAgaWYgKCFwYXJhbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBhcmFtLnR5cGUgPSB0YWcudHlwZSB8fCBwYXJhbS50eXBlO1xuICAgIHBhcmFtLmRlc2MgPSB0YWcuYm9keTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgcmF3IGZlYXR1cmVzIGludG8gYW4gYWJzdHJhY3QgYFBvbHltZXIuQmFzZWAgZWxlbWVudC5cbiAqXG4gKiBOb3RlIHRoYXQgZG9jcyBvbiB0aGlzIGVsZW1lbnQgX2FyZSBub3QgcHJvY2Vzc2VkXy4gWW91IG11c3QgY2FsbFxuICogYGFubm90YXRlRWxlbWVudGAgb24gaXQgeW91cnNlbGYgaWYgeW91IHdpc2ggdGhhdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn0gZmVhdHVyZXNcbiAqIEByZXR1cm4ge0VsZW1lbnREZXNjcmlwdG9yfVxuICovXG5mdW5jdGlvbiBmZWF0dXJlRWxlbWVudChmZWF0dXJlcykge1xuICB2YXIgcHJvcGVydGllcyA9IGZlYXR1cmVzLnJlZHVjZShmdW5jdGlvbihyZXN1bHQsIGZlYXR1cmUpIHtcbiAgICByZXR1cm4gcmVzdWx0LmNvbmNhdChmZWF0dXJlLnByb3BlcnRpZXMpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAgICAgICAnZWxlbWVudCcsXG4gICAgaXM6ICAgICAgICAgJ1BvbHltZXIuQmFzZScsXG4gICAgYWJzdHJhY3Q6ICAgdHJ1ZSxcbiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuICAgIGRlc2M6ICdgUG9seW1lci5CYXNlYCBhY3RzIGFzIGEgYmFzZSBwcm90b3R5cGUgZm9yIGFsbCBQb2x5bWVyICcgK1xuICAgICAgICAgICdlbGVtZW50cy4gSXQgaXMgY29tcG9zZWQgdmlhIHZhcmlvdXMgY2FsbHMgdG8gJyArXG4gICAgICAgICAgJ2BQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoKWAuXFxuJyArXG4gICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICdUaGUgcHJvcGVydGllcyByZWZsZWN0ZWQgaGVyZSBhcmUgdGhlIGNvbWJpbmVkIHZpZXcgb2YgYWxsICcgK1xuICAgICAgICAgICdmZWF0dXJlcyBmb3VuZCBpbiB0aGlzIGxpYnJhcnkuIFRoZXJlIG1heSBiZSBtb3JlIHByb3BlcnRpZXMgJyArXG4gICAgICAgICAgJ2FkZGVkIHZpYSBvdGhlciBsaWJyYXJpZXMsIGFzIHdlbGwuJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDbGVhbnMgcmVkdW5kYW50IHByb3BlcnRpZXMgZnJvbSBhIGRlc2NyaXB0b3IsIGFzc3VtaW5nIHRoYXQgeW91IGhhdmUgYWxyZWFkeVxuICogY2FsbGVkIGBhbm5vdGF0ZWAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3JcbiAqL1xuZnVuY3Rpb24gY2xlYW4oZGVzY3JpcHRvcikge1xuICBpZiAoIWRlc2NyaXB0b3IuanNkb2MpIHJldHVybjtcbiAgLy8gVGhlIGRvY3RleHQgd2FzIHdyaXR0ZW4gdG8gYGRlc2NyaXB0b3IuZGVzY2BcbiAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2MuYm9keTtcbiAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2Mub3JpZztcblxuICB2YXIgY2xlYW5UYWdzID0gW107XG4gIChkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gICAgLy8gRHJvcCBhbnkgdGFncyB3ZSd2ZSBjb25zdW1lZC5cbiAgICBpZiAoSEFORExFRF9UQUdTLmluZGV4T2YodGFnLnRhZykgIT09IC0xKSByZXR1cm47XG4gICAgY2xlYW5UYWdzLnB1c2godGFnKTtcbiAgfSk7XG5cbiAgaWYgKGNsZWFuVGFncy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBObyB0YWdzPyBubyBkb2NzIGxlZnQhXG4gICAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2M7XG4gIH0gZWxzZSB7XG4gICAgZGVzY3JpcHRvci5qc2RvYy50YWdzID0gY2xlYW5UYWdzO1xuICB9XG59XG5cbi8qKlxuICogQ2xlYW5zIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGZyb20gYW4gZWxlbWVudCwgYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5XG4gKiBjYWxsZWQgYGFubm90YXRlRWxlbWVudGAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50RGVzY3JpcHRvcnxCZWhhdmlvckRlc2NyaXB0b3J9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY2xlYW5FbGVtZW50KGVsZW1lbnQpIHtcbiAgY2xlYW4oZWxlbWVudCk7XG4gIGVsZW1lbnQucHJvcGVydGllcy5mb3JFYWNoKGNsZWFuUHJvcGVydHkpO1xufVxuXG4vKipcbiAqIENsZWFucyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIGEgcHJvcGVydHksIGFzc3VtaW5nIHRoYXQgeW91IGhhdmUgYWxyZWFkeVxuICogY2FsbGVkIGBhbm5vdGF0ZVByb3BlcnR5YC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY2xlYW5Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICBjbGVhbihwcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGVsZW1lbnRJZFxuICogQHBhcmFtIHtEb2N1bWVudEFTVH0gZG9tTW9kdWxlXG4gKiBAcGFyYW0ge0RvY3VtZW50QVNUfSBzY3JpcHRFbGVtZW50IFRoZSBzY3JpcHQgdGhhdCB0aGUgZWxlbWVudCB3YXMgZGVmaW5lZCBpbi5cbiAqL1xuZnVuY3Rpb24gX2ZpbmRFbGVtZW50RG9jcyhlbGVtZW50SWQsIGRvbU1vZHVsZSwgc2NyaXB0RWxlbWVudCkge1xuICAvLyBOb3RlIHRoYXQgd2UgY29uY2F0ZW5hdGUgZG9jcyBmcm9tIGFsbCBzb3VyY2VzIGlmIHdlIGZpbmQgdGhlbS5cbiAgLy8gZWxlbWVudCBjYW4gYmUgZGVmaW5lZCBpbjpcbiAgLy8gaHRtbCBjb21tZW50IHJpZ2h0IGJlZm9yZSBkb20tbW9kdWxlXG4gIC8vIGh0bWwgY29tbW5ldCByaWdodCBiZWZvcmUgc2NyaXB0IGRlZmluaW5nIHRoZSBtb2R1bGUsIGlmIGRvbS1tb2R1bGUgaXMgZW1wdHlcblxuICB2YXIgZm91bmQgPSBbXTtcblxuICAvLyBEbyB3ZSBoYXZlIGEgSFRNTCBjb21tZW50IG9uIHRoZSBgPGRvbS1tb2R1bGU+YCBvciBgPHNjcmlwdD5gP1xuICAvL1xuICAvLyBDb25mdXNpbmdseSwgd2l0aCBvdXIgY3VycmVudCBzdHlsZSwgdGhlIGNvbW1lbnQgd2lsbCBiZSBhdHRhY2hlZCB0b1xuICAvLyBgPGhlYWQ+YCwgcmF0aGVyIHRoYW4gYmVpbmcgYSBzaWJsaW5nIHRvIHRoZSBgPGRvbS1tb2R1bGU+YFxuICB2YXIgc2VhcmNoUm9vdCA9IGRvbU1vZHVsZSB8fCBzY3JpcHRFbGVtZW50O1xuICB2YXIgcGFyZW50cyA9IGRvbTUubm9kZVdhbGtBbGxQcmlvcihzZWFyY2hSb290LCBkb201LmlzQ29tbWVudE5vZGUpO1xuICB2YXIgY29tbWVudCA9IHBhcmVudHMubGVuZ3RoID4gMCA/IHBhcmVudHNbMF0gOiBudWxsO1xuICBpZiAoY29tbWVudCAmJiBjb21tZW50LmRhdGEpIHtcbiAgICBmb3VuZC5wdXNoKGNvbW1lbnQuZGF0YSk7XG4gIH1cbiAgaWYgKGZvdW5kLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBmb3VuZFxuICAgIC5maWx0ZXIoZnVuY3Rpb24oY29tbWVudCkge1xuICAgICAgLy8gc2tpcCBAbGljZW5zZSBjb21tZW50c1xuICAgICAgaWYgKGNvbW1lbnQgJiYgY29tbWVudC5pbmRleE9mKCdAbGljZW5zZScgPT09IC0xKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSlcbiAgICAubWFwKGpzZG9jLnVuaW5kZW50KS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRMYXN0Q2hpbGROYW1lZChuYW1lLCBwYXJlbnQpIHtcbiAgdmFyIGNoaWxkcmVuID0gcGFyZW50LmNoaWxkTm9kZXM7XG4gIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxLCBjaGlsZDsgaSA+PSAwOyBpLS0pIHtcbiAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChjaGlsZC5ub2RlTmFtZSA9PT0gbmFtZSkgcmV0dXJuIGNoaWxkO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBUT0RPKG5ldmlyKTogcGFyc2U1LXV0aWxzIVxuZnVuY3Rpb24gX2dldE5vZGVBdHRyaWJ1dGUobm9kZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgYXR0cjsgaSA8IG5vZGUuYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICBhdHRyID0gbm9kZS5hdHRyc1tpXTtcbiAgICBpZiAoYXR0ci5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYXR0ci52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFubm90YXRlOiAgICAgICAgYW5ub3RhdGUsXG4gIGFubm90YXRlRWxlbWVudDogYW5ub3RhdGVFbGVtZW50LFxuICBhbm5vdGF0ZUJlaGF2aW9yOiBhbm5vdGF0ZUJlaGF2aW9yLFxuICBjbGVhbjogICAgICAgICAgIGNsZWFuLFxuICBjbGVhbkVsZW1lbnQ6ICAgIGNsZWFuRWxlbWVudCxcbiAgZmVhdHVyZUVsZW1lbnQ6ICBmZWF0dXJlRWxlbWVudCxcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGVzdXRpbCAgICA9IHJlcXVpcmUoJy4vZXN1dGlsJyk7XG52YXIgZmluZEFsaWFzID0gcmVxdWlyZSgnLi9maW5kLWFsaWFzJyk7XG52YXIgYW5hbHl6ZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuL2FuYWx5emUtcHJvcGVydGllcycpO1xudmFyIGFzdFZhbHVlID0gcmVxdWlyZSgnLi9hc3QtdmFsdWUnKTtcblxudmFyIGVsZW1lbnRGaW5kZXIgPSBmdW5jdGlvbiBlbGVtZW50RmluZGVyKCkge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZWxlbWVudHMgZXhwb3J0ZWQgYnkgZWFjaCB0cmF2ZXJzZWQgc2NyaXB0LlxuICAgKi9cbiAgdmFyIGVsZW1lbnRzID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IGJlaW5nIGJ1aWx0IGR1cmluZyBhIHRyYXZlcnNhbDtcbiAgICovXG4gIHZhciBlbGVtZW50O1xuXG4gIC8qKlxuICAgKiBhIHNldCBvZiBzcGVjaWFsIGNhc2UgcHJvcGVydGllcy4gdGhlc2Ugc2hvdWxkIG9ubHkgYmUgY2FsbGVkXG4gICAqIHdoZW4gd2Uga25vdyB3ZSdyZSBpbnNpZGUgYW4gZWxlbWVudCBkZWZpbml0aW9uLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIHByb3BlcnR5SGFuZGxlcnMgPSB7XG4gICAgaXM6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnR5cGUgPT0gJ0xpdGVyYWwnKSB7XG4gICAgICAgIGVsZW1lbnQuaXMgPSBub2RlLnZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvcGVydGllczogZnVuY3Rpb24obm9kZSkge1xuXG4gICAgICB2YXIgcHJvcHMgPSBhbmFseXplUHJvcGVydGllcyhub2RlKTtcblxuICAgICAgZm9yICh2YXIgaT0wOyBpPHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsZW1lbnQucHJvcGVydGllcy5wdXNoKHByb3BzW2ldKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGJlaGF2aW9yczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSAhPSAnQXJyYXlFeHByZXNzaW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LmJlaGF2aW9ycyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpPTA7IGk8bm9kZS5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdiA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKG5vZGUuZWxlbWVudHNbaV0pO1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHYgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgIGVsZW1lbnQuYmVoYXZpb3JzLnB1c2godik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciB2aXNpdG9ycyA9IHtcbiAgICBlbnRlckNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBlbnRlckNhbGxFeHByZXNzaW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgaWYgKGNhbGxlZS50eXBlID09ICdJZGVudGlmaWVyJykge1xuXG4gICAgICAgIGlmIChjYWxsZWUubmFtZSA9PSAnUG9seW1lcicpIHtcbiAgICAgICAgICBlbGVtZW50ID0ge1xuICAgICAgICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgICAgICAgZGVzYzogZXN1dGlsLmdldEF0dGFjaGVkQ29tbWVudChwYXJlbnQpLFxuICAgICAgICAgICAgZXZlbnRzOiBlc3V0aWwuZ2V0RXZlbnRDb21tZW50cyhwYXJlbnQpLm1hcCggZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtkZXNjOiBldmVudH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGxlYXZlQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIGxlYXZlQ2FsbEV4cHJlc3Npb24obm9kZSwgcGFyZW50KSB7XG4gICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gICAgICBpZiAoY2FsbGVlLnR5cGUgPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIGlmIChjYWxsZWUubmFtZSA9PSAnUG9seW1lcicpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBlbnRlck9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIGVudGVyT2JqZWN0RXhwcmVzc2lvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmIChlbGVtZW50ICYmICFlbGVtZW50LnByb3BlcnRpZXMpIHtcbiAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHByb3AgPSBub2RlLnByb3BlcnRpZXNbaV07XG4gICAgICAgICAgdmFyIG5hbWUgPSBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcocHJvcC5rZXkpO1xuICAgICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2FudCBkZXRlcm1pbmUgbmFtZSBmb3IgcHJvcGVydHkga2V5LicsXG4gICAgICAgICAgICAgIGxvY2F0aW9uOiBub2RlLmxvYy5zdGFydFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmFtZSBpbiBwcm9wZXJ0eUhhbmRsZXJzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eUhhbmRsZXJzW25hbWVdKHByb3AudmFsdWUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsZW1lbnQucHJvcGVydGllcy5wdXNoKGVzdXRpbC50b1Byb3BlcnR5RGVzY3JpcHRvcihwcm9wKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzdHJhdmVyc2UuVmlzaXRvck9wdGlvbi5Ta2lwO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHt2aXNpdG9yczogdmlzaXRvcnMsIGVsZW1lbnRzOiBlbGVtZW50c307XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVsZW1lbnRGaW5kZXI7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoXCJlc3RyYXZlcnNlXCIpO1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhbiBFc3ByZWUgbm9kZSBtYXRjaGVzIGEgcGFydGljdWxhciBvYmplY3QgcGF0aC5cbiAqXG4gKiBlLmcuIHlvdSBoYXZlIGEgTWVtYmVyRXhwcmVzc2lvbiBub2RlLCBhbmQgd2FudCB0byBzZWUgd2hldGhlciBpdCByZXByZXNlbnRzXG4gKiBgRm9vLkJhci5CYXpgOlxuICpcbiAqICAgICBtYXRjaGVzQ2FsbEV4cHJlc3Npb24obm9kZSwgWydGb28nLCAnQmFyJywgJ0JheiddKVxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gZXhwcmVzc2lvbiBUaGUgRXNwcmVlIG5vZGUgdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gcGF0aCBUaGUgcGF0aCB0byBsb29rIGZvci5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc0NhbGxFeHByZXNzaW9uKGV4cHJlc3Npb24sIHBhdGgpIHtcbiAgaWYgKCFleHByZXNzaW9uLnByb3BlcnR5IHx8ICFleHByZXNzaW9uLm9iamVjdCkgcmV0dXJuO1xuICBjb25zb2xlLmFzc2VydChwYXRoLmxlbmd0aCA+PSAyKTtcblxuICAvLyBVbnJhdmVsIGJhY2t3YXJkcywgbWFrZSBzdXJlIHByb3BlcnRpZXMgbWF0Y2ggZWFjaCBzdGVwIG9mIHRoZSB3YXkuXG4gIGlmIChleHByZXNzaW9uLnByb3BlcnR5Lm5hbWUgIT09IHBhdGhbcGF0aC5sZW5ndGggLSAxXSkgcmV0dXJuIGZhbHNlO1xuICAvLyBXZSd2ZSBnb3Qgb3Vyc2VsdmVzIGEgZmluYWwgbWVtYmVyIGV4cHJlc3Npb24uXG4gIGlmIChwYXRoLmxlbmd0aCA9PSAyICYmIGV4cHJlc3Npb24ub2JqZWN0LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiBleHByZXNzaW9uLm9iamVjdC5uYW1lID09PSBwYXRoWzBdO1xuICB9XG4gIC8vIE5lc3RlZCBleHByZXNzaW9ucy5cbiAgaWYgKHBhdGgubGVuZ3RoID4gMiAmJiBleHByZXNzaW9uLm9iamVjdC50eXBlID09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgIHJldHVybiBtYXRjaGVzQ2FsbEV4cHJlc3Npb24oZXhwcmVzc2lvbi5vYmplY3QsIHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBrZXkgVGhlIG5vZGUgcmVwcmVzZW50aW5nIGFuIG9iamVjdCBrZXkgb3IgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhhdCBrZXkuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdEtleVRvU3RyaW5nKGtleSkge1xuICBpZiAoa2V5LnR5cGUgPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgcmV0dXJuIGtleS5uYW1lO1xuICB9XG4gIGlmIChrZXkudHlwZSA9PSAnTGl0ZXJhbCcpIHtcbiAgICByZXR1cm4ga2V5LnZhbHVlO1xuICB9XG4gIGlmIChrZXkudHlwZSA9PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICByZXR1cm4gb2JqZWN0S2V5VG9TdHJpbmcoa2V5Lm9iamVjdCkgKyAnLicgKyBvYmplY3RLZXlUb1N0cmluZyhrZXkucHJvcGVydHkpO1xuICB9XG59XG5cbnZhciBDTE9TVVJFX0NPTlNUUlVDVE9SX01BUCA9IHtcbiAgJ0Jvb2xlYW4nOiAnYm9vbGVhbicsXG4gICdOdW1iZXInOiAgJ251bWJlcicsXG4gICdTdHJpbmcnOiAgJ3N0cmluZycsXG59O1xuXG4vKipcbiAqIEFTVCBleHByZXNzaW9uIC0+IENsb3N1cmUgdHlwZS5cbiAqXG4gKiBBY2NlcHRzIGxpdGVyYWwgdmFsdWVzLCBhbmQgbmF0aXZlIGNvbnN0cnVjdG9ycy5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgQW4gRXNwcmVlIGV4cHJlc3Npb24gbm9kZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHR5cGUgb2YgdGhhdCBleHByZXNzaW9uLCBpbiBDbG9zdXJlIHRlcm1zLlxuICovXG5mdW5jdGlvbiBjbG9zdXJlVHlwZShub2RlKSB7XG4gIGlmIChub2RlLnR5cGUubWF0Y2goL0V4cHJlc3Npb24kLykpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlLnN1YnN0cigwLCBub2RlLnR5cGUubGVuZ3RoIC0gMTApO1xuICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0xpdGVyYWwnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBub2RlLnZhbHVlO1xuICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgcmV0dXJuIENMT1NVUkVfQ09OU1RSVUNUT1JfTUFQW25vZGUubmFtZV0gfHwgbm9kZS5uYW1lO1xuICB9IGVsc2Uge1xuICAgIHRocm93IHtcbiAgICAgIG1lc3NhZ2U6ICdVbmtub3duIENsb3N1cmUgdHlwZSBmb3Igbm9kZTogJyArIG5vZGUudHlwZSxcbiAgICAgIGxvY2F0aW9uOiBub2RlLmxvYy5zdGFydCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRBdHRhY2hlZENvbW1lbnQobm9kZSkge1xuICB2YXIgY29tbWVudHMgPSBnZXRMZWFkaW5nQ29tbWVudHMobm9kZSkgfHwgZ2V0TGVhZGluZ0NvbW1lbnRzKG5vZGUua2V5KTtcbiAgaWYgKCFjb21tZW50cykge1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gY29tbWVudHNbY29tbWVudHMubGVuZ3RoIC0gMV07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbGwgY29tbWVudHMgZnJvbSBhIHRyZWUgZGVmaW5lZCB3aXRoIEBldmVudC5cbiAqIEBwYXJhbSAge05vZGV9IG5vZGUgW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7W3R5cGVdfSAgICAgIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDb21tZW50cyhub2RlKSB7XG4gIHZhciBldmVudENvbW1lbnRzID0gW107XG4gIGVzdHJhdmVyc2UudHJhdmVyc2Uobm9kZSwge1xuICAgIGVudGVyOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGNvbW1lbnRzID0gKG5vZGUubGVhZGluZ0NvbW1lbnRzIHx8IFtdKS5jb25jYXQobm9kZS50cmFpbGluZ0NvbW1lbnRzIHx8IFtdKVxuICAgICAgICAubWFwKCBmdW5jdGlvbihjb21tZW50QVNUKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1lbnRBU1QudmFsdWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoIGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gY29tbWVudC5pbmRleE9mKFwiQGV2ZW50XCIpICE9IC0xO1xuICAgICAgICB9KTtcbiAgICAgIGV2ZW50Q29tbWVudHMgPSBldmVudENvbW1lbnRzLmNvbmNhdChjb21tZW50cyk7XG4gICAgfVxuICB9KTtcbiAgLy8gZGVkdXBcbiAgcmV0dXJuIGV2ZW50Q29tbWVudHMuZmlsdGVyKCBmdW5jdGlvbihlbCwgaW5kZXgsIGFycmF5KSB7XG4gICAgcmV0dXJuIGFycmF5LmluZGV4T2YoZWwpID09PSBpbmRleDtcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW1cbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRMZWFkaW5nQ29tbWVudHMobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGNvbW1lbnRzID0gbm9kZS5sZWFkaW5nQ29tbWVudHM7XG4gIGlmICghY29tbWVudHMgfHwgY29tbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIHJldHVybiBjb21tZW50cy5tYXAoZnVuY3Rpb24oY29tbWVudCkge1xuICAgIHJldHVybiBjb21tZW50LnZhbHVlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhcnNlNSBQcm9wZXJ0eSBBU1Qgbm9kZSBpbnRvIGl0cyBIeWRyb2x5c2lzIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7UHJvcGVydHlEZXNjcmlwdG9yfVxuICovXG5mdW5jdGlvbiB0b1Byb3BlcnR5RGVzY3JpcHRvcihub2RlKSB7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgbmFtZTogb2JqZWN0S2V5VG9TdHJpbmcobm9kZS5rZXkpLFxuICAgIHR5cGU6IGNsb3N1cmVUeXBlKG5vZGUudmFsdWUpLFxuICAgIGRlc2M6IGdldEF0dGFjaGVkQ29tbWVudChub2RlKVxuICB9O1xuXG4gIGlmIChub2RlLnZhbHVlLnR5cGUgPT09ICdGdW5jdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgcmVzdWx0LnBhcmFtcyA9IChub2RlLnZhbHVlLnBhcmFtcyB8fCBbXSkubWFwKGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICByZXR1cm4ge25hbWU6IHBhcmFtLm5hbWV9O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNsb3N1cmVUeXBlOiAgICAgICAgICAgY2xvc3VyZVR5cGUsXG4gIGdldEF0dGFjaGVkQ29tbWVudDogICAgZ2V0QXR0YWNoZWRDb21tZW50LFxuICBnZXRFdmVudENvbW1lbnRzOiAgICAgIGdldEV2ZW50Q29tbWVudHMsXG4gIG1hdGNoZXNDYWxsRXhwcmVzc2lvbjogbWF0Y2hlc0NhbGxFeHByZXNzaW9uLFxuICBvYmplY3RLZXlUb1N0cmluZzogICAgIG9iamVjdEtleVRvU3RyaW5nLFxuICB0b1Byb3BlcnR5RGVzY3JpcHRvcjogIHRvUHJvcGVydHlEZXNjcmlwdG9yLFxufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZSgnZXN0cmF2ZXJzZScpO1xuXG52YXIgZXN1dGlsID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcblxudmFyIG51bUZlYXR1cmVzID0gMDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmZWF0dXJlRmluZGVyKCkge1xuICAvKiogQHR5cGUgeyFBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59IFRoZSBmZWF0dXJlcyB3ZSd2ZSBmb3VuZC4gKi9cbiAgdmFyIGZlYXR1cmVzID0gW107XG5cbiAgdmFyIHZpc2l0b3JzID0ge1xuXG4gICAgZW50ZXJDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gZW50ZXJDYWxsRXhwcmVzc2lvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmICghZXN1dGlsLm1hdGNoZXNDYWxsRXhwcmVzc2lvbihub2RlLmNhbGxlZSwgWydQb2x5bWVyJywgJ0Jhc2UnLCAnX2FkZEZlYXR1cmUnXSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLyoqIEB0eXBlIHshRmVhdHVyZURlc2NyaXB0b3J9ICovXG4gICAgICB2YXIgZmVhdHVyZSA9IHt9O1xuICAgICAgdGhpcy5fZXh0cmFjdERlc2MoZmVhdHVyZSwgbm9kZSwgcGFyZW50KTtcbiAgICAgIHRoaXMuX2V4dHJhY3RQcm9wZXJ0aWVzKGZlYXR1cmUsIG5vZGUsIHBhcmVudCk7XG5cbiAgICAgIGZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XG4gICAgfSxcblxuICAgIF9leHRyYWN0RGVzYzogZnVuY3Rpb24gX2V4dHJhY3REZXNjKGZlYXR1cmUsIG5vZGUsIHBhcmVudCkge1xuICAgICAgZmVhdHVyZS5kZXNjID0gZXN1dGlsLmdldEF0dGFjaGVkQ29tbWVudChwYXJlbnQpO1xuICAgIH0sXG5cbiAgICBfZXh0cmFjdFByb3BlcnRpZXM6IGZ1bmN0aW9uIF9leHRyYWN0UHJvcGVydGllcyhmZWF0dXJlLCBub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZhciBmZWF0dXJlTm9kZSA9IG5vZGUuYXJndW1lbnRzWzBdO1xuICAgICAgaWYgKGZlYXR1cmVOb2RlLnR5cGUgIT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gUG9seW1lci5CYXNlLl9hZGRGZWF0dXJlIHRvIGJlIGFuIG9iamVjdC4nLFxuICAgICAgICAgICAgJ0dvdCcsIGZlYXR1cmVOb2RlLnR5cGUsICdpbnN0ZWFkLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWZlYXR1cmVOb2RlLnByb3BlcnRpZXMpIHJldHVybjtcblxuICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzID0gZmVhdHVyZU5vZGUucHJvcGVydGllcy5tYXAoZXN1dGlsLnRvUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgICB9LFxuXG4gIH07XG5cbiAgcmV0dXJuIHt2aXNpdG9yczogdmlzaXRvcnMsIGZlYXR1cmVzOiBmZWF0dXJlc307XG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGZpbmRBbGlhcyA9IGZ1bmN0aW9uIGZpbmRBbGlhcyhuYW1lcywgYWxpYXNlcywgbmFtZSkge1xuICBpZiAoIW5hbWVzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGFsaWFzZXNbbmFtZXMuaW5kZXhPZihuYW1lKV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRBbGlhcztcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xuXG52YXIgcCA9IGRvbTUucHJlZGljYXRlcztcblxudmFyIGlzSHRtbEltcG9ydE5vZGUgPSBwLkFORChcbiAgcC5oYXNUYWdOYW1lKCdsaW5rJyksXG4gIHAuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gIHAuTk9UKFxuICAgIHAuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2NzcycpXG4gIClcbik7XG5cbnZhciBpc1N0eWxlTm9kZSA9IHAuT1IoXG4gIC8vIGlubGluZSBzdHlsZVxuICBwLmhhc1RhZ05hbWUoJ3N0eWxlJyksXG4gIC8vIGV4dGVybmFsIHN0eWxlc2hlZXRcbiAgcC5BTkQoXG4gICAgcC5oYXNUYWdOYW1lKCdsaW5rJyksXG4gICAgcC5oYXNBdHRyVmFsdWUoJ3JlbCcsICdzdHlsZXNoZWV0JylcbiAgKSxcbiAgLy8gcG9seW1lciBzcGVjaWZpYyBleHRlcm5hbCBzdHlsZXNoZWV0XG4gIHAuQU5EKFxuICAgIHAuaGFzVGFnTmFtZSgnbGluaycpLFxuICAgIHAuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gICAgcC5oYXNBdHRyVmFsdWUoJ3R5cGUnLCAnY3NzJylcbiAgKVxuKTtcblxuZnVuY3Rpb24gYWRkTm9kZShub2RlLCByZWdpc3RyeSkge1xuICBpZiAoaXNIdG1sSW1wb3J0Tm9kZShub2RlKSkge1xuICAgIHJlZ2lzdHJ5LmltcG9ydC5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzU3R5bGVOb2RlKG5vZGUpKSB7XG4gICAgcmVnaXN0cnkuc3R5bGUucHVzaChub2RlKTtcbiAgfSBlbHNlIGlmIChyZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShub2RlLnRhZ05hbWUpKSB7XG4gICAgcmVnaXN0cnlbbm9kZS50YWdOYW1lXS5wdXNoKG5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldExpbmVBbmRDb2x1bW4oc3RyaW5nLCBjaGFyTnVtYmVyKSB7XG4gIGlmIChjaGFyTnVtYmVyID4gc3RyaW5nLmxlbmd0aCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVE9ETyhham8pOiBDYWNoaW5nIHRoZSBsaW5lIGxlbmd0aHMgb2YgZWFjaCBkb2N1bWVudCBjb3VsZCBiZSBtdWNoIGZhc3Rlci5cbiAgdmFyIHNsaWNlZCA9IHN0cmluZy5zbGljZSgwLGNoYXJOdW1iZXIrMSk7XG4gIHZhciBzcGxpdCA9IHNsaWNlZC5zcGxpdCgnXFxuJyk7XG4gIHZhciBsaW5lID0gc3BsaXQubGVuZ3RoO1xuICB2YXIgY29sdW1uID0gc3BsaXRbc3BsaXQubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICByZXR1cm4ge2xpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1ufTtcbn1cblxuLyoqXG4qIFBhcnNlNSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnQuXG4qIEB0eXBlZGVmIHtPYmplY3R9IERvY3VtZW50QVNUXG4qL1xuXG4vKipcbiogVGhlIEFTVHMgb2YgdGhlIEhUTUwgZWxlbWVudHMgbmVlZGVkIHRvIHJlcHJlc2VudCBQb2x5bWVyIGVsZW1lbnRzLlxuKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJzZWRJbXBvcnRcbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IHRlbXBsYXRlIFRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIEFTVCBhdCBlYWNoIG91dGVybW9zdCB0ZW1wbGF0ZSB0YWcuXG4qIEBwcm9wZXJ0eSB7QXJyYXk8RG9jdW1lbnRBU1Q+fSBzY3JpcHQgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggc2NyaXB0IHRhZyBub3QgaW5zaWRlIGEgdGVtcGxhdGUuXG4qIEBwcm9wZXJ0eSB7QXJyYXk8RG9jdW1lbnRBU1Q+fSBzdHlsZSBUaGUgZW50cnkgcG9pbnRzIHRvIHRoZSBBU1QgYXQgc3R5bGUgdGFnIG91dHNpZGUgYSB0ZW1wbGF0ZS5cbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IGRvbS1tb2R1bGUgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggb3V0ZXJtb3N0IGRvbS1tb2R1bGUgZWxlbWVudC5cbiogQHByb3BlcnR5IHtEb2N1bWVudEFTVH0gYXN0IFRoZSBmdWxsIHBhcnNlNSBhc3QgZm9yIHRoZSBkb2N1bWVudC5cbiovXG5cbi8qKlxuKiBQYXJzZSBodG1sIGludG8gQVNUcy5cbiogQHBhcmFtIHtzdHJpbmd9IGh0bWxTdHJpbmcgQSB1dGY4LCBodG1sNSBkb2N1bWVudCBjb250YWluaW5nIHBvbHltZXIgZWxlbWVudCBvciBtb2R1bGUgZGVmaW5pdG9ucy5cbiogQHBhcmFtIHtzdHJpbmd9IGhyZWYgICAgICAgVGhlIHBhdGggb2YgdGhlIGRvY3VtZW50LlxuKiBAcmV0dXJuIHtQYXJzZWRJbXBvcnR9XG4qL1xudmFyIGltcG9ydFBhcnNlID0gZnVuY3Rpb24gaW1wb3J0UGFyc2UoaHRtbFN0cmluZywgaHJlZikge1xuICB2YXIgZG9jO1xuICB0cnkge1xuICAgIGRvYyA9IGRvbTUucGFyc2UoaHRtbFN0cmluZywge2xvY2F0aW9uSW5mbzogdHJ1ZX0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWRkIGxpbmUvY29sdW1uIGluZm9ybWF0aW9uXG4gIGRvbTUudHJlZU1hcChkb2MsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5fX2xvY2F0aW9uICYmIG5vZGUuX19sb2NhdGlvbi5zdGFydCA+PSAwKSB7XG4gICAgICBub2RlLl9fbG9jYXRpb25EZXRhaWwgPSBnZXRMaW5lQW5kQ29sdW1uKGh0bWxTdHJpbmcsIG5vZGUuX19sb2NhdGlvbi5zdGFydCk7XG4gICAgICBpZiAoaHJlZikge1xuICAgICAgICBub2RlLl9fb3duZXJEb2N1bWVudCA9IGhyZWY7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB2YXIgcmVnaXN0cnkgPSB7XG4gICAgICBiYXNlOiBbXSxcbiAgICAgIHRlbXBsYXRlOiBbXSxcbiAgICAgIHNjcmlwdDogW10sXG4gICAgICBzdHlsZTogW10sXG4gICAgICBpbXBvcnQ6IFtdLFxuICAgICAgJ2RvbS1tb2R1bGUnOiBbXX07XG5cbiAgdmFyIHF1ZXVlID0gW10uY29uY2F0KGRvYy5jaGlsZE5vZGVzKTtcbiAgdmFyIG5leHROb2RlO1xuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIG5leHROb2RlID0gcXVldWUuc2hpZnQoKTtcbiAgICBpZiAobmV4dE5vZGUgJiYgbmV4dE5vZGUudGFnTmFtZSkge1xuICAgICAgcXVldWUgPSBxdWV1ZS5jb25jYXQobmV4dE5vZGUuY2hpbGROb2Rlcyk7XG4gICAgICBhZGROb2RlKG5leHROb2RlLCByZWdpc3RyeSk7XG4gICAgfVxuICB9XG4gIHJlZ2lzdHJ5LmFzdCA9IGRvYztcbiAgcmV0dXJuIHJlZ2lzdHJ5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbXBvcnRQYXJzZTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLyoqXG4qIEZpbmRzIGFuZCBhbm5vdGF0ZXMgdGhlIFBvbHltZXIoKSBhbmQgbW9kdWxhdGUoKSBjYWxscyBpbiBqYXZhc2NyaXB0LlxuKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXNwcmVlID0gcmVxdWlyZSgnZXNwcmVlJyk7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGJlaGF2aW9yRmluZGVyID0gcmVxdWlyZSgnLi9iZWhhdmlvci1maW5kZXInKTtcbnZhciBlbGVtZW50RmluZGVyICA9IHJlcXVpcmUoJy4vZWxlbWVudC1maW5kZXInKTtcbnZhciBmZWF0dXJlRmluZGVyICA9IHJlcXVpcmUoJy4vZmVhdHVyZS1maW5kZXInKTtcblxuZnVuY3Rpb24gdHJhdmVyc2UodmlzaXRvclJlZ2lzdHJpZXMpIHtcbiAgdmFyIHZpc2l0b3I7XG4gIGZ1bmN0aW9uIGFwcGx5VmlzaXRvcnMobmFtZSwgbm9kZSwgcGFyZW50KSB7XG4gICAgdmFyIHJldHVyblZhbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2l0b3JSZWdpc3RyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmFtZSBpbiB2aXNpdG9yUmVnaXN0cmllc1tpXSkge1xuICAgICAgICByZXR1cm5WYWwgPSB2aXNpdG9yUmVnaXN0cmllc1tpXVtuYW1lXShub2RlLCBwYXJlbnQpO1xuICAgICAgICBpZiAocmV0dXJuVmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGVudGVyOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZpc2l0b3IgPSAnZW50ZXInICsgbm9kZS50eXBlO1xuICAgICAgcmV0dXJuIGFwcGx5VmlzaXRvcnModmlzaXRvciwgbm9kZSwgcGFyZW50KTtcbiAgICB9LFxuICAgIGxlYXZlOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZpc2l0b3IgPSAnbGVhdmUnICsgbm9kZS50eXBlO1xuICAgICAgcmV0dXJuIGFwcGx5VmlzaXRvcnModmlzaXRvciwgbm9kZSwgcGFyZW50KTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBqc1BhcnNlID0gZnVuY3Rpb24ganNQYXJzZShqc1N0cmluZykge1xuICB2YXIgc2NyaXB0ID0gZXNwcmVlLnBhcnNlKGpzU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YXR0YWNoQ29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2M6IHRydWV9KTtcblxuICB2YXIgZmVhdHVyZUluZm8gPSBmZWF0dXJlRmluZGVyKCk7XG4gIHZhciBiZWhhdmlvckluZm8gPSBiZWhhdmlvckZpbmRlcigpO1xuICB2YXIgZWxlbWVudEluZm8gPSBlbGVtZW50RmluZGVyKCk7XG5cbiAgdmFyIHZpc2l0b3JzID0gW2ZlYXR1cmVJbmZvLCBiZWhhdmlvckluZm8sIGVsZW1lbnRJbmZvXS5tYXAoZnVuY3Rpb24oaW5mbykge1xuICAgIHJldHVybiBpbmZvLnZpc2l0b3JzO1xuICB9KTtcbiAgZXN0cmF2ZXJzZS50cmF2ZXJzZShzY3JpcHQsIHRyYXZlcnNlKHZpc2l0b3JzKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBiZWhhdmlvcnM6IGJlaGF2aW9ySW5mby5iZWhhdmlvcnMsXG4gICAgZWxlbWVudHM6ICBlbGVtZW50SW5mby5lbGVtZW50cyxcbiAgICBmZWF0dXJlczogIGZlYXR1cmVJbmZvLmZlYXR1cmVzLFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBqc1BhcnNlO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEFuIGFubm90YXRlZCBKU0RvYyBibG9jayB0YWcsIGFsbCBmaWVsZHMgYXJlIG9wdGlvbmFsbHkgcHJvY2Vzc2VkIGV4Y2VwdCBmb3JcbiAqIHRoZSB0YWc6XG4gKlxuICogICAgIEBUQUcge1RZUEV9IE5BTUUgREVTQ1xuICpcbiAqIGBsaW5lYCBhbmQgYGNvbGAgaW5kaWNhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGV4dCB0aGF0XG4gKiB0aGUgdGFnIHdhcyBleHRyYWN0ZWQgZnJvbSAtIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGNvbW1lbnRcbiAqIGNvbnRlbnRzIChlLmcuIHRoZSB2YWx1ZSBvZiBgZGVzY2Agb24gYSBkZXNjcmlwdG9yIG5vZGUpLiBMaW5lcyBhcmVcbiAqIDEtaW5kZXhlZC5cbiAqXG4gKiBAdHlwZWRlZiB7e1xuICogICB0YWc6ICAgc3RyaW5nLFxuICogICB0eXBlOiA/c3RyaW5nLFxuICogICBuYW1lOiA/c3RyaW5nLFxuICogICBib2R5OiA/c3RyaW5nLFxuICogfX1cbiAqL1xudmFyIEpzZG9jVGFnO1xuXG4vKipcbiAqIFRoZSBwYXJzZWQgcmVwcmVzZW50YXRpb24gb2YgYSBKU0RvYyBjb21tZW50LlxuICpcbiAqIEB0eXBlZGVmIHt7XG4gKiAgIGJvZHk6ID9zdHJpbmcsXG4gKiAgIHRhZ3M6IEFycmF5PEpzZG9jVGFnPixcbiAqIH19XG4gKi9cbnZhciBKc2RvY0Fubm90YXRpb247XG5cbnZhciBJU19UQUdfTElORSAgPSAvXlsgXFx0XSpALztcbnZhciBET0NfU1BMSVRURVIgPSAvKD89WyBcXHRdKlxcKj9bIFxcdF0/QCkvO1xuXG4vKipcbiAqIEdpdmVuIGEgSlNEb2Mgc3RyaW5nIChtaW51cyBvcGVuaW5nL2Nsb3NpbmcgY29tbWVudCBkZWxpbWl0ZXJzKSwgZXh0cmFjdCBpdHNcbiAqIGJvZHkgYW5kIHRhZ3MuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvY3NcbiAqIEByZXR1cm4gez9Kc2RvY0Fubm90YXRpb259XG4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNkb2MoZG9jcykge1xuICB2YXIgYm9keSA9IG51bGw7XG4gIHZhciB0YWdzID0gW107XG5cbiAgLy8gV2UgYnVpbGQgdXAgY29udGVudCAobWludXMgbGluZSBwcmVmaXhlcyksIGFuZCBkaXNwYXRjaCB0aGF0IGNvbnRlbnRcbiAgLy8gYXBwcm9wcmlhdGVseSAoYXMgYm9keSBvciB0YWdzKS5cbiAgZnVuY3Rpb24gZmx1c2hDb250ZW50KGNvbnRlbnQpIHtcbiAgICBpZiAoY29udGVudCA9PT0gJycpIHJldHVybjtcbiAgICBpZiAoYm9keSA9PT0gbnVsbCAmJiAhSVNfVEFHX0xJTkUudGVzdChjb250ZW50KSkge1xuICAgICAgYm9keSA9IGNvbnRlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ3MgPSB0YWdzLmNvbmNhdChwYXJzZVRhZyhjb250ZW50KSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2Ugc3BsaXQgdGhlIEpTRG9jIHN0cmluZyBpbnRvIHRoZSBib2R5IHRleHQgYW5kIGVhY2ggYmxvY2sgdGFnIHNlY3Rpb24uXG4gIHZhciBidWZmZXIgPSAnJztcbiAgZG9jcy5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgIGxpbmUgPSBfc3RyaXBQcmVmaXgobGluZSk7XG4gICAgLy8gSGl0IGEgYmxvY2sgdGFnOyBmbHVzaCB0aGUgcHJldmlvdXMgYnVmZmVyLlxuICAgIGlmIChJU19UQUdfTElORS50ZXN0KGxpbmUpKSB7XG4gICAgICBmbHVzaENvbnRlbnQoYnVmZmVyKTtcbiAgICAgIGJ1ZmZlciA9ICcnO1xuICAgIH1cbiAgICBidWZmZXIgPSBidWZmZXIgKyAoYnVmZmVyICYmICdcXG4nIHx8ICcnKSArIGxpbmU7XG4gIH0pO1xuICBmbHVzaENvbnRlbnQoYnVmZmVyKTtcblxuICBib2R5ID0gdW5pbmRlbnQoYm9keSk7XG4gIHJldHVybiB7XG4gICAgYm9keTogYm9keSA9PT0gJycgPyBudWxsIDogYm9keSxcbiAgICB0YWdzOiB0YWdzLFxuICB9O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYSBsZWFkaW5nIGAqYCBjaGFyYWN0ZXIsIGFuZCB3aGl0ZXNwYWNlIGJlZm9yZSBpdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGluZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBfc3RyaXBQcmVmaXgobGluZSkge1xuICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eWyBcXHRdKlxcKiguKikkLyk7XG4gIGlmICghbWF0Y2gpIHJldHVybiBsaW5lO1xuICByZXR1cm4gbWF0Y2hbMV07XG59XG5cbnZhciBTUExJVF9CTE9DS19UQUdTICA9IC9eWyBcXHRdKihAXFxTKyg/OltcXHNcXG5dK0BcXFMrKSopKyhbXFxzXFxTXSopJC9tO1xuLy8gTm90ZSB0aGF0IHRoZSBjb250ZW50IChtYXRjaFsyXSBhYm92ZSkgd2lsbCBhbHdheXMgaGF2ZSBsZWFkaW5nIHdoaXRlc3BhY2UsXG4vLyBvciBiZSBhbiBlbXB0eSBzdHJpbmcuXG4vL1xuLy8gVE9ETyhuZXZpcik6IERvIGEgcmVhbCBwYXJzZXIgc28gdGhhdCB0aGlzIHByb3Blcmx5IGhhbmRsZXMgbWF0Y2hpbmcgYnJhY2VzLFxuLy8gcmF0aGVyIHRoYW4ganVzdCByZWx5aW5nIG9uIGdyZWVkeSBtYXRjaGluZy5cbnZhciBCTE9DS19UQUdfQ09OVEVOVCA9IC9eKD86W1xcc1xcbl0rXFx7KC4qKVxcfSk/KD86W1xcc1xcbl0rKFxcUyspKT8oPzpbXFxzXFxuXSsoW1xcc1xcU10qKSk/JC9tO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgT3JpZ2luYWwgdGV4dCBmb3IgdGhlIGJsb2NrIHRhZyhzKS5cbiAqIEByZXR1cm4ge0FycmF5PEpzZG9jVGFnPn0gVGhlIHBhcnNlZCB0YWcocykuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGFnKHNvdXJjZSkge1xuICB2YXIgc3BsaXQgICA9IHNvdXJjZS5tYXRjaChTUExJVF9CTE9DS19UQUdTKTtcbiAgdmFyIHRhZ3MgICAgPSBzcGxpdFsxXS5zcGxpdCgvW1xcc1xcbl0rL20pLm1hcChmdW5jdGlvbih0KSB7IHJldHVybiB0LnN1YnN0cigxKTsgfSk7XG4gIHZhciBjb250ZW50ID0gc3BsaXRbMl07XG5cbiAgLy8gTm90ZSB0aGF0IHRoZSBjb250ZW50XG4gIHZhciBtYXRjaCA9IGNvbnRlbnQubWF0Y2goQkxPQ0tfVEFHX0NPTlRFTlQpO1xuICByZXR1cm4gdGFncy5tYXAoZnVuY3Rpb24odGFnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhZzogIHRhZyxcbiAgICAgIHR5cGU6IG1hdGNoWzFdIHx8IG51bGwsXG4gICAgICBuYW1lOiBtYXRjaFsyXSB8fCBudWxsLFxuICAgICAgYm9keTogbWF0Y2hbM10gfHwgbnVsbCxcbiAgICB9O1xuICB9KTtcbn1cblxuLy8gVXRpbGl0eVxuXG4vKipcbiAqIEBwYXJhbSB7SnNkb2NBbm5vdGF0aW9ufSBqc2RvY1xuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc1RhZyhqc2RvYywgdGFnTmFtZSkge1xuICBpZiAoIWpzZG9jIHx8ICFqc2RvYy50YWdzKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBqc2RvYy50YWdzLnNvbWUoZnVuY3Rpb24odGFnKSB7IHJldHVybiB0YWcudGFnID09PSB0YWdOYW1lOyB9KTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgSlNEb2MgdGFnIG1hdGNoaW5nIGBuYW1lYCBhbmQgcmV0dXJucyBpdHMgdmFsdWUgYXQgYGtleWAuXG4gKlxuICogQHBhcmFtIHtKc2RvY0Fubm90YXRpb259IGpzZG9jXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtzdHJpbmc9fSBrZXkgSWYgb21pdHRlZCwgdGhlIGVudGlyZSB0YWcgb2JqZWN0IGlzIHJldHVybmVkLlxuICogQHJldHVybiB7P3N0cmluZ3xPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldFRhZyhqc2RvYywgdGFnTmFtZSwga2V5KSB7XG4gIGlmICghanNkb2MgfHwgIWpzZG9jLnRhZ3MpIHJldHVybiBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc2RvYy50YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRhZyA9IGpzZG9jLnRhZ3NbaV07XG4gICAgaWYgKHRhZy50YWcgPT09IHRhZ05hbWUpIHtcbiAgICAgIHJldHVybiBrZXkgPyB0YWdba2V5XSA6IHRhZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/c3RyaW5nfSB0ZXh0XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiB1bmluZGVudCh0ZXh0KSB7XG4gIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG4gIHZhciBsaW5lcyAgPSB0ZXh0LnJlcGxhY2UoL1xcdC9nLCAnICAnKS5zcGxpdCgnXFxuJyk7XG4gIHZhciBpbmRlbnQgPSBsaW5lcy5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgbGluZSkge1xuICAgIGlmICgvXlxccyokLy50ZXN0KGxpbmUpKSByZXR1cm4gcHJldjsgIC8vIENvbXBsZXRlbHkgaWdub3JlIGJsYW5rIGxpbmVzLlxuXG4gICAgdmFyIGxpbmVJbmRlbnQgPSBsaW5lLm1hdGNoKC9eKFxccyopLylbMF0ubGVuZ3RoO1xuICAgIGlmIChwcmV2ID09PSBudWxsKSByZXR1cm4gbGluZUluZGVudDtcbiAgICByZXR1cm4gbGluZUluZGVudCA8IHByZXYgPyBsaW5lSW5kZW50IDogcHJldjtcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihsKSB7IHJldHVybiBsLnN1YnN0cihpbmRlbnQpOyB9KS5qb2luKCdcXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFRhZzogICAgIGdldFRhZyxcbiAgaGFzVGFnOiAgICAgaGFzVGFnLFxuICBwYXJzZUpzZG9jOiBwYXJzZUpzZG9jLFxuICBwYXJzZVRhZzogICBwYXJzZVRhZyxcbiAgdW5pbmRlbnQ6ICAgdW5pbmRlbnQsXG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIGpzaGludCBub2RlOnRydWVcbid1c2Ugc3RyaWN0JztcblxuLy8ganNoaW50IC1XMDc5XG4vLyBQcm9taXNlIHBvbHlmaWxsXG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlIHx8IHJlcXVpcmUoJ2VzNi1wcm9taXNlJykuUHJvbWlzZTtcbi8vIGpzaGludCArVzA3OVxuXG5mdW5jdGlvbiBEZWZlcnJlZCgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBzZWxmLnJlc29sdmUgPSByZXNvbHZlO1xuICAgIHNlbGYucmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBrbm93cyBob3cgdG8gcmVzb2x2ZSByZXNvdXJjZXMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZXNvbHZlclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oc3RyaW5nLCBEZWZlcnJlZCk6IGJvb2xlYW59IGFjY2VwdCBBdHRlbXB0IHRvIHJlc29sdmVcbiAqICAgICBgZGVmZXJyZWRgIHdpdGggdGhlIGNvbnRlbnRzIHRoZSBzcGVjaWZpZWQgVVJMLiBSZXR1cm5zIGZhbHNlIGlmIHRoZVxuICogICAgIFJlc29sdmVyIGlzIHVuYWJsZSB0byByZXNvbHZlIHRoZSBVUkwuXG4gKi9cblxuXG4vKipcbiAqIEEgRmlsZUxvYWRlciBsZXRzIHlvdSByZXNvbHZlIFVSTHMgd2l0aCBhIHNldCBvZiBwb3RlbnRpYWwgcmVzb2x2ZXJzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5mdW5jdGlvbiBGaWxlTG9hZGVyKCkge1xuICB0aGlzLnJlc29sdmVycyA9IFtdO1xuICAvLyBtYXAgdXJsIC0+IERlZmVycmVkXG4gIHRoaXMucmVxdWVzdHMgPSB7fTtcbn1cbkZpbGVMb2FkZXIucHJvdG90eXBlID0ge1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gaW5zdGFuY2Ugb2YgYSBSZXNvbHZlciBjbGFzcyB0byB0aGUgbGlzdCBvZiB1cmwgcmVzb2x2ZXJzXG4gICAqXG4gICAqIE9yZGVyaW5nIG9mIHJlc29sdmVycyBpcyBtb3N0IHRvIGxlYXN0IHJlY2VudGx5IGFkZGVkXG4gICAqIFRoZSBmaXJzdCByZXNvbHZlciB0byBcImFjY2VwdFwiIHRoZSB1cmwgd2lucy5cbiAgICogQHBhcmFtIHtSZXNvbHZlcn0gcmVzb2x2ZXIgVGhlIHJlc29sdmVyIHRvIGFkZC5cbiAgICovXG4gIGFkZFJlc29sdmVyOiBmdW5jdGlvbihyZXNvbHZlcikge1xuICAgIHRoaXMucmVzb2x2ZXJzLnB1c2gocmVzb2x2ZXIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBwcm9taXNlIGZvciBhbiBhYnNvbHV0ZSB1cmxcbiAgICpcbiAgICogVXJsIHJlcXVlc3RzIGFyZSBkZWR1cGxpY2F0ZWQgYnkgdGhlIGxvYWRlciwgcmV0dXJuaW5nIHRoZSBzYW1lIFByb21pc2UgZm9yXG4gICAqIGlkZW50aWNhbCB1cmxzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgICAgICAgIFRoZSBhYnNvbHV0ZSB1cmwgdG8gcmVxdWVzdC5cbiAgICogQHJldHVybiB7UHJvbWlzZS48c3RyaW5nPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBVUkwuXG4gICAqL1xuICByZXF1ZXN0OiBmdW5jdGlvbih1cmkpIHtcbiAgICB2YXIgcHJvbWlzZTtcblxuICAgIGlmICghKHVyaSBpbiB0aGlzLnJlcXVlc3RzKSkge1xuICAgICAgdmFyIGhhbmRsZWQgPSBmYWxzZTtcbiAgICAgIHZhciBkZWZlcnJlZCA9IG5ldyBEZWZlcnJlZCgpO1xuICAgICAgdGhpcy5yZXF1ZXN0c1t1cmldID0gZGVmZXJyZWQ7XG5cbiAgICAgIC8vIGxvb3AgYmFja3dhcmRzIHRocm91Z2ggcmVzb2x2ZXJzIHVudGlsIG9uZSBcImFjY2VwdHNcIiB0aGUgcmVxdWVzdFxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMucmVzb2x2ZXJzLmxlbmd0aCAtIDEsIHI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHIgPSB0aGlzLnJlc29sdmVyc1tpXTtcbiAgICAgICAgaWYgKHIuYWNjZXB0KHVyaSwgZGVmZXJyZWQpKSB7XG4gICAgICAgICAgaGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFoYW5kbGVkKSB7XG4gICAgICAgIGRlZmVycmVkLnJlamVjdCgnbm8gcmVzb2x2ZXIgZm91bmQnKTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RzW3VyaV0ucHJvbWlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlTG9hZGVyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIGpzaGludCBub2RlOnRydWVcbid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuXG5mdW5jdGlvbiBnZXRGaWxlKGZpbGVwYXRoLCBkZWZlcnJlZCkge1xuICBmcy5yZWFkRmlsZShmaWxlcGF0aCwgJ3V0Zi04JywgZnVuY3Rpb24oZXJyLCBjb250ZW50KSB7XG4gICAgaWYgKGVycikge1xuICAgICAgZGVmZXJyZWQucmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmVycmVkLnJlc29sdmUoY29udGVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHBhdGhhYCBpcyBhIHNpYmxpbmcgb3IgYXVudCBvZiBgcGF0aGJgLlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTaWJsaW5nT3JBdW50KHBhdGhhLCBwYXRoYikge1xuICB2YXIgcGFyZW50ID0gcGF0aC5kaXJuYW1lKHBhdGhhKTtcbiAgaWYgKHBhdGhiLmluZGV4T2YocGF0aGEpID09PSAtMSAmJiBwYXRoYi5pbmRleE9mKHBhcmVudCkgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hhbmdlIGBsb2NhbFBhdGhgIGZyb20gYSBzaWJsaW5nIG9mIGBiYXNlUGF0aGAgdG8gYmUgYSBjaGlsZCBvZlxuICogYGJhc2VQYXRoYCBqb2luZWQgd2l0aCBgcmVkaXJlY3RgLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiByZWRpcmVjdFNpYmxpbmcoYmFzZVBhdGgsIGxvY2FsUGF0aCwgcmVkaXJlY3QpIHtcbiAgdmFyIHBhcmVudCA9IHBhdGguZGlybmFtZShiYXNlUGF0aCk7XG4gIHZhciByZWRpcmVjdGVkID0gcGF0aC5qb2luKGJhc2VQYXRoLCByZWRpcmVjdCwgbG9jYWxQYXRoLnNsaWNlKHBhcmVudC5sZW5ndGgpKTtcbiAgcmV0dXJuIHJlZGlyZWN0ZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcmVxdWVzdHMgdmlhIHRoZSBmaWxlIHN5c3RlbS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcuaG9zdCBIb3N0bmFtZSB0byBtYXRjaCBmb3IgYWJzb2x1dGUgdXJscy5cbiAqICAgICBNYXRjaGVzIFwiL1wiIGJ5IGRlZmF1bHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcuYmFzZVBhdGggUHJlZml4IGRpcmVjdG9yeSBmb3IgY29tcG9uZW50cyBpbiB1cmwuXG4gKiAgICAgRGVmYXVsdHMgdG8gXCIvXCIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJvb3QgRmlsZXN5c3RlbSByb290IHRvIHNlYXJjaC4gRGVmYXVsdHMgdG8gdGhlXG4gKiAgICAgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucmVkaXJlY3QgV2hlcmUgdG8gcmVkaXJlY3QgbG9va3VwcyB0byBzaWJsaW5ncy5cbiAqL1xuZnVuY3Rpb24gRlNSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG59XG5GU1Jlc29sdmVyLnByb3RvdHlwZSA9IHtcbiAgYWNjZXB0OiBmdW5jdGlvbih1cmksIGRlZmVycmVkKSB7XG4gICAgdmFyIHBhcnNlZCA9IHVybC5wYXJzZSh1cmkpO1xuICAgIHZhciBob3N0ID0gdGhpcy5jb25maWcuaG9zdDtcbiAgICB2YXIgYmFzZSA9IHRoaXMuY29uZmlnLmJhc2VQYXRoICYmIGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmNvbmZpZy5iYXNlUGF0aCk7XG4gICAgdmFyIHJvb3QgPSB0aGlzLmNvbmZpZy5yb290ICYmIHBhdGgubm9ybWFsaXplKHRoaXMuY29uZmlnLnJvb3QpO1xuICAgIHZhciByZWRpcmVjdCA9IHRoaXMuY29uZmlnLnJlZGlyZWN0O1xuXG4gICAgdmFyIGxvY2FsO1xuXG4gICAgaWYgKCFwYXJzZWQuaG9zdG5hbWUgfHwgcGFyc2VkLmhvc3RuYW1lID09PSBob3N0KSB7XG4gICAgICBsb2NhbCA9IHBhcnNlZC5wYXRobmFtZTtcbiAgICB9XG5cbiAgICBpZiAobG9jYWwpIHtcbiAgICAgIC8vIHVuLWVzY2FwZSBIVE1MIGVzY2FwZXNcbiAgICAgIGxvY2FsID0gZGVjb2RlVVJJQ29tcG9uZW50KGxvY2FsKTtcblxuICAgICAgaWYgKGJhc2UpIHtcbiAgICAgICAgbG9jYWwgPSBwYXRoLnJlbGF0aXZlKGJhc2UsIGxvY2FsKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb290KSB7XG4gICAgICAgIGxvY2FsID0gcGF0aC5qb2luKHJvb3QsIGxvY2FsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZGlyZWN0ICYmIGlzU2libGluZ09yQXVudChyb290LCBsb2NhbCkpIHtcbiAgICAgICAgbG9jYWwgPSByZWRpcmVjdFNpYmxpbmcocm9vdCwgbG9jYWwsIHJlZGlyZWN0KTtcbiAgICAgIH1cblxuICAgICAgZ2V0RmlsZShsb2NhbCwgZGVmZXJyZWQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZTUmVzb2x2ZXI7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgcmVzb2x2ZXIgdGhhdCByZXNvbHZlcyB0byBudWxsIGFueSB1cmkgbWF0Y2hpbmcgY29uZmlnLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZyBUaGUgdXJsIHRvIGBhY2NlcHRgLlxuICovXG5mdW5jdGlvbiBOb29wUmVzb2x2ZXIoY29uZmlnKSB7XG4gIHRoaXMuY29uZmlnID0gY29uZmlnO1xufVxuXG5Ob29wUmVzb2x2ZXIucHJvdG90eXBlID0ge1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgdXJpICAgICAgVGhlIGFic29sdXRlIFVSSSBiZWluZyByZXF1ZXN0ZWQuXG4gICAqIEBwYXJhbSB7IURlZmVycmVkfSBkZWZlcnJlZCBUaGUgZGVmZXJyZWQgcHJvbWlzZSB0aGF0IHNob3VsZCBiZSByZXNvbHZlZCBpZlxuICAgKiAgICAgdGhpcyByZXNvbHZlciBoYW5kbGVzIHRoZSBVUkkuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIFVSSSBpcyBoYW5kbGVkIGJ5IHRoaXMgcmVzb2x2ZXIuXG4gICAqL1xuICBhY2NlcHQ6IGZ1bmN0aW9uKHVyaSwgZGVmZXJyZWQpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnRlc3QpIHtcbiAgICAgIGlmICh1cmkuc2VhcmNoKHRoaXMuY29uZmlnKSA9PSAtMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghdGhpcy5jb25maWcudGVzdCh1cmkpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBkZWZlcnJlZC5yZXNvbHZlKCcnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBOb29wUmVzb2x2ZXI7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBnZXRGaWxlKHVybCwgZGVmZXJyZWQsIGNvbmZpZykge1xuICAvKiBnbG9iYWwgWE1MSHR0cFJlcXVlc3Q6ZmFsc2UgKi9cbiAgdmFyIHggPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgeC5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhdHVzID0geC5zdGF0dXMgfHwgMDtcbiAgICBpZiAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDApIHtcbiAgICAgIGRlZmVycmVkLnJlc29sdmUoeC5yZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmVycmVkLnJlamVjdCgneGhyIHN0YXR1czogJyArIHN0YXR1cyk7XG4gICAgfVxuICB9O1xuICB4Lm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgZGVmZXJyZWQucmVqZWN0KGUpO1xuICB9O1xuICB4Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gIGlmIChjb25maWcgJiYgY29uZmlnLnJlc3BvbnNlVHlwZSkge1xuICAgIHgucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgfVxuICB4LnNlbmQoKTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSByZXNvbHZlciB0aGF0IHJlcXVlc3RzIHJlc291cmNlcyBvdmVyIFhIUi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5yZXNwb25zZVR5cGUgVHlwZSBvZiBvYmplY3QgdG8gYmUgcmV0dXJuZWQgYnkgdGhlXG4gKiAgICAgWEhSLiBEZWZhdWx0cyB0byAndGV4dCcsIGFjY2VwdHMgJ2RvY3VtZW50JywgJ2FycmF5YnVmZmVyJywgYW5kICdqc29uJy5cbiAqL1xuZnVuY3Rpb24gWEhSUmVzb2x2ZXIoY29uZmlnKSB7XG4gIHRoaXMuY29uZmlnID0gY29uZmlnO1xufVxuWEhSUmVzb2x2ZXIucHJvdG90eXBlID0ge1xuICBhY2NlcHQ6IGZ1bmN0aW9uKHVyaSwgZGVmZXJyZWQpIHtcbiAgICBnZXRGaWxlKHVyaSwgZGVmZXJyZWQsIHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBYSFJSZXNvbHZlcjtcbiIsbnVsbCwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRRdWV1ZTtcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgICAgICAgICAgY3VycmVudFF1ZXVlW2ldKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xufVxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICBxdWV1ZS5wdXNoKGZ1bik7XG4gICAgaWYgKCFkcmFpbmluZykge1xuICAgICAgICBzZXRUaW1lb3V0KGRyYWluUXVldWUsIDApO1xuICAgIH1cbn07XG5cbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG4vLyBUT0RPKHNodHlsbWFuKVxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyohIGh0dHA6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjIuNCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teIC1+XS8sIC8vIHVucHJpbnRhYmxlIEFTQ0lJIGNoYXJzICsgbm9uLUFTQ0lJIGNoYXJzXG5cdHJlZ2V4U2VwYXJhdG9ycyA9IC9cXHgyRXxcXHUzMDAyfFxcdUZGMEV8XFx1RkY2MS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSk7XG5cdH1cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGBBcnJheSNtYXBgIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeSBhcnJheVxuXHQgKiBpdGVtLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXAoYXJyYXksIGZuKSB7XG5cdFx0dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdGFycmF5W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgc2ltcGxlIGBBcnJheSNtYXBgLWxpa2Ugd3JhcHBlciB0byB3b3JrIHdpdGggZG9tYWluIG5hbWUgc3RyaW5ncy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeVxuXHQgKiBjaGFyYWN0ZXIuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrXG5cdCAqIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwRG9tYWluKHN0cmluZywgZm4pIHtcblx0XHRyZXR1cm4gbWFwKHN0cmluZy5zcGxpdChyZWdleFNlcGFyYXRvcnMpLCBmbikuam9pbignLicpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcblx0ICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuXHQgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuXHQgKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcblx0ICogbWF0Y2hpbmcgVVRGLTE2LlxuXHQgKiBAc2VlIGBwdW55Y29kZS51Y3MyLmVuY29kZWBcblx0ICogQHNlZSA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIHRvIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHlcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIHRvIFVuaWNvZGUuIE9ubHkgdGhlXG5cdCAqIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS4gaXQgZG9lc24ndFxuXHQgKiBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB0b1xuXHQgKiBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgUHVueWNvZGUgZG9tYWluIG5hbWUgdG8gY29udmVydCB0byBVbmljb2RlLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUHVueWNvZGVcblx0ICogc3RyaW5nLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9Vbmljb2RlKGRvbWFpbikge1xuXHRcdHJldHVybiBtYXBEb21haW4oZG9tYWluLCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSB0byBQdW55Y29kZS4gT25seSB0aGVcblx0ICogbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLiBpdCBkb2Vzbid0XG5cdCAqIG1hdHRlciBpZiB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQncyBhbHJlYWR5IGluIEFTQ0lJLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgdG8gY29udmVydCwgYXMgYSBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZS5cblx0ICovXG5cdGZ1bmN0aW9uIHRvQVNDSUkoZG9tYWluKSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihkb21haW4sIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjIuNCcsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XG5cdFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7IC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVJbmRleChlbGVtZW50LCBuYW1lKSB7XG4gIGlmICghZWxlbWVudC5hdHRycykge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGVsZW1lbnQuYXR0cnNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWZmIFtlbGVtZW50XSBoYXMgdGhlIGF0dHJpYnV0ZSBbbmFtZV0sIGBmYWxzZWBcbiAqICAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBoYXNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICByZXR1cm4gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSkgIT09IC0xO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gVGhlIHN0cmluZyB2YWx1ZSBvZiBhdHRyaWJ1dGUgYG5hbWVgLCBvciBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lKSB7XG4gIHZhciBpID0gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSk7XG4gIGlmIChpID4gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5hdHRyc1tpXS52YWx1ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpID0gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSk7XG4gIGlmIChpID4gLTEpIHtcbiAgICBlbGVtZW50LmF0dHJzW2ldLnZhbHVlID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5hdHRycy5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICB2YXIgaSA9IGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpO1xuICBpZiAoaSA+IC0xKSB7XG4gICAgZWxlbWVudC5hdHRycy5zcGxpY2UoaSwgMSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzVGFnTmFtZShuYW1lKSB7XG4gIHZhciBuID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS50YWdOYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbjtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHJlZ2V4Lm1hdGNoKHRhZ05hbWUpYCBmaW5kcyBhIG1hdGNoLlxuICpcbiAqIFRoaXMgd2lsbCB1c2UgdGhlIGxvd2VyY2FzZWQgdGFnTmFtZSBmb3IgY29tcGFyaXNvbi5cbiAqIFxuICogQHBhcmFtICB7UmVnRXhwfSByZWdleFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzTWF0Y2hpbmdUYWdOYW1lKHJlZ2V4KSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLnRhZ05hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3Qobm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNDbGFzcyhuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG4gICAgaWYgKCFhdHRyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBhdHRyLnNwbGl0KCcgJykuaW5kZXhPZihuYW1lKSA+IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjb2xsYXBzZVRleHRSYW5nZShwYXJlbnQsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRleHQgPSAnJztcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgdGV4dCArPSBnZXRUZXh0Q29udGVudChwYXJlbnQuY2hpbGROb2Rlc1tpXSk7XG4gIH1cbiAgcGFyZW50LmNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCAoZW5kIC0gc3RhcnQpICsgMSk7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIHRuID0gbmV3VGV4dE5vZGUodGV4dCk7XG4gICAgdG4ucGFyZW50Tm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnQsIDAsIHRuKTtcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgdGV4dCBpbnNpZGUgYW4gZWxlbWVudFxuICpcbiAqIEVxdWl2YWxlbnQgdG8gYGVsZW1lbnQubm9ybWFsaXplKClgIGluIHRoZSBicm93c2VyXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvbm9ybWFsaXplXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShub2RlKSB7XG4gIGlmICghKGlzRWxlbWVudChub2RlKSB8fCBpc0RvY3VtZW50KG5vZGUpIHx8IGlzRG9jdW1lbnRGcmFnbWVudChub2RlKSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHRleHRSYW5nZVN0YXJ0ID0gLTE7XG4gIGZvciAodmFyIGkgPSBub2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgbjsgaSA+PSAwOyBpLS0pIHtcbiAgICBuID0gbm9kZS5jaGlsZE5vZGVzW2ldO1xuICAgIGlmIChpc1RleHROb2RlKG4pKSB7XG4gICAgICBpZiAodGV4dFJhbmdlU3RhcnQgPT0gLTEpIHtcbiAgICAgICAgdGV4dFJhbmdlU3RhcnQgPSBpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgLy8gY29sbGFwc2UgbGVhZGluZyB0ZXh0IG5vZGVzXG4gICAgICAgIGNvbGxhcHNlVGV4dFJhbmdlKG5vZGUsIDAsIHRleHRSYW5nZVN0YXJ0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVjdXJzZVxuICAgICAgbm9ybWFsaXplKG4pO1xuICAgICAgLy8gY29sbGFwc2UgdGhlIHJhbmdlIGFmdGVyIHRoaXMgbm9kZVxuICAgICAgaWYgKHRleHRSYW5nZVN0YXJ0ID4gLTEpIHtcbiAgICAgICAgY29sbGFwc2VUZXh0UmFuZ2Uobm9kZSwgaSArIDEsIHRleHRSYW5nZVN0YXJ0KTtcbiAgICAgICAgdGV4dFJhbmdlU3RhcnQgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRleHQgdmFsdWUgb2YgYSBub2RlIG9yIGVsZW1lbnRcbiAqXG4gKiBFcXVpdmFsZW50IHRvIGBub2RlLnRleHRDb250ZW50YCBpbiB0aGUgYnJvd3NlclxuICovXG5mdW5jdGlvbiBnZXRUZXh0Q29udGVudChub2RlKSB7XG4gIGlmIChpc0NvbW1lbnROb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUuZGF0YTtcbiAgfVxuICBpZiAoaXNUZXh0Tm9kZShub2RlKSkge1xuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9XG4gIHZhciBzdWJ0cmVlID0gbm9kZVdhbGtBbGwobm9kZSwgaXNUZXh0Tm9kZSk7XG4gIHJldHVybiBzdWJ0cmVlLm1hcChnZXRUZXh0Q29udGVudCkuam9pbignJyk7XG59XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0IHZhbHVlIG9mIGEgbm9kZSBvciBlbGVtZW50XG4gKlxuICogRXF1aXZhbGVudCB0byBgbm9kZS50ZXh0Q29udGVudCA9IHZhbHVlYCBpbiB0aGUgYnJvd3NlclxuICovXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudChub2RlLCB2YWx1ZSkge1xuICBpZiAoaXNDb21tZW50Tm9kZShub2RlKSkge1xuICAgIG5vZGUuZGF0YSA9IHZhbHVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUobm9kZSkpIHtcbiAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRuID0gbmV3VGV4dE5vZGUodmFsdWUpO1xuICAgIHRuLnBhcmVudE5vZGUgPSBub2RlO1xuICAgIG5vZGUuY2hpbGROb2RlcyA9IFt0bl07XG4gIH1cbn1cblxuLyoqXG4gKiBNYXRjaCB0aGUgdGV4dCBpbnNpZGUgYW4gZWxlbWVudCwgdGV4dG5vZGUsIG9yIGNvbW1lbnRcbiAqXG4gKiBOb3RlOiBub2RlV2Fsa0FsbCB3aXRoIGhhc1RleHRWYWx1ZSBtYXkgcmV0dXJuIGFuIHRleHRub2RlIGFuZCBpdHMgcGFyZW50IGlmXG4gKiB0aGUgdGV4dG5vZGUgaXMgdGhlIG9ubHkgY2hpbGQgaW4gdGhhdCBwYXJlbnQuXG4gKi9cbmZ1bmN0aW9uIGhhc1RleHRWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRUZXh0Q29udGVudChub2RlKSA9PT0gdmFsdWU7XG4gIH07XG59XG5cbi8qKlxuICogT1IgYW4gYXJyYXkgb2YgcHJlZGljYXRlc1xuICovXG5mdW5jdGlvbiBPUigvKiAuLi5ydWxlcyAqLykge1xuICB2YXIgcnVsZXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgcnVsZXNbaV0gPSBhcmd1bWVudHNbaV07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocnVsZXNbaV0obm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBBTkQgYW4gYXJyYXkgb2YgcHJlZGljYXRlc1xuICovXG5mdW5jdGlvbiBBTkQoLyogLi4ucnVsZXMgKi8pIHtcbiAgdmFyIHJ1bGVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHJ1bGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFydWxlc1tpXShub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG4vKipcbiAqIG5lZ2F0ZSBhbiBpbmRpdmlkdWFsIHByZWRpY2F0ZSwgb3IgYSBncm91cCB3aXRoIEFORCBvciBPUlxuICovXG5mdW5jdGlvbiBOT1QocHJlZGljYXRlRm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gIXByZWRpY2F0ZUZuKG5vZGUpO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcmVkaWNhdGUgdGhhdCBtYXRjaGVzIGFueSBub2RlIHdpdGggYSBwYXJlbnQgbWF0Y2hpbmcgYHByZWRpY2F0ZUZuYC5cbiAqL1xuZnVuY3Rpb24gcGFyZW50TWF0Y2hlcyhwcmVkaWNhdGVGbikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgd2hpbGUocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwcmVkaWNhdGVGbihwYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzQXR0cihhdHRyKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUluZGV4KG5vZGUsIGF0dHIpID4gLTE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0F0dHJWYWx1ZShhdHRyLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobm9kZSwgYXR0cikgPT09IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnQnO1xufVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50RnJhZ21lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudC1mcmFnbWVudCc7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSBub2RlLnRhZ05hbWU7XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jztcbn1cblxuZnVuY3Rpb24gaXNDb21tZW50Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2NvbW1lbnQnO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYG1hcGZuYCB0byBgbm9kZWAgYW5kIHRoZSB0cmVlIGJlbG93IGBub2RlYCwgcmV0dXJuaW5nIGEgZmxhdHRlbmVkXG4gKiBsaXN0IG9mIHJlc3VsdHMuXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdHJlZU1hcChub2RlLCBtYXBmbikge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBub2RlV2Fsayhub2RlLCBmdW5jdGlvbihub2RlKXtcbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobWFwZm4obm9kZSkpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHRyZWUgZG93biBmcm9tIGBub2RlYCwgYXBwbHlpbmcgdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogUmV0dXJuIHRoZSBmaXJzdCBub2RlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcHJlZGljYXRlLlxuICpcbiAqIEByZXR1cm5zIHtOb2RlfSBgbnVsbGAgaWYgbm8gbm9kZSBtYXRjaGVzLCBwYXJzZTUgbm9kZSBvYmplY3QgaWYgYSBub2RlXG4gKiBtYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG5vZGVXYWxrKG5vZGUsIHByZWRpY2F0ZSkge1xuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgdmFyIG1hdGNoID0gbnVsbDtcbiAgaWYgKG5vZGUuY2hpbGROb2Rlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXRjaCA9IG5vZGVXYWxrKG5vZGUuY2hpbGROb2Rlc1tpXSwgcHJlZGljYXRlKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHRyZWUgZG93biBmcm9tIGBub2RlYCwgYXBwbHlpbmcgdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogQWxsIG5vZGVzIG1hdGNoaW5nIHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gZnJvbSBgbm9kZWAgdG8gbGVhdmVzIHdpbGwgYmVcbiAqIHJldHVybmVkLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheVtOb2RlXX1cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIG1hdGNoZXMgPSBbXTtcbiAgfVxuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG5vZGUpO1xuICB9XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZVdhbGtBbGwobm9kZS5jaGlsZE5vZGVzW2ldLCBwcmVkaWNhdGUsIG1hdGNoZXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gX3JldmVyc2VOb2RlV2Fsa0FsbChub2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMpIHtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgbWF0Y2hlcyA9IFtdO1xuICB9XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBub2RlV2Fsa0FsbChub2RlLmNoaWxkTm9kZXNbaV0sIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gICAgfVxuICB9XG4gIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcbiAgICBtYXRjaGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtBbGxgLCBidXQgb25seSByZXR1cm5zIG5vZGVzIHRoYXQgYXJlIGVpdGhlciBcbiAqIGFuY2VzdG9ycyBvciBlYXJsaWVyIGNvdXNpbnMvc2libGluZ3MgaW4gdGhlIGRvY3VtZW50LlxuICpcbiAqIE5vZGVzIGFyZSByZXR1cm5lZCBpbiByZXZlcnNlIGRvY3VtZW50IG9yZGVyLCBzdGFydGluZyBmcm9tIGBub2RlYC5cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtBbGxQcmlvcihub2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMpIHtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgbWF0Y2hlcyA9IFtdO1xuICB9XG4gIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcbiAgICBtYXRjaGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgLy8gU2VhcmNoIG91ciBlYXJsaWVyIHNpYmxpbmdzIGFuZCB0aGVpciBkZXNjZW5kZW50cy5cbiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkge1xuICAgIHZhciBpZHggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZE5vZGVzLnNsaWNlKDAsIGlkeCk7XG4gICAgZm9yICh2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuICAgICAgX3JldmVyc2VOb2RlV2Fsa0FsbChzaWJsaW5nc1tpXSwgcHJlZGljYXRlLCBtYXRjaGVzKTtcbiAgICB9XG4gICAgbm9kZVdhbGtBbGxQcmlvcihwYXJlbnQsIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtgLCBidXQgb25seSBtYXRjaGVzIGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5KG5vZGUsIHByZWRpY2F0ZSkge1xuICB2YXIgZWxlbWVudFByZWRpY2F0ZSA9IEFORChpc0VsZW1lbnQsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBub2RlV2Fsayhub2RlLCBlbGVtZW50UHJlZGljYXRlKTtcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIGBub2RlV2Fsa0FsbGAsIGJ1dCBvbmx5IG1hdGNoZXMgZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheVtFbGVtZW50XX1cbiAqL1xuZnVuY3Rpb24gcXVlcnlBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIHZhciBlbGVtZW50UHJlZGljYXRlID0gQU5EKGlzRWxlbWVudCwgcHJlZGljYXRlKTtcbiAgcmV0dXJuIG5vZGVXYWxrQWxsKG5vZGUsIGVsZW1lbnRQcmVkaWNhdGUsIG1hdGNoZXMpO1xufVxuXG5mdW5jdGlvbiBuZXdUZXh0Tm9kZSh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIG5vZGVOYW1lOiAnI3RleHQnLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBwYXJlbnROb2RlOiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5ld0NvbW1lbnROb2RlKGNvbW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogJyNjb21tZW50JyxcbiAgICBkYXRhOiBjb21tZW50LFxuICAgIHBhcmVudE5vZGU6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbmV3RWxlbWVudCh0YWdOYW1lLCBuYW1lc3BhY2UpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogdGFnTmFtZSxcbiAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgIGNoaWxkTm9kZXM6IFtdLFxuICAgIG5hbWVzcGFjZVVSSTogbmFtZXNwYWNlIHx8ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyxcbiAgICBhdHRyczogW10sXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZShvbGROb2RlLCBuZXdOb2RlKSB7XG4gIGluc2VydEJlZm9yZShvbGROb2RlLnBhcmVudE5vZGUsIG9sZE5vZGUsIG5ld05vZGUpO1xuICByZW1vdmUob2xkTm9kZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShub2RlKSB7XG4gIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHtcbiAgICB2YXIgaWR4ID0gcGFyZW50LmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2UoaWR4LCAxKTtcbiAgfVxuICBub2RlLnBhcmVudE5vZGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50LCBvbGROb2RlLCBuZXdOb2RlKSB7XG4gIHJlbW92ZShuZXdOb2RlKTtcbiAgdmFyIGlkeCA9IHBhcmVudC5jaGlsZE5vZGVzLmluZGV4T2Yob2xkTm9kZSk7XG4gIHBhcmVudC5jaGlsZE5vZGVzLnNwbGljZShpZHgsIDAsIG5ld05vZGUpO1xuICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZChwYXJlbnQsIG5vZGUpIHtcbiAgcmVtb3ZlKG5vZGUpO1xuICBwYXJlbnQuY2hpbGROb2Rlcy5wdXNoKG5vZGUpO1xuICBub2RlLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG59XG5cbnZhciBwYXJzZTUgPSByZXF1aXJlKCdwYXJzZTUnKTtcbmZ1bmN0aW9uIHBhcnNlKHRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyBwYXJzZTUuUGFyc2VyKHBhcnNlNS5UcmVlQWRhcHRlcnMuZGVmYXVsdCwgb3B0aW9ucyk7XG4gIHJldHVybiBwYXJzZXIucGFyc2UodGV4dCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQodGV4dCkge1xuICB2YXIgcGFyc2VyID0gbmV3IHBhcnNlNS5QYXJzZXIoKTtcbiAgcmV0dXJuIHBhcnNlci5wYXJzZUZyYWdtZW50KHRleHQpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUoYXN0KSB7XG4gIHZhciBzZXJpYWxpemVyID0gbmV3IHBhcnNlNS5TZXJpYWxpemVyKCk7XG4gIHJldHVybiBzZXJpYWxpemVyLnNlcmlhbGl6ZShhc3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0QXR0cmlidXRlOiBnZXRBdHRyaWJ1dGUsXG4gIGhhc0F0dHJpYnV0ZTogaGFzQXR0cmlidXRlLFxuICBzZXRBdHRyaWJ1dGU6IHNldEF0dHJpYnV0ZSxcbiAgcmVtb3ZlQXR0cmlidXRlOiByZW1vdmVBdHRyaWJ1dGUsXG4gIGdldFRleHRDb250ZW50OiBnZXRUZXh0Q29udGVudCxcbiAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICByZW1vdmU6IHJlbW92ZSxcbiAgcmVwbGFjZTogcmVwbGFjZSxcbiAgYXBwZW5kOiBhcHBlbmQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcbiAgaXNEb2N1bWVudDogaXNEb2N1bWVudCxcbiAgaXNEb2N1bWVudEZyYWdtZW50OiBpc0RvY3VtZW50RnJhZ21lbnQsXG4gIGlzRWxlbWVudDogaXNFbGVtZW50LFxuICBpc1RleHROb2RlOiBpc1RleHROb2RlLFxuICBpc0NvbW1lbnROb2RlOiBpc0NvbW1lbnROb2RlLFxuICBxdWVyeTogcXVlcnksXG4gIHF1ZXJ5QWxsOiBxdWVyeUFsbCxcbiAgbm9kZVdhbGs6IG5vZGVXYWxrLFxuICBub2RlV2Fsa0FsbDogbm9kZVdhbGtBbGwsXG4gIG5vZGVXYWxrQWxsUHJpb3I6IG5vZGVXYWxrQWxsUHJpb3IsXG4gIHRyZWVNYXA6IHRyZWVNYXAsXG4gIHByZWRpY2F0ZXM6IHtcbiAgICBoYXNDbGFzczogaGFzQ2xhc3MsXG4gICAgaGFzQXR0cjogaGFzQXR0cixcbiAgICBoYXNBdHRyVmFsdWU6IGhhc0F0dHJWYWx1ZSxcbiAgICBoYXNNYXRjaGluZ1RhZ05hbWU6IGhhc01hdGNoaW5nVGFnTmFtZSxcbiAgICBoYXNUYWdOYW1lOiBoYXNUYWdOYW1lLFxuICAgIGhhc1RleHRWYWx1ZTogaGFzVGV4dFZhbHVlLFxuICAgIEFORDogQU5ELFxuICAgIE9SOiBPUixcbiAgICBOT1Q6IE5PVCxcbiAgICBwYXJlbnRNYXRjaGVzOiBwYXJlbnRNYXRjaGVzXG4gIH0sXG4gIGNvbnN0cnVjdG9yczoge1xuICAgIHRleHQ6IG5ld1RleHROb2RlLFxuICAgIGNvbW1lbnQ6IG5ld0NvbW1lbnROb2RlLFxuICAgIGVsZW1lbnQ6IG5ld0VsZW1lbnRcbiAgfSxcbiAgcGFyc2U6IHBhcnNlLFxuICBwYXJzZUZyYWdtZW50OiBwYXJzZUZyYWdtZW50LFxuICBzZXJpYWxpemU6IHNlcmlhbGl6ZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMuUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vcGFyc2VyJyk7XHJcbmV4cG9ydHMuU2ltcGxlQXBpUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvc2ltcGxlX2FwaS9zaW1wbGVfYXBpX3BhcnNlcicpO1xyXG5leHBvcnRzLlRyZWVTZXJpYWxpemVyID1cclxuZXhwb3J0cy5TZXJpYWxpemVyID0gcmVxdWlyZSgnLi9saWIvc2VyaWFsaXphdGlvbi9zZXJpYWxpemVyJyk7XHJcbmV4cG9ydHMuSnNEb21QYXJzZXIgPSByZXF1aXJlKCcuL2xpYi9qc2RvbS9qc2RvbV9wYXJzZXInKTtcclxuXHJcbmV4cG9ydHMuVHJlZUFkYXB0ZXJzID0ge1xyXG4gICAgZGVmYXVsdDogcmVxdWlyZSgnLi9saWIvdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXHJcbiAgICBodG1scGFyc2VyMjogcmVxdWlyZSgnLi9saWIvdHJlZV9hZGFwdGVycy9odG1scGFyc2VyMicpXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcblxuLy9Db25zdFxudmFyIFZBTElEX0RPQ1RZUEVfTkFNRSA9ICdodG1sJyxcbiAgICBRVUlSS1NfTU9ERV9TWVNURU1fSUQgPSAnaHR0cDovL3d3dy5pYm0uY29tL2RhdGEvZHRkL3YxMS9pYm14aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCcsXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICAgICBcIisvL3NpbG1hcmlsLy9kdGQgaHRtbCBwcm8gdjByMTEgMTk5NzAxMDEvL2VuXCIsXG4gICAgICAgIFwiLS8vYWR2YXNvZnQgbHRkLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMS8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMi8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMWUvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4wLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vZW4vL1wiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMiBmaW5hbC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vZW4vLzMuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sLy9lbi8vMy4wXCIsXG4gICAgICAgIFwiLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvL2VuXCIsXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvL2VuXCIsXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvL2VuXCIsXG4gICAgICAgIFwiLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgc3RyaWN0IGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vZW5cIixcbiAgICAgICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgMS4wLy9lblwiLFxuICAgICAgICBcIi0vL3NweWdsYXNzLy9kdGQgaHRtbCAyLjAgZXh0ZW5kZWQvL2VuXCIsXG4gICAgICAgIFwiLS8vc3EvL2R0ZCBodG1sIDIuMCBob3RtZXRhbCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9zdW4gbWljcm9zeXN0ZW1zIGNvcnAuLy9kdGQgaG90amF2YSBzdHJpY3QgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMgMTk5NS0wMy0yNC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMiBmaW5hbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMi8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCA0LjAgZnJhbWVzZXQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsLy9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDk3MDQyMS8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCB3MyBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy9lblwiLFxuICAgICAgICBcIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy9lbi8vXCIsXG4gICAgICAgIFwiLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwgMi4wLy9lblwiLFxuICAgICAgICBcIi0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy9lblwiXG4gICAgXSxcbiAgICBRVUlSS1NfTU9ERV9OT19TWVNURU1fSURfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIGZyYW1lc2V0Ly8nLFxuICAgICAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vJ1xuICAgIF0sXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEUyA9IFtcbiAgICAgICAgJy0vL3czby8vZHRkIHczIGh0bWwgc3RyaWN0IDMuMC8vZW4vLycsXG4gICAgICAgICctL3czYy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsL2VuJyxcbiAgICAgICAgJ2h0bWwnXG4gICAgXTtcblxuXG4vL1V0aWxzXG5mdW5jdGlvbiBlbnF1b3RlRG9jdHlwZUlkKGlkKSB7XG4gICAgdmFyIHF1b3RlID0gaWQuaW5kZXhPZignXCInKSAhPT0gLTEgPyAnXFwnJyA6ICdcIic7XG5cbiAgICByZXR1cm4gcXVvdGUgKyBpZCArIHF1b3RlO1xufVxuXG5cbi8vQVBJXG5leHBvcnRzLmlzUXVpcmtzID0gZnVuY3Rpb24gKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIGlmIChuYW1lICE9PSBWQUxJRF9ET0NUWVBFX05BTUUpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKHN5c3RlbUlkICYmIHN5c3RlbUlkLnRvTG93ZXJDYXNlKCkgPT09IFFVSVJLU19NT0RFX1NZU1RFTV9JRClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpIHtcbiAgICAgICAgcHVibGljSWQgPSBwdWJsaWNJZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChRVUlSS1NfTU9ERV9QVUJMSUNfSURTLmluZGV4T2YocHVibGljSWQpID4gLTEpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICB2YXIgcHJlZml4ZXMgPSBRVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVM7XG5cbiAgICAgICAgaWYgKHN5c3RlbUlkID09PSBudWxsKVxuICAgICAgICAgICAgcHJlZml4ZXMgPSBwcmVmaXhlcy5jb25jYXQoUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHB1YmxpY0lkLmluZGV4T2YocHJlZml4ZXNbaV0pID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5zZXJpYWxpemVDb250ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIHZhciBzdHIgPSAnIURPQ1RZUEUgJyArIG5hbWU7XG5cbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpXG4gICAgICAgIHN0ciArPSAnIFBVQkxJQyAnICsgZW5xdW90ZURvY3R5cGVJZChwdWJsaWNJZCk7XG5cbiAgICBlbHNlIGlmIChzeXN0ZW1JZCAhPT0gbnVsbClcbiAgICAgICAgc3RyICs9ICcgU1lTVEVNJztcblxuICAgIGlmIChzeXN0ZW1JZCAhPT0gbnVsbClcbiAgICAgICAgc3RyICs9ICcgJyArIGVucXVvdGVEb2N0eXBlSWQoc3lzdGVtSWQpO1xuXG4gICAgcmV0dXJuIHN0cjtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxyXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4vaHRtbCcpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVMsXHJcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcclxuICAgIEFUVFJTID0gSFRNTC5BVFRSUztcclxuXHJcblxyXG4vL01JTUUgdHlwZXNcclxudmFyIE1JTUVfVFlQRVMgPSB7XHJcbiAgICBURVhUX0hUTUw6ICd0ZXh0L2h0bWwnLFxyXG4gICAgQVBQTElDQVRJT05fWE1MOiAnYXBwbGljYXRpb24veGh0bWwreG1sJ1xyXG59O1xyXG5cclxuLy9BdHRyaWJ1dGVzXHJcbnZhciBERUZJTklUSU9OX1VSTF9BVFRSID0gJ2RlZmluaXRpb251cmwnLFxyXG4gICAgQURKVVNURURfREVGSU5JVElPTl9VUkxfQVRUUiA9ICdkZWZpbml0aW9uVVJMJyxcclxuICAgIFNWR19BVFRSU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICAgICAnYXR0cmlidXRlbmFtZSc6ICdhdHRyaWJ1dGVOYW1lJyxcclxuICAgICAgICAnYXR0cmlidXRldHlwZSc6ICdhdHRyaWJ1dGVUeXBlJyxcclxuICAgICAgICAnYmFzZWZyZXF1ZW5jeSc6ICdiYXNlRnJlcXVlbmN5JyxcclxuICAgICAgICAnYmFzZXByb2ZpbGUnOiAnYmFzZVByb2ZpbGUnLFxyXG4gICAgICAgICdjYWxjbW9kZSc6ICdjYWxjTW9kZScsXHJcbiAgICAgICAgJ2NsaXBwYXRodW5pdHMnOiAnY2xpcFBhdGhVbml0cycsXHJcbiAgICAgICAgJ2NvbnRlbnRzY3JpcHR0eXBlJzogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcclxuICAgICAgICAnY29udGVudHN0eWxldHlwZSc6ICdjb250ZW50U3R5bGVUeXBlJyxcclxuICAgICAgICAnZGlmZnVzZWNvbnN0YW50JzogJ2RpZmZ1c2VDb25zdGFudCcsXHJcbiAgICAgICAgJ2VkZ2Vtb2RlJzogJ2VkZ2VNb2RlJyxcclxuICAgICAgICAnZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZCc6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcclxuICAgICAgICAnZmlsdGVycmVzJzogJ2ZpbHRlclJlcycsXHJcbiAgICAgICAgJ2ZpbHRlcnVuaXRzJzogJ2ZpbHRlclVuaXRzJyxcclxuICAgICAgICAnZ2x5cGhyZWYnOiAnZ2x5cGhSZWYnLFxyXG4gICAgICAgICdncmFkaWVudHRyYW5zZm9ybSc6ICdncmFkaWVudFRyYW5zZm9ybScsXHJcbiAgICAgICAgJ2dyYWRpZW50dW5pdHMnOiAnZ3JhZGllbnRVbml0cycsXHJcbiAgICAgICAgJ2tlcm5lbG1hdHJpeCc6ICdrZXJuZWxNYXRyaXgnLFxyXG4gICAgICAgICdrZXJuZWx1bml0bGVuZ3RoJzogJ2tlcm5lbFVuaXRMZW5ndGgnLFxyXG4gICAgICAgICdrZXlwb2ludHMnOiAna2V5UG9pbnRzJyxcclxuICAgICAgICAna2V5c3BsaW5lcyc6ICdrZXlTcGxpbmVzJyxcclxuICAgICAgICAna2V5dGltZXMnOiAna2V5VGltZXMnLFxyXG4gICAgICAgICdsZW5ndGhhZGp1c3QnOiAnbGVuZ3RoQWRqdXN0JyxcclxuICAgICAgICAnbGltaXRpbmdjb25lYW5nbGUnOiAnbGltaXRpbmdDb25lQW5nbGUnLFxyXG4gICAgICAgICdtYXJrZXJoZWlnaHQnOiAnbWFya2VySGVpZ2h0JyxcclxuICAgICAgICAnbWFya2VydW5pdHMnOiAnbWFya2VyVW5pdHMnLFxyXG4gICAgICAgICdtYXJrZXJ3aWR0aCc6ICdtYXJrZXJXaWR0aCcsXHJcbiAgICAgICAgJ21hc2tjb250ZW50dW5pdHMnOiAnbWFza0NvbnRlbnRVbml0cycsXHJcbiAgICAgICAgJ21hc2t1bml0cyc6ICdtYXNrVW5pdHMnLFxyXG4gICAgICAgICdudW1vY3RhdmVzJzogJ251bU9jdGF2ZXMnLFxyXG4gICAgICAgICdwYXRobGVuZ3RoJzogJ3BhdGhMZW5ndGgnLFxyXG4gICAgICAgICdwYXR0ZXJuY29udGVudHVuaXRzJzogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxyXG4gICAgICAgICdwYXR0ZXJudHJhbnNmb3JtJzogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxyXG4gICAgICAgICdwYXR0ZXJudW5pdHMnOiAncGF0dGVyblVuaXRzJyxcclxuICAgICAgICAncG9pbnRzYXR4JzogJ3BvaW50c0F0WCcsXHJcbiAgICAgICAgJ3BvaW50c2F0eSc6ICdwb2ludHNBdFknLFxyXG4gICAgICAgICdwb2ludHNhdHonOiAncG9pbnRzQXRaJyxcclxuICAgICAgICAncHJlc2VydmVhbHBoYSc6ICdwcmVzZXJ2ZUFscGhhJyxcclxuICAgICAgICAncHJlc2VydmVhc3BlY3RyYXRpbyc6ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcclxuICAgICAgICAncHJpbWl0aXZldW5pdHMnOiAncHJpbWl0aXZlVW5pdHMnLFxyXG4gICAgICAgICdyZWZ4JzogJ3JlZlgnLFxyXG4gICAgICAgICdyZWZ5JzogJ3JlZlknLFxyXG4gICAgICAgICdyZXBlYXRjb3VudCc6ICdyZXBlYXRDb3VudCcsXHJcbiAgICAgICAgJ3JlcGVhdGR1cic6ICdyZXBlYXREdXInLFxyXG4gICAgICAgICdyZXF1aXJlZGV4dGVuc2lvbnMnOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcclxuICAgICAgICAncmVxdWlyZWRmZWF0dXJlcyc6ICdyZXF1aXJlZEZlYXR1cmVzJyxcclxuICAgICAgICAnc3BlY3VsYXJjb25zdGFudCc6ICdzcGVjdWxhckNvbnN0YW50JyxcclxuICAgICAgICAnc3BlY3VsYXJleHBvbmVudCc6ICdzcGVjdWxhckV4cG9uZW50JyxcclxuICAgICAgICAnc3ByZWFkbWV0aG9kJzogJ3NwcmVhZE1ldGhvZCcsXHJcbiAgICAgICAgJ3N0YXJ0b2Zmc2V0JzogJ3N0YXJ0T2Zmc2V0JyxcclxuICAgICAgICAnc3RkZGV2aWF0aW9uJzogJ3N0ZERldmlhdGlvbicsXHJcbiAgICAgICAgJ3N0aXRjaHRpbGVzJzogJ3N0aXRjaFRpbGVzJyxcclxuICAgICAgICAnc3VyZmFjZXNjYWxlJzogJ3N1cmZhY2VTY2FsZScsXHJcbiAgICAgICAgJ3N5c3RlbWxhbmd1YWdlJzogJ3N5c3RlbUxhbmd1YWdlJyxcclxuICAgICAgICAndGFibGV2YWx1ZXMnOiAndGFibGVWYWx1ZXMnLFxyXG4gICAgICAgICd0YXJnZXR4JzogJ3RhcmdldFgnLFxyXG4gICAgICAgICd0YXJnZXR5JzogJ3RhcmdldFknLFxyXG4gICAgICAgICd0ZXh0bGVuZ3RoJzogJ3RleHRMZW5ndGgnLFxyXG4gICAgICAgICd2aWV3Ym94JzogJ3ZpZXdCb3gnLFxyXG4gICAgICAgICd2aWV3dGFyZ2V0JzogJ3ZpZXdUYXJnZXQnLFxyXG4gICAgICAgICd4Y2hhbm5lbHNlbGVjdG9yJzogJ3hDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd5Y2hhbm5lbHNlbGVjdG9yJzogJ3lDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd6b29tYW5kcGFuJzogJ3pvb21BbmRQYW4nXHJcbiAgICB9LFxyXG4gICAgWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQID0ge1xyXG4gICAgICAgICd4bGluazphY3R1YXRlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FjdHVhdGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6YXJjcm9sZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdhcmNyb2xlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOmhyZWYnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnaHJlZicsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazpyb2xlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3JvbGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6c2hvdyc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdzaG93JywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnRpdGxlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3RpdGxlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnR5cGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAndHlwZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bWw6YmFzZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnYmFzZScsIG5hbWVzcGFjZTogTlMuWE1MfSxcclxuICAgICAgICAneG1sOmxhbmcnOiB7cHJlZml4OiAneG1sJywgbmFtZTogJ2xhbmcnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbDpzcGFjZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnc3BhY2UnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbG5zJzoge3ByZWZpeDogJycsIG5hbWU6ICd4bWxucycsIG5hbWVzcGFjZTogTlMuWE1MTlN9LFxyXG4gICAgICAgICd4bWxuczp4bGluayc6IHtwcmVmaXg6ICd4bWxucycsIG5hbWU6ICd4bGluaycsIG5hbWVzcGFjZTogTlMuWE1MTlN9XHJcblxyXG4gICAgfTtcclxuXHJcbi8vU1ZHIHRhZyBuYW1lcyBhZGp1c3RtZW50IG1hcFxyXG52YXIgU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICdhbHRnbHlwaCc6ICdhbHRHbHlwaCcsXHJcbiAgICAnYWx0Z2x5cGhkZWYnOiAnYWx0R2x5cGhEZWYnLFxyXG4gICAgJ2FsdGdseXBoaXRlbSc6ICdhbHRHbHlwaEl0ZW0nLFxyXG4gICAgJ2FuaW1hdGVjb2xvcic6ICdhbmltYXRlQ29sb3InLFxyXG4gICAgJ2FuaW1hdGVtb3Rpb24nOiAnYW5pbWF0ZU1vdGlvbicsXHJcbiAgICAnYW5pbWF0ZXRyYW5zZm9ybSc6ICdhbmltYXRlVHJhbnNmb3JtJyxcclxuICAgICdjbGlwcGF0aCc6ICdjbGlwUGF0aCcsXHJcbiAgICAnZmVibGVuZCc6ICdmZUJsZW5kJyxcclxuICAgICdmZWNvbG9ybWF0cml4JzogJ2ZlQ29sb3JNYXRyaXgnLFxyXG4gICAgJ2ZlY29tcG9uZW50dHJhbnNmZXInOiAnZmVDb21wb25lbnRUcmFuc2ZlcicsXHJcbiAgICAnZmVjb21wb3NpdGUnOiAnZmVDb21wb3NpdGUnLFxyXG4gICAgJ2ZlY29udm9sdmVtYXRyaXgnOiAnZmVDb252b2x2ZU1hdHJpeCcsXHJcbiAgICAnZmVkaWZmdXNlbGlnaHRpbmcnOiAnZmVEaWZmdXNlTGlnaHRpbmcnLFxyXG4gICAgJ2ZlZGlzcGxhY2VtZW50bWFwJzogJ2ZlRGlzcGxhY2VtZW50TWFwJyxcclxuICAgICdmZWRpc3RhbnRsaWdodCc6ICdmZURpc3RhbnRMaWdodCcsXHJcbiAgICAnZmVmbG9vZCc6ICdmZUZsb29kJyxcclxuICAgICdmZWZ1bmNhJzogJ2ZlRnVuY0EnLFxyXG4gICAgJ2ZlZnVuY2InOiAnZmVGdW5jQicsXHJcbiAgICAnZmVmdW5jZyc6ICdmZUZ1bmNHJyxcclxuICAgICdmZWZ1bmNyJzogJ2ZlRnVuY1InLFxyXG4gICAgJ2ZlZ2F1c3NpYW5ibHVyJzogJ2ZlR2F1c3NpYW5CbHVyJyxcclxuICAgICdmZWltYWdlJzogJ2ZlSW1hZ2UnLFxyXG4gICAgJ2ZlbWVyZ2UnOiAnZmVNZXJnZScsXHJcbiAgICAnZmVtZXJnZW5vZGUnOiAnZmVNZXJnZU5vZGUnLFxyXG4gICAgJ2ZlbW9ycGhvbG9neSc6ICdmZU1vcnBob2xvZ3knLFxyXG4gICAgJ2Zlb2Zmc2V0JzogJ2ZlT2Zmc2V0JyxcclxuICAgICdmZXBvaW50bGlnaHQnOiAnZmVQb2ludExpZ2h0JyxcclxuICAgICdmZXNwZWN1bGFybGlnaHRpbmcnOiAnZmVTcGVjdWxhckxpZ2h0aW5nJyxcclxuICAgICdmZXNwb3RsaWdodCc6ICdmZVNwb3RMaWdodCcsXHJcbiAgICAnZmV0aWxlJzogJ2ZlVGlsZScsXHJcbiAgICAnZmV0dXJidWxlbmNlJzogJ2ZlVHVyYnVsZW5jZScsXHJcbiAgICAnZm9yZWlnbm9iamVjdCc6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgICdnbHlwaHJlZic6ICdnbHlwaFJlZicsXHJcbiAgICAnbGluZWFyZ3JhZGllbnQnOiAnbGluZWFyR3JhZGllbnQnLFxyXG4gICAgJ3JhZGlhbGdyYWRpZW50JzogJ3JhZGlhbEdyYWRpZW50JyxcclxuICAgICd0ZXh0cGF0aCc6ICd0ZXh0UGF0aCdcclxufTtcclxuXHJcbi8vVGFncyB0aGF0IGNhdXNlcyBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbnZhciBFWElUU19GT1JFSUdOX0NPTlRFTlQgPSB7fTtcclxuXHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQklHXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJMT0NLUVVPVEVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQk9EWV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5DRU5URVJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQ09ERV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ERF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ESVZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRExdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRFRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1dID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1CRURdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDFdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDNdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSEVBRF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5IUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5JXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLklNR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSVNUSU5HXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk1FTlVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTUVUQV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5OT0JSXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk9MXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlBdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuUFJFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlJVQlldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TTUFMTF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TUEFOXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNUUk9OR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVFJJS0VdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1VCXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNVUF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UQUJMRV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UVF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5VXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlVMXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlZBUl0gPSB0cnVlO1xyXG5cclxuLy9DaGVjayBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbmV4cG9ydHMuY2F1c2VzRXhpdCA9IGZ1bmN0aW9uIChzdGFydFRhZ1Rva2VuKSB7XHJcbiAgICB2YXIgdG4gPSBzdGFydFRhZ1Rva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkZPTlQgJiYgKFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuQ09MT1IpICE9PSBudWxsIHx8XHJcbiAgICAgICAgVG9rZW5pemVyLmdldFRva2VuQXR0cihzdGFydFRhZ1Rva2VuLCBBVFRSUy5TSVpFKSAhPT0gbnVsbCB8fFxyXG4gICAgICAgIFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuRkFDRSkgIT09IG51bGwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEVYSVRTX0ZPUkVJR05fQ09OVEVOVFt0bl07XHJcbn07XHJcblxyXG4vL1Rva2VuIGFkanVzdG1lbnRzXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBERUZJTklUSU9OX1VSTF9BVFRSKSB7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmFkanVzdFRva2VuU1ZHQXR0cnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYWRqdXN0ZWRBdHRyTmFtZSA9IFNWR19BVFRSU19BREpVU1RNRU5UX01BUFt0b2tlbi5hdHRyc1tpXS5uYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKGFkanVzdGVkQXR0ck5hbWUpXHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBhZGp1c3RlZEF0dHJOYW1lO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5hZGp1c3RUb2tlblhNTEF0dHJzID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFkanVzdGVkQXR0ckVudHJ5ID0gWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQW3Rva2VuLmF0dHJzW2ldLm5hbWVdO1xyXG5cclxuICAgICAgICBpZiAoYWRqdXN0ZWRBdHRyRW50cnkpIHtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ucHJlZml4ID0gYWRqdXN0ZWRBdHRyRW50cnkucHJlZml4O1xyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZTtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZXNwYWNlID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZXNwYWNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5TVkdUYWdOYW1lID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICB2YXIgYWRqdXN0ZWRUYWdOYW1lID0gU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUFt0b2tlbi50YWdOYW1lXTtcclxuXHJcbiAgICBpZiAoYWRqdXN0ZWRUYWdOYW1lKVxyXG4gICAgICAgIHRva2VuLnRhZ05hbWUgPSBhZGp1c3RlZFRhZ05hbWU7XHJcbn07XHJcblxyXG4vL0ludGVncmF0aW9uIHBvaW50c1xyXG5leHBvcnRzLmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAodG4sIG5zKSB7XHJcbiAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTCAmJiAodG4gPT09ICQuTUkgfHwgdG4gPT09ICQuTU8gfHwgdG4gPT09ICQuTU4gfHwgdG4gPT09ICQuTVMgfHwgdG4gPT09ICQuTVRFWFQpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0h0bWxJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKHRuLCBucywgYXR0cnMpIHtcclxuICAgIGlmIChucyA9PT0gTlMuTUFUSE1MICYmIHRuID09PSAkLkFOTk9UQVRJT05fWE1MKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gQVRUUlMuRU5DT0RJTkcpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJzW2ldLnZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBNSU1FX1RZUEVTLlRFWFRfSFRNTCB8fCB2YWx1ZSA9PT0gTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9YTUw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5zID09PSBOUy5TVkcgJiYgKHRuID09PSAkLkZPUkVJR05fT0JKRUNUIHx8IHRuID09PSAkLkRFU0MgfHwgdG4gPT09ICQuVElUTEUpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTlMgPSBleHBvcnRzLk5BTUVTUEFDRVMgPSB7XHJcbiAgICBIVE1MOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXHJcbiAgICBNQVRITUw6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJyxcclxuICAgIFNWRzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcclxuICAgIFhMSU5LOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsXHJcbiAgICBYTUw6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLFxyXG4gICAgWE1MTlM6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLydcclxufTtcclxuXHJcbmV4cG9ydHMuQVRUUlMgPSB7XHJcbiAgICBUWVBFOiAndHlwZScsXHJcbiAgICBBQ1RJT046ICdhY3Rpb24nLFxyXG4gICAgRU5DT0RJTkc6ICdlbmNvZGluZycsXHJcbiAgICBQUk9NUFQ6ICdwcm9tcHQnLFxyXG4gICAgTkFNRTogJ25hbWUnLFxyXG4gICAgQ09MT1I6ICdjb2xvcicsXHJcbiAgICBGQUNFOiAnZmFjZScsXHJcbiAgICBTSVpFOiAnc2l6ZSdcclxufTtcclxuXHJcbnZhciAkID0gZXhwb3J0cy5UQUdfTkFNRVMgPSB7XHJcbiAgICBBOiAnYScsXHJcbiAgICBBRERSRVNTOiAnYWRkcmVzcycsXHJcbiAgICBBTk5PVEFUSU9OX1hNTDogJ2Fubm90YXRpb24teG1sJyxcclxuICAgIEFQUExFVDogJ2FwcGxldCcsXHJcbiAgICBBUkVBOiAnYXJlYScsXHJcbiAgICBBUlRJQ0xFOiAnYXJ0aWNsZScsXHJcbiAgICBBU0lERTogJ2FzaWRlJyxcclxuXHJcbiAgICBCOiAnYicsXHJcbiAgICBCQVNFOiAnYmFzZScsXHJcbiAgICBCQVNFRk9OVDogJ2Jhc2Vmb250JyxcclxuICAgIEJHU09VTkQ6ICdiZ3NvdW5kJyxcclxuICAgIEJJRzogJ2JpZycsXHJcbiAgICBCTE9DS1FVT1RFOiAnYmxvY2txdW90ZScsXHJcbiAgICBCT0RZOiAnYm9keScsXHJcbiAgICBCUjogJ2JyJyxcclxuICAgIEJVVFRPTjogJ2J1dHRvbicsXHJcblxyXG4gICAgQ0FQVElPTjogJ2NhcHRpb24nLFxyXG4gICAgQ0VOVEVSOiAnY2VudGVyJyxcclxuICAgIENPREU6ICdjb2RlJyxcclxuICAgIENPTDogJ2NvbCcsXHJcbiAgICBDT0xHUk9VUDogJ2NvbGdyb3VwJyxcclxuICAgIENPTU1BTkQ6ICdjb21tYW5kJyxcclxuXHJcbiAgICBERDogJ2RkJyxcclxuICAgIERFU0M6ICdkZXNjJyxcclxuICAgIERFVEFJTFM6ICdkZXRhaWxzJyxcclxuICAgIERJQUxPRzogJ2RpYWxvZycsXHJcbiAgICBESVI6ICdkaXInLFxyXG4gICAgRElWOiAnZGl2JyxcclxuICAgIERMOiAnZGwnLFxyXG4gICAgRFQ6ICdkdCcsXHJcblxyXG4gICAgRU06ICdlbScsXHJcbiAgICBFTUJFRDogJ2VtYmVkJyxcclxuXHJcbiAgICBGSUVMRFNFVDogJ2ZpZWxkc2V0JyxcclxuICAgIEZJR0NBUFRJT046ICdmaWdjYXB0aW9uJyxcclxuICAgIEZJR1VSRTogJ2ZpZ3VyZScsXHJcbiAgICBGT05UOiAnZm9udCcsXHJcbiAgICBGT09URVI6ICdmb290ZXInLFxyXG4gICAgRk9SRUlHTl9PQkpFQ1Q6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgIEZPUk06ICdmb3JtJyxcclxuICAgIEZSQU1FOiAnZnJhbWUnLFxyXG4gICAgRlJBTUVTRVQ6ICdmcmFtZXNldCcsXHJcblxyXG4gICAgSDE6ICdoMScsXHJcbiAgICBIMjogJ2gyJyxcclxuICAgIEgzOiAnaDMnLFxyXG4gICAgSDQ6ICdoNCcsXHJcbiAgICBINTogJ2g1JyxcclxuICAgIEg2OiAnaDYnLFxyXG4gICAgSEVBRDogJ2hlYWQnLFxyXG4gICAgSEVBREVSOiAnaGVhZGVyJyxcclxuICAgIEhHUk9VUDogJ2hncm91cCcsXHJcbiAgICBIUjogJ2hyJyxcclxuICAgIEhUTUw6ICdodG1sJyxcclxuXHJcbiAgICBJOiAnaScsXHJcbiAgICBJTUc6ICdpbWcnLFxyXG4gICAgSU1BR0U6ICdpbWFnZScsXHJcbiAgICBJTlBVVDogJ2lucHV0JyxcclxuICAgIElGUkFNRTogJ2lmcmFtZScsXHJcbiAgICBJU0lOREVYOiAnaXNpbmRleCcsXHJcblxyXG4gICAgS0VZR0VOOiAna2V5Z2VuJyxcclxuXHJcbiAgICBMQUJFTDogJ2xhYmVsJyxcclxuICAgIExJOiAnbGknLFxyXG4gICAgTElOSzogJ2xpbmsnLFxyXG4gICAgTElTVElORzogJ2xpc3RpbmcnLFxyXG5cclxuICAgIE1BSU46ICdtYWluJyxcclxuICAgIE1BTElHTk1BUks6ICdtYWxpZ25tYXJrJyxcclxuICAgIE1BUlFVRUU6ICdtYXJxdWVlJyxcclxuICAgIE1BVEg6ICdtYXRoJyxcclxuICAgIE1FTlU6ICdtZW51JyxcclxuICAgIE1FTlVJVEVNOiAnbWVudWl0ZW0nLFxyXG4gICAgTUVUQTogJ21ldGEnLFxyXG4gICAgTUdMWVBIOiAnbWdseXBoJyxcclxuICAgIE1JOiAnbWknLFxyXG4gICAgTU86ICdtbycsXHJcbiAgICBNTjogJ21uJyxcclxuICAgIE1TOiAnbXMnLFxyXG4gICAgTVRFWFQ6ICdtdGV4dCcsXHJcblxyXG4gICAgTkFWOiAnbmF2JyxcclxuICAgIE5PQlI6ICdub2JyJyxcclxuICAgIE5PRlJBTUVTOiAnbm9mcmFtZXMnLFxyXG4gICAgTk9FTUJFRDogJ25vZW1iZWQnLFxyXG4gICAgTk9TQ1JJUFQ6ICdub3NjcmlwdCcsXHJcblxyXG4gICAgT0JKRUNUOiAnb2JqZWN0JyxcclxuICAgIE9MOiAnb2wnLFxyXG4gICAgT1BUR1JPVVA6ICdvcHRncm91cCcsXHJcbiAgICBPUFRJT046ICdvcHRpb24nLFxyXG5cclxuICAgIFA6ICdwJyxcclxuICAgIFBBUkFNOiAncGFyYW0nLFxyXG4gICAgUExBSU5URVhUOiAncGxhaW50ZXh0JyxcclxuICAgIFBSRTogJ3ByZScsXHJcblxyXG4gICAgUlA6ICdycCcsXHJcbiAgICBSVDogJ3J0JyxcclxuICAgIFJVQlk6ICdydWJ5JyxcclxuXHJcbiAgICBTOiAncycsXHJcbiAgICBTQ1JJUFQ6ICdzY3JpcHQnLFxyXG4gICAgU0VDVElPTjogJ3NlY3Rpb24nLFxyXG4gICAgU0VMRUNUOiAnc2VsZWN0JyxcclxuICAgIFNPVVJDRTogJ3NvdXJjZScsXHJcbiAgICBTTUFMTDogJ3NtYWxsJyxcclxuICAgIFNQQU46ICdzcGFuJyxcclxuICAgIFNUUklLRTogJ3N0cmlrZScsXHJcbiAgICBTVFJPTkc6ICdzdHJvbmcnLFxyXG4gICAgU1RZTEU6ICdzdHlsZScsXHJcbiAgICBTVUI6ICdzdWInLFxyXG4gICAgU1VNTUFSWTogJ3N1bW1hcnknLFxyXG4gICAgU1VQOiAnc3VwJyxcclxuXHJcbiAgICBUQUJMRTogJ3RhYmxlJyxcclxuICAgIFRCT0RZOiAndGJvZHknLFxyXG4gICAgVEVNUExBVEU6ICd0ZW1wbGF0ZScsXHJcbiAgICBURVhUQVJFQTogJ3RleHRhcmVhJyxcclxuICAgIFRGT09UOiAndGZvb3QnLFxyXG4gICAgVEQ6ICd0ZCcsXHJcbiAgICBUSDogJ3RoJyxcclxuICAgIFRIRUFEOiAndGhlYWQnLFxyXG4gICAgVElUTEU6ICd0aXRsZScsXHJcbiAgICBUUjogJ3RyJyxcclxuICAgIFRSQUNLOiAndHJhY2snLFxyXG4gICAgVFQ6ICd0dCcsXHJcblxyXG4gICAgVTogJ3UnLFxyXG4gICAgVUw6ICd1bCcsXHJcblxyXG4gICAgU1ZHOiAnc3ZnJyxcclxuXHJcbiAgICBWQVI6ICd2YXInLFxyXG5cclxuICAgIFdCUjogJ3dicicsXHJcblxyXG4gICAgWE1QOiAneG1wJ1xyXG59O1xyXG5cclxudmFyIFNQRUNJQUxfRUxFTUVOVFMgPSBleHBvcnRzLlNQRUNJQUxfRUxFTUVOVFMgPSB7fTtcclxuXHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF0gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFERFJFU1NdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFQUExFVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJFQV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJUSUNMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVNJREVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VGT05UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CR1NPVU5EXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CTE9DS1FVT1RFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CT0RZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQlVUVE9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DQVBUSU9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DRU5URVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkNPTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ09MR1JPVVBdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ERVRBSUxTXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ESVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRJVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRExdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRklFTERTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR0NBUFRJT05dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR1VSRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRk9PVEVSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GT1JNXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GUkFNRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRlJBTUVTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkgxXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IMl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkg0XSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5INV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDZdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURFUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSEdST1VQXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSFRNTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSUZSQU1FXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JTUddID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLklOUFVUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JU0lOREVYXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5MSV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElOS10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElTVElOR10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFJTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFSUVVFRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVUlURU1dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1FVEFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5BVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9GUkFNRVNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5PU0NSSVBUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk9MXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QQVJBTV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUExBSU5URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QUkVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNDUklQVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VDVElPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VMRUNUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TT1VSQ0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNUWUxFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TVU1NQVJZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UQUJMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEJPRFldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URU1QTEFURV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEVYVEFSRUFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRGT09UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5USF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRJVExFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVFJBQ0tdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlVMXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5XQlJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlhNUF0gPSB0cnVlO1xyXG5cclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdID0ge307XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1JXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1PXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1TXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLkFOTk9UQVRJT05fWE1MXSA9IHRydWU7XHJcblxyXG5TUEVDSUFMX0VMRU1FTlRTW05TLlNWR10gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuVElUTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuRk9SRUlHTl9PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuREVTQ10gPSB0cnVlO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUiA9ICdcXHVGRkZEJztcclxuXHJcbmV4cG9ydHMuQ09ERV9QT0lOVFMgPSB7XHJcbiAgICBFT0Y6IC0xLFxyXG4gICAgTlVMTDogMHgwMCxcclxuICAgIFRBQlVMQVRJT046IDB4MDksXHJcbiAgICBDQVJSSUFHRV9SRVRVUk46IDB4MEQsXHJcbiAgICBMSU5FX0ZFRUQ6IDB4MEEsXHJcbiAgICBGT1JNX0ZFRUQ6IDB4MEMsXHJcbiAgICBTUEFDRTogMHgyMCxcclxuICAgIEVYQ0xBTUFUSU9OX01BUks6IDB4MjEsXHJcbiAgICBRVU9UQVRJT05fTUFSSzogMHgyMixcclxuICAgIE5VTUJFUl9TSUdOOiAweDIzLFxyXG4gICAgQU1QRVJTQU5EOiAweDI2LFxyXG4gICAgQVBPU1RST1BIRTogMHgyNyxcclxuICAgIEhZUEhFTl9NSU5VUzogMHgyRCxcclxuICAgIFNPTElEVVM6IDB4MkYsXHJcbiAgICBESUdJVF8wOiAweDMwLFxyXG4gICAgRElHSVRfOTogMHgzOSxcclxuICAgIFNFTUlDT0xPTjogMHgzQixcclxuICAgIExFU1NfVEhBTl9TSUdOOiAweDNDLFxyXG4gICAgRVFVQUxTX1NJR046IDB4M0QsXHJcbiAgICBHUkVBVEVSX1RIQU5fU0lHTjogMHgzRSxcclxuICAgIFFVRVNUSU9OX01BUks6IDB4M0YsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0E6IDB4NDEsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0Y6IDB4NDYsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1g6IDB4NTgsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1o6IDB4NUEsXHJcbiAgICBHUkFWRV9BQ0NFTlQ6IDB4NjAsXHJcbiAgICBMQVRJTl9TTUFMTF9BOiAweDYxLFxyXG4gICAgTEFUSU5fU01BTExfRjogMHg2NixcclxuICAgIExBVElOX1NNQUxMX1g6IDB4NzgsXHJcbiAgICBMQVRJTl9TTUFMTF9aOiAweDdBLFxyXG4gICAgQk9NOiAweEZFRkYsXHJcbiAgICBSRVBMQUNFTUVOVF9DSEFSQUNURVI6IDB4RkZGRFxyXG59O1xyXG5cclxuZXhwb3J0cy5DT0RFX1BPSU5UX1NFUVVFTkNFUyA9IHtcclxuICAgIERBU0hfREFTSF9TVFJJTkc6IFsweDJELCAweDJEXSwgLy8tLVxyXG4gICAgRE9DVFlQRV9TVFJJTkc6IFsweDQ0LCAweDRGLCAweDQzLCAweDU0LCAweDU5LCAweDUwLCAweDQ1XSwgLy9ET0NUWVBFXHJcbiAgICBDREFUQV9TVEFSVF9TVFJJTkc6IFsweDVCLCAweDQzLCAweDQ0LCAweDQxLCAweDU0LCAweDQxLCAweDVCXSwgLy9bQ0RBVEFbXHJcbiAgICBDREFUQV9FTkRfU1RSSU5HOiBbMHg1RCwgMHg1RCwgMHgzRV0sIC8vXV0+XHJcbiAgICBTQ1JJUFRfU1RSSU5HOiBbMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NF0sIC8vc2NyaXB0XHJcbiAgICBQVUJMSUNfU1RSSU5HOiBbMHg1MCwgMHg1NSwgMHg0MiwgMHg0QywgMHg0OSwgMHg0M10sIC8vUFVCTElDXHJcbiAgICBTWVNURU1fU1RSSU5HOiBbMHg1MywgMHg1OSwgMHg1MywgMHg1NCwgMHg0NSwgMHg0RF0gLy9TWVNURU1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5tZXJnZU9wdGlvbnMgPSBmdW5jdGlvbiAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIHJldHVybiBbZGVmYXVsdHMsIG9wdGlvbnNdLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBvcHRPYmopIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhvcHRPYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBtZXJnZWRba2V5XSA9IG9wdE9ialtrZXldO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbWVyZ2VkO1xyXG4gICAgfSwge30pO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUGFyc2VyID0gcmVxdWlyZSgnLi4vdHJlZV9jb25zdHJ1Y3Rpb24vcGFyc2VyJyksXHJcbiAgICBQYXJzaW5nVW5pdCA9IHJlcXVpcmUoJy4vcGFyc2luZ191bml0Jyk7XHJcblxyXG4vL0FQSVxyXG5leHBvcnRzLnBhcnNlRG9jdW1lbnQgPSBmdW5jdGlvbiAoaHRtbCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIC8vTk9URTogdGhpcyBzaG91bGQgYmUgcmVlbnRyYW50LCBzbyB3ZSBjcmVhdGUgbmV3IHBhcnNlciBoZXJlXHJcbiAgICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0cmVlQWRhcHRlciksXHJcbiAgICAgICAgcGFyc2luZ1VuaXQgPSBuZXcgUGFyc2luZ1VuaXQocGFyc2VyKTtcclxuXHJcbiAgICAvL05PVEU6IG92ZXJyaWRlIHBhcnNlciBsb29wIG1ldGhvZFxyXG4gICAgcGFyc2VyLl9ydW5QYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBwYXJzaW5nVW5pdC5wYXJzaW5nTG9vcExvY2sgPSB0cnVlO1xyXG5cclxuICAgICAgICB3aGlsZSAoIXBhcnNpbmdVbml0LnN1c3BlbmRlZCAmJiAhdGhpcy5zdG9wcGVkKVxyXG4gICAgICAgICAgICB0aGlzLl9pdGVyYXRlUGFyc2luZ0xvb3AoKTtcclxuXHJcbiAgICAgICAgcGFyc2luZ1VuaXQucGFyc2luZ0xvb3BMb2NrID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpXHJcbiAgICAgICAgICAgIHBhcnNpbmdVbml0LmNhbGxiYWNrKHRoaXMuZG9jdW1lbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHdhaXQgd2hpbGUgcGFyc2VyQ29udHJvbGxlciB3aWxsIGJlIGFkb3B0ZWQgYnkgY2FsbGluZyBjb2RlLCB0aGVuXHJcbiAgICAvL3N0YXJ0IHBhcnNpbmdcclxuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHBhcnNlci5wYXJzZShodG1sKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXJzaW5nVW5pdDtcclxufTtcclxuXHJcbmV4cG9ydHMucGFyc2VJbm5lckh0bWwgPSBmdW5jdGlvbiAoaW5uZXJIdG1sLCBjb250ZXh0RWxlbWVudCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIC8vTk9URTogdGhpcyBzaG91bGQgYmUgcmVlbnRyYW50LCBzbyB3ZSBjcmVhdGUgbmV3IHBhcnNlciBoZXJlXHJcbiAgICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0cmVlQWRhcHRlcik7XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZUZyYWdtZW50KGlubmVySHRtbCwgY29udGV4dEVsZW1lbnQpO1xyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBQYXJzaW5nVW5pdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhcnNlcikge1xyXG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJzaW5nTG9vcExvY2sgPSBmYWxzZTtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLl9zdGF0ZUd1YXJkID0gZnVuY3Rpb24gKHN1c3BlbmQpIHtcclxuICAgIGlmICh0aGlzLnN1c3BlbmRlZCAmJiBzdXNwZW5kKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyc2U1OiBQYXJzZXIgd2FzIGFscmVhZHkgc3VzcGVuZGVkLiBQbGVhc2UsIGNoZWNrIHlvdXIgY29udHJvbCBmbG93IGxvZ2ljLicpO1xyXG5cclxuICAgIGVsc2UgaWYgKCF0aGlzLnN1c3BlbmRlZCAmJiAhc3VzcGVuZClcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcnNlNTogUGFyc2VyIHdhcyBhbHJlYWR5IHJlc3VtZWQuIFBsZWFzZSwgY2hlY2sgeW91ciBjb250cm9sIGZsb3cgbG9naWMuJyk7XHJcblxyXG4gICAgcmV0dXJuIHN1c3BlbmQ7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3VzcGVuZGVkID0gdGhpcy5fc3RhdGVHdWFyZCh0cnVlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IHRoaXMuX3N0YXRlR3VhcmQoZmFsc2UpO1xyXG5cclxuICAgIC8vTk9URTogZG9uJ3QgZW50ZXIgcGFyc2luZyBsb29wIGlmIGl0IGlzIGxvY2tlZC4gV2l0aG91dCB0aGlzIGxvY2sgX3J1blBhcnNpbmdMb29wKCkgbWF5IGJlIGNhbGxlZFxyXG4gICAgLy93aGlsZSBwYXJzaW5nIGxvb3AgaXMgc3RpbGwgcnVubmluZy4gRS5nLiB3aGVuIHN1c3BlbmQoKSBhbmQgcmVzdW1lKCkgY2FsbGVkIHN5bmNocm9ub3VzbHkuXHJcbiAgICBpZiAoIXRoaXMucGFyc2luZ0xvb3BMb2NrKVxyXG4gICAgICAgIHRoaXMucGFyc2VyLl9ydW5QYXJzaW5nTG9vcCgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvY3VtZW50V3JpdGUgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgdGhpcy5wYXJzZXIudG9rZW5pemVyLnByZXByb2Nlc3Nvci53cml0ZShodG1sKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5oYW5kbGVTY3JpcHRzID0gZnVuY3Rpb24gKHNjcmlwdEhhbmRsZXIpIHtcclxuICAgIHRoaXMucGFyc2VyLnNjcmlwdEhhbmRsZXIgPSBzY3JpcHRIYW5kbGVyO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRGVmYXVsdFRyZWVBZGFwdGVyID0gcmVxdWlyZSgnLi4vdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXG4gICAgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyksXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKSxcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG4vL0RlZmF1bHQgc2VyaWFsaXplciBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGVuY29kZUh0bWxFbnRpdGllczogdHJ1ZVxufTtcblxuLy9Fc2NhcGluZyByZWdleGVzXG52YXIgQU1QX1JFR0VYID0gLyYvZyxcbiAgICBOQlNQX1JFR0VYID0gL1xcdTAwYTAvZyxcbiAgICBET1VCTEVfUVVPVEVfUkVHRVggPSAvXCIvZyxcbiAgICBMVF9SRUdFWCA9IC88L2csXG4gICAgR1RfUkVHRVggPSAvPi9nO1xuXG4vL0VzY2FwZSBzdHJpbmdcbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHIsIGF0dHJNb2RlKSB7XG4gICAgc3RyID0gc3RyXG4gICAgICAgIC5yZXBsYWNlKEFNUF9SRUdFWCwgJyZhbXA7JylcbiAgICAgICAgLnJlcGxhY2UoTkJTUF9SRUdFWCwgJyZuYnNwOycpO1xuXG4gICAgaWYgKGF0dHJNb2RlKVxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShET1VCTEVfUVVPVEVfUkVHRVgsICcmcXVvdDsnKTtcblxuICAgIGVsc2Uge1xuICAgICAgICBzdHIgPSBzdHJcbiAgICAgICAgICAgIC5yZXBsYWNlKExUX1JFR0VYLCAnJmx0OycpXG4gICAgICAgICAgICAucmVwbGFjZShHVF9SRUdFWCwgJyZndDsnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG5cbi8vRW5xdW90ZSBkb2N0eXBlIElEXG5cblxuXG4vL1NlcmlhbGl6ZXJcbnZhciBTZXJpYWxpemVyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodHJlZUFkYXB0ZXIsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXIgfHwgRGVmYXVsdFRyZWVBZGFwdGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xufTtcblxuXG4vL0FQSVxuU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB0aGlzLmh0bWwgPSAnJztcbiAgICB0aGlzLl9zZXJpYWxpemVDaGlsZE5vZGVzKG5vZGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHRtbDtcbn07XG5cblxuLy9JbnRlcm5hbHNcblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVDaGlsZE5vZGVzID0gZnVuY3Rpb24gKHBhcmVudE5vZGUpIHtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2RlcyhwYXJlbnROb2RlKTtcblxuICAgIGlmIChjaGlsZE5vZGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBjbkxlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgY25MZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gY2hpbGROb2Rlc1tpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplRWxlbWVudChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplVGV4dE5vZGUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzQ29tbWVudE5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUNvbW1lbnROb2RlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUoY3VycmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZUVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSxcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShub2RlKSxcbiAgICAgICAgcXVhbGlmaWVkVG4gPSAobnMgPT09IE5TLkhUTUwgfHwgbnMgPT09IE5TLlNWRyB8fCBucyA9PT0gTlMuTUFUSE1MKSA/IHRuIDogKG5zICsgJzonICsgdG4pO1xuXG4gICAgdGhpcy5odG1sICs9ICc8JyArIHF1YWxpZmllZFRuO1xuICAgIHRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSk7XG4gICAgdGhpcy5odG1sICs9ICc+JztcblxuICAgIGlmICh0biAhPT0gJC5BUkVBICYmIHRuICE9PSAkLkJBU0UgJiYgdG4gIT09ICQuQkFTRUZPTlQgJiYgdG4gIT09ICQuQkdTT1VORCAmJiB0biAhPT0gJC5CUiAmJiB0biAhPT0gJC5CUiAmJlxuICAgICAgICB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuRU1CRUQgJiYgdG4gIT09ICQuRlJBTUUgJiYgdG4gIT09ICQuSFIgJiYgdG4gIT09ICQuSU1HICYmIHRuICE9PSAkLklOUFVUICYmXG4gICAgICAgIHRuICE9PSAkLktFWUdFTiAmJiB0biAhPT0gJC5MSU5LICYmIHRuICE9PSAkLk1FTlVJVEVNICYmIHRuICE9PSAkLk1FVEEgJiYgdG4gIT09ICQuUEFSQU0gJiYgdG4gIT09ICQuU09VUkNFICYmXG4gICAgICAgIHRuICE9PSAkLlRSQUNLICYmIHRuICE9PSAkLldCUikge1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5QUkUgfHwgdG4gPT09ICQuVEVYVEFSRUEgfHwgdG4gPT09ICQuTElTVElORykge1xuICAgICAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQobm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIHRoaXMudHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShmaXJzdENoaWxkKSkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQoZmlyc3RDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFswXSA9PT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbCArPSAnXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGlsZE5vZGVzSG9sZGVyID0gdG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyhub2RlKVswXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTtcblxuICAgICAgICB0aGlzLl9zZXJpYWxpemVDaGlsZE5vZGVzKGNoaWxkTm9kZXNIb2xkZXIpO1xuICAgICAgICB0aGlzLmh0bWwgKz0gJzwvJyArIHF1YWxpZmllZFRuICsgJz4nO1xuICAgIH1cbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KG5vZGUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGF0dHJzTGVuZ3RoID0gYXR0cnMubGVuZ3RoOyBpIDwgYXR0cnNMZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXR0ciA9IGF0dHJzW2ldLFxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZW5jb2RlSHRtbEVudGl0aWVzID8gZXNjYXBlU3RyaW5nKGF0dHIudmFsdWUsIHRydWUpIDogYXR0ci52YWx1ZTtcblxuICAgICAgICB0aGlzLmh0bWwgKz0gJyAnO1xuXG4gICAgICAgIGlmICghYXR0ci5uYW1lc3BhY2UpXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUwpXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbDonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUxOUykge1xuICAgICAgICAgICAgaWYgKGF0dHIubmFtZSAhPT0gJ3htbG5zJylcbiAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbG5zOic7XG5cbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWExJTkspXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3hsaW5rOicgKyBhdHRyLm5hbWU7XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5odG1sICs9IGF0dHIubmFtZXNwYWNlICsgJzonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIHRoaXMuaHRtbCArPSAnPVwiJyArIHZhbHVlICsgJ1wiJztcbiAgICB9XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQobm9kZSksXG4gICAgICAgIHBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKSxcbiAgICAgICAgcGFyZW50VG4gPSB2b2lkIDA7XG5cbiAgICBpZiAocGFyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShwYXJlbnQpKVxuICAgICAgICBwYXJlbnRUbiA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnQpO1xuXG4gICAgaWYgKHBhcmVudFRuID09PSAkLlNUWUxFIHx8IHBhcmVudFRuID09PSAkLlNDUklQVCB8fCBwYXJlbnRUbiA9PT0gJC5YTVAgfHwgcGFyZW50VG4gPT09ICQuSUZSQU1FIHx8XG4gICAgICAgIHBhcmVudFRuID09PSAkLk5PRU1CRUQgfHwgcGFyZW50VG4gPT09ICQuTk9GUkFNRVMgfHwgcGFyZW50VG4gPT09ICQuUExBSU5URVhUIHx8IHBhcmVudFRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHRoaXMuaHRtbCArPSBjb250ZW50O1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5odG1sICs9IHRoaXMub3B0aW9ucy5lbmNvZGVIdG1sRW50aXRpZXMgPyBlc2NhcGVTdHJpbmcoY29udGVudCwgZmFsc2UpIDogY29udGVudDtcbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdGhpcy5odG1sICs9ICc8IS0tJyArIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q29tbWVudE5vZGVDb250ZW50KG5vZGUpICsgJy0tPic7XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIG5hbWUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVOYW1lKG5vZGUpLFxuICAgICAgICBwdWJsaWNJZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZVB1YmxpY0lkKG5vZGUpLFxuICAgICAgICBzeXN0ZW1JZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkKG5vZGUpO1xuXG4gICAgdGhpcy5odG1sICs9ICc8JyArIERvY3R5cGUuc2VyaWFsaXplQ29udGVudChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpICsgJz4nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcbiAgICBUb2tlbml6ZXJQcm94eSA9IHJlcXVpcmUoJy4vdG9rZW5pemVyX3Byb3h5JyksXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKTtcblxuLy9EZWZhdWx0IG9wdGlvbnNcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgZGVjb2RlSHRtbEVudGl0aWVzOiB0cnVlLFxuICAgIGxvY2F0aW9uSW5mbzogZmFsc2Vcbn07XG5cbi8vU2tpcHBpbmcgaGFuZGxlclxuZnVuY3Rpb24gc2tpcCgpIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuLy9TaW1wbGVBcGlQYXJzZXJcbnZhciBTaW1wbGVBcGlQYXJzZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoYW5kbGVycywgb3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgICAgIGRvY3R5cGU6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmRvY3R5cGUpLFxuICAgICAgICBzdGFydFRhZzogdGhpcy5fd3JhcEhhbmRsZXIoaGFuZGxlcnMuc3RhcnRUYWcpLFxuICAgICAgICBlbmRUYWc6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmVuZFRhZyksXG4gICAgICAgIHRleHQ6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLnRleHQpLFxuICAgICAgICBjb21tZW50OiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5jb21tZW50KVxuICAgIH07XG59O1xuXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl93cmFwSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgdmFyIHBhcnNlciA9IHRoaXM7XG5cbiAgICBoYW5kbGVyID0gaGFuZGxlciB8fCBza2lwO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChwYXJzZXIuY3VycmVudFRva2VuTG9jYXRpb24pO1xuICAgICAgICAgICAgaGFuZGxlci5hcHBseShoYW5kbGVyLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlcjtcbn07XG5cbi8vQVBJXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB2YXIgdG9rZW4gPSBudWxsO1xuXG4gICAgdGhpcy5fcmVzZXQoaHRtbCk7XG5cbiAgICBkbyB7XG4gICAgICAgIHRva2VuID0gdGhpcy50b2tlbml6ZXJQcm94eS5nZXROZXh0VG9rZW4oKTtcblxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4pIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nVGV4dCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5Mb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9ICh0aGlzLnBlbmRpbmdUZXh0IHx8ICcnKSArIHRva2VuLmNoYXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0UGVuZGluZ1RleHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVRva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU4pO1xufTtcblxuLy9JbnRlcm5hbHNcblNpbXBsZUFwaVBhcnNlci5wcm90b3R5cGUuX2hhbmRsZVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLmhhbmRsZXJzLnN0YXJ0VGFnKHRva2VuLnRhZ05hbWUsIHRva2VuLmF0dHJzLCB0b2tlbi5zZWxmQ2xvc2luZyk7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5lbmRUYWcodG9rZW4udGFnTmFtZSk7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5jb21tZW50KHRva2VuLmRhdGEpO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4pXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuZG9jdHlwZSh0b2tlbi5uYW1lLCB0b2tlbi5wdWJsaWNJZCwgdG9rZW4uc3lzdGVtSWQpO1xuXG59O1xuXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgdGhpcy50b2tlbml6ZXJQcm94eSA9IG5ldyBUb2tlbml6ZXJQcm94eShodG1sLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMucGVuZGluZ1RleHQgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSBudWxsO1xufTtcblxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fZW1pdFBlbmRpbmdUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBlbmRpbmdUZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMudGV4dCh0aGlzLnBlbmRpbmdUZXh0KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9IG51bGw7XG4gICAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcbiAgICBGb3JlaWduQ29udGVudCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9mb3JlaWduX2NvbnRlbnQnKSxcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG5cbi8vVG9rZW5pemVyIHByb3h5XG4vL05PVEU6IHRoaXMgcHJveHkgc2ltdWxhdGVzIGFkanVzdG1lbnQgb2YgdGhlIFRva2VuaXplciB3aGljaCBwZXJmb3JtZWQgYnkgc3RhbmRhcmQgcGFyc2VyIGR1cmluZyB0cmVlIGNvbnN0cnVjdGlvbi5cbnZhciBUb2tlbml6ZXJQcm94eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGh0bWwsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoaHRtbCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrID0gW107XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFja1RvcCA9IC0xO1xuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IG51bGw7XG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gZmFsc2U7XG59O1xuXG4vL0FQSVxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2VuaXplci5nZXROZXh0VG9rZW4oKTtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLl9oYW5kbGVTdGFydFRhZ1Rva2VuKHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLl9oYW5kbGVFbmRUYWdUb2tlbih0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4gJiYgdGhpcy5pbkZvcmVpZ25Db250ZW50KSB7XG4gICAgICAgIHRva2VuLnR5cGUgPSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOO1xuICAgICAgICB0b2tlbi5jaGFycyA9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbn07XG5cbi8vTmFtZXNwYWNlIHN0YWNrIG11dGF0aW9uc1xuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9lbnRlck5hbWVzcGFjZSA9IGZ1bmN0aW9uIChuYW1lc3BhY2UpIHtcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wKys7XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjay5wdXNoKG5hbWVzcGFjZSk7XG5cbiAgICB0aGlzLmluRm9yZWlnbkNvbnRlbnQgPSBuYW1lc3BhY2UgIT09IE5TLkhUTUw7XG4gICAgdGhpcy5jdXJyZW50TmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XG59O1xuXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wLS07XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjay5wb3AoKTtcblxuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcF07XG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlICE9PSBOUy5IVE1MO1xuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XG59O1xuXG4vL1Rva2VuIGhhbmRsZXJzXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2Vuc3VyZVRva2VuaXplck1vZGUgPSBmdW5jdGlvbiAodG4pIHtcbiAgICBpZiAodG4gPT09ICQuVEVYVEFSRUEgfHwgdG4gPT09ICQuVElUTEUpXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVClcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5TQ1JJUFRfREFUQTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLklGUkFNRSB8fCB0biA9PT0gJC5YTVAgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0VNQkVEIHx8IHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkFXVEVYVDtcbiAgICB9XG59O1xuXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2hhbmRsZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlNWRylcbiAgICAgICAgdGhpcy5fZW50ZXJOYW1lc3BhY2UoTlMuU1ZHKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk1BVEgpXG4gICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLk1BVEhNTCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICAgICAgaWYgKEZvcmVpZ25Db250ZW50LmNhdXNlc0V4aXQodG9rZW4pKVxuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xuXG4gICAgICAgICAgICBlbHNlIGlmIChGb3JlaWduQ29udGVudC5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHRuLCB0aGlzLmN1cnJlbnROYW1lc3BhY2UpIHx8XG4gICAgICAgICAgICAgICAgICAgICBGb3JlaWduQ29udGVudC5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCB0aGlzLmN1cnJlbnROYW1lc3BhY2UsIHRva2VuLmF0dHJzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLkhUTUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fZW5zdXJlVG9rZW5pemVyTW9kZSh0bik7XG4gICAgfVxufTtcblxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9oYW5kbGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAoIXRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICB2YXIgcHJldmlvdXNOcyA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcCAtIDFdO1xuXG4gICAgICAgIC8vTk9URTogY2hlY2sgZm9yIGV4aXQgZnJvbSBpbnRlZ3JhdGlvbiBwb2ludFxuICAgICAgICBpZiAoRm9yZWlnbkNvbnRlbnQuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCh0biwgcHJldmlvdXNOcykgfHxcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIHByZXZpb3VzTnMsIHRva2VuLmF0dHJzKSkge1xuICAgICAgICAgICAgdGhpcy5fbGVhdmVDdXJyZW50TmFtZXNwYWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLkRBVEE7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoKHRuID09PSAkLlNWRyAmJiB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPT09IE5TLlNWRykgfHxcbiAgICAgICAgICAgICAodG4gPT09ICQuTUFUSCAmJiB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPT09IE5TLk1BVEhNTCkpXG4gICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gKHRva2VuaXplcikge1xyXG4gICAgLy9OT1RFOiBvYnRhaW4gVG9rZW5pemVyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXHJcbiAgICB2YXIgdG9rZW5pemVyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodG9rZW5pemVyKTtcclxuXHJcbiAgICB0b2tlbml6ZXIudG9rZW5TdGFydExvYyA9IC0xO1xyXG5cclxuICAgIC8vTk9URTogYWRkIGxvY2F0aW9uIGluZm8gYnVpbGRlciBtZXRob2RcclxuICAgIHRva2VuaXplci5fYXR0YWNoTG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgdG9rZW4ubG9jYXRpb24gPSB7XHJcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnRva2VuU3RhcnRMb2MsXHJcbiAgICAgICAgICAgIGVuZDogLTFcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHBhdGNoIHRva2VuIGNyZWF0aW9uIG1ldGhvZHMgYW5kIGF0dGFjaCBsb2NhdGlvbiBvYmplY3RzXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlU3RhcnRUYWdUb2tlbi5jYWxsKHRoaXMsIHRhZ05hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUVuZFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZUVuZFRhZ1Rva2VuLmNhbGwodGhpcywgdGFnTmFtZUZpcnN0Q2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHRva2VuaXplci5fY3JlYXRlQ29tbWVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVDb21tZW50VG9rZW4uY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZURvY3R5cGVUb2tlbiA9IGZ1bmN0aW9uIChkb2N0eXBlTmFtZUZpcnN0Q2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlRG9jdHlwZVRva2VuLmNhbGwodGhpcywgZG9jdHlwZU5hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUNoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZUNoYXJhY3RlclRva2VuLmNhbGwodGhpcywgdHlwZSwgY2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vTk9URTogcGF0Y2ggdG9rZW4gZW1pc3Npb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgZW5kIGxvY2F0aW9uXHJcbiAgICB0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIHBlbmRpbmcgY2hhcmFjdGVyIHRva2VuIG1ha2UgaXQncyBlbmQgbG9jYXRpb24gZXF1YWwgdG8gdGhlXHJcbiAgICAgICAgLy9jdXJyZW50IHRva2VuJ3Mgc3RhcnQgbG9jYXRpb24uXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmQgPSB0aGlzLmN1cnJlbnRUb2tlbi5sb2NhdGlvbi5zdGFydDtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zICsgMTtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fZW1pdEN1cnJlbnRUb2tlbi5jYWxsKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGNoYXJhY3RlciB0b2tlbiBhbmQgaXQncyBsb2NhdGlvbiB3YXNuJ3Qgc2V0IGluIHRoZSBfZW1pdEN1cnJlbnRUb2tlbigpLFxyXG4gICAgICAgIC8vdGhlbiBzZXQgaXQncyBsb2NhdGlvbiBhdCB0aGUgY3VycmVudCBwcmVwcm9jZXNzb3IgcG9zaXRpb25cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID09PSAtMSkge1xyXG4gICAgICAgICAgICAvL05PVEU6IHdlIGRvbid0IG5lZWQgdG8gaW5jcmVtZW50IHByZXByb2Nlc3NvciBwb3NpdGlvbiwgc2luY2UgY2hhcmFjdGVyIHRva2VuXHJcbiAgICAgICAgICAgIC8vZW1pc3Npb24gaXMgYWx3YXlzIGZvcmNlZCBieSB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRva2VuIGhlcmUuXHJcbiAgICAgICAgICAgIC8vU28sIHdlIGFscmVhZHkgaGF2ZSBhZHZhbmNlZCBwb3NpdGlvbi5cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4uY2FsbCh0aGlzKTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiBwYXRjaCBpbml0aWFsIHN0YXRlcyBmb3IgZWFjaCBtb2RlIHRvIG9idGFpbiB0b2tlbiBzdGFydCBwb3NpdGlvblxyXG4gICAgT2JqZWN0LmtleXModG9rZW5pemVyUHJvdG8uTU9ERSlcclxuXHJcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobW9kZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRva2VuaXplclByb3RvLk1PREVbbW9kZU5hbWVdO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZSkge1xyXG4gICAgICAgICAgICB0b2tlbml6ZXJbc3RhdGVdID0gZnVuY3Rpb24gKGNwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuU3RhcnRMb2MgPSB0aGlzLnByZXByb2Nlc3Nvci5wb3M7XHJcbiAgICAgICAgICAgICAgICB0b2tlbml6ZXJQcm90b1tzdGF0ZV0uY2FsbCh0aGlzLCBjcCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vTk9URTogdGhpcyBmaWxlIGNvbnRhaW5zIGF1dG8gZ2VuZXJhdGVkIHRyaWUgc3RydWN0dXJlIHRoYXQgaXMgdXNlZCBmb3IgbmFtZWQgZW50aXR5IHJlZmVyZW5jZXMgY29uc3VtcHRpb25cclxuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzIGFuZFxyXG4vL2h0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VzLmh0bWwjbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZXMpXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgMHg0MToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxOTNdfX0sIGM6IFsxOTNdfX19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNThdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxOTRdfX0sIGM6IFsxOTRdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQwXX19fX19LCAweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTk4XX19LCBjOiBbMTk4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA2OF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTkyXX19LCBjOiBbMTkyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDcwOiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxM119fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNTZdfX19fX19fX19LCAweDREOiB7bDogezB4NTA6IHtsOiB7MHgzQjoge2M6IFszOF19fSwgYzogWzM4XX19fSwgMHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MzVdfX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjBdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTIwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg0Njoge2w6IHsweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODI4OV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTk3XX19LCBjOiBbMTk3XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTY0XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc4OF19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTk1XX19LCBjOiBbMTk1XX19fX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxOTZdfX0sIGM6IFsxOTZdfX19fX19fSxcclxuICAgIDB4NjE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjI1XX19LCBjOiBbMjI1XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjU5XX19fX19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODc2Nl19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbODc2N119fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4NzY2LCA4MTldfX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIyNl19fSwgYzogWzIyNl19fX19fSwgMHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxODBdfX0sIGM6IFsxODBdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDcyXX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjMwXX19LCBjOiBbMjMwXX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs4Mjg5XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTRdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyNF19fSwgYzogWzIyNF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzM6IHtsOiB7MHg3OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODUwMV19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg1MDFdfX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NDVdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjU3XX19fX19LCAweDZDOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDgxNV19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMzhdfX0sIGM6IFszOF19fX0sIDB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODM3XX19fX19fX0sIDB4M0I6IHtjOiBbODc0M119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4NDRdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg0MF19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwODQyXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODczNl19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjBdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzM2XX19fX19LCAweDZEOiB7bDogezB4NzM6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDY2NF19fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDY2NV19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDY2Nl19fX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY2N119fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2OF19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMDY2OV19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDY3MF19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFsxMDY3MV19fX19fSwgMHgzQjoge2M6IFs4NzM3XX19fX19fX0sIDB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MzVdfSwgMHg3Njoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg5NF19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NTNdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODczOF19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzE5N119fX19fSwgMHg3QToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwODRdfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI2MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDZdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NjNdfX19fX19fX19LCAweDNCOiB7YzogWzg3NzZdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODY0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3NzhdfX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4Nzc5XX19fX19LCAweDZGOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFszOV19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg3NzZdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc3OF19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsyMjldfX0sIGM6IFsyMjldfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTBdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs0Ml19fX0sIDB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc3Nl19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzgxXX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyN119fSwgYzogWzIyN119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjI4XX19LCBjOiBbMjI4XX19fX19LCAweDc3OiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1NV19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY5XX19fX19fX19fX19LFxyXG4gICAgMHg2Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc4MF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDE0XX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NV19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY1XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg5MDldfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5M119fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5NjVdfSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk2NV19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0MV19LCAweDc0OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0Ml19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4NzgwXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDczXX19fX19LCAweDY0OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIyMl19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NTddfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3NTddfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjcyXX19fX19fX19fX19LCAweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzEwMTRdfX19fX19fSwgMHg3Mjoge2w6IHsweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDNCOiB7YzogWzg0OTJdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NDZdfX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODUwMl19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4ODEyXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5NV19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs5NzExXX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4OTldfX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzUyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzU0XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNzU4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NzMzXX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYxXX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbOTY1MV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzU2XX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTA5XX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDdBOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDczMV19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY0Ml19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjUyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NjZdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjU2XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzkyNTFdfX19fX19fSwgMHg2Qjoge2w6IHsweDMxOiB7bDogezB4MzI6IHtsOiB7MHgzQjoge2M6IFs5NjE4XX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzk2MTddfX19fX0sIDB4MzM6IHtsOiB7MHgzNDoge2w6IHsweDNCOiB7YzogWzk2MTldfX19fX19fSwgMHg2Rjoge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5NjA4XX19fX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNjEsIDg0MjFdfSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg4MDEsIDg0MjFdfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NzZdfX19fX19fSwgMHg0RToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk4OV19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0N119fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4NjldfSwgMHg3NDoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODY5XX19fX19fX19fSwgMHg3Nzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MDRdfX19fX19fX19LCAweDc4OiB7bDogezB4NjI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA2OTddfX19fX19fSwgMHg2NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbOTQ4OF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTU3XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk0ODRdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU1NF19fX19fSwgMHg0NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbOTU1OF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTU5XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1NTVdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU1Nl19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk0NzJdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzk1MTZdfX19LCAweDQ0OiB7bDogezB4M0I6IHtjOiBbOTU3M119fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NTI0XX19fSwgMHg1NToge2w6IHsweDNCOiB7YzogWzk1NzZdfX19fX0sIDB4NDg6IHtsOiB7MHgzQjoge2M6IFs5NTUyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5NTcyXX19fSwgMHg0NDoge2w6IHsweDNCOiB7YzogWzk1NzRdfX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU3NV19fX0sIDB4NTU6IHtsOiB7MHgzQjoge2M6IFs5NTc3XX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODYzXX19fX19fX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg2Ml19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NjRdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk0OTZdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2M119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NDkyXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjBdfX19fX0sIDB4NTU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk1NjRdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2NV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NTYxXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjJdfX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5NDc0XX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs5NTMyXX19fSwgMHg0ODoge2w6IHsweDNCOiB7YzogWzk1NzhdfX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbOTUwOF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTY5XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1MDBdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU2Nl19fX19fSwgMHg1Njoge2w6IHsweDNCOiB7YzogWzk1NTNdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk1NzldfX19LCAweDQ4OiB7bDogezB4M0I6IHtjOiBbOTU4MF19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFs5NTcwXX19fSwgMHg0Qzoge2w6IHsweDNCOiB7YzogWzk1NzFdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbOTU2N119fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFs5NTY4XX19fX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzcyOF19fX19fX19LCAweDc2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTY2XX19LCBjOiBbMTY2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTFdfX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODI3MV19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY1XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA2OTNdfX19LCAweDNCOiB7YzogWzkyXX0sIDB4Njg6IHtsOiB7MHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDE4NF19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODIyNl19LCAweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4MjI2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4Ml19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MjZdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc4M119fX19fX19fX19fX19LFxyXG4gICAgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA5ODNdfX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5NjZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNDFdfX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc1N119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ5Ml19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE0XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA2OV19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjFdfX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzcyOF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5Ml19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzgyXX19fX19fX19fX19fX0sXHJcbiAgICAweDQzOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI2Ml19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTE0XX0sIDB4Njk6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDY5OiB7bDogezB4NjY6IHtsOiB7MHg2Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzg1MTddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ5M119fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjhdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTk5XX19LCBjOiBbMTk5XX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjY0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTJdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyNjZdfX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxODRdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxODNdfX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTNdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2M119fX19fX19LCAweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzVdfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTddfX19fX19fSwgMHg0RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1NF19fX19fX19fX19fSwgMHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NTNdfX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODU1XX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg0OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc1NF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDc5OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NTE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMjFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMTddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzU5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg2OF19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODAxXX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MV19fX19fX19LCAweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDUwXX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg3NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzIwXX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDM6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg0OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc1NV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NTA6IHtsOiB7MHg1OToge2w6IHsweDNCOiB7YzogWzE2OV19fSwgYzogWzE2OV19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NjZdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NDM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MV19fX19fX19LCAweDNCOiB7YzogWzg5MTVdfX19fX19fSxcclxuICAgIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjYzXX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODIwXX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI1XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI3XX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyM119fX19fX19LCAweDNCOiB7YzogWzg3NDVdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxNl19fX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODc0NSwgNjUwMjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODI1N119fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNzExXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODI5XX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI2OV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMzFdfX0sIGM6IFsyMzFdfX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyNjVdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgyOF19LCAweDczOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDgzMl19fX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzI2N119fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTg0XX19LCBjOiBbMTg0XX19fX19LCAweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3NF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTYyXX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE4M119fX19fX19fX19fX0sIGM6IFsxNjJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5Nl19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk1XX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDAzXX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDAwM119fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjddfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbNzEwXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3OTFdfX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzRdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjM1XX19fX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTldfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4NThdfX19fX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2MV19fX19fX19fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFsxNzRdfX19LCAweDUzOiB7bDogezB4M0I6IHtjOiBbOTQxNl19fX19fX19fX19fSwgMHgzQjoge2M6IFs5Njc1XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDY5MV19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzkxXX19fSwgMHg2Njoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NjhdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA5OTFdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjkwXX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODI3XX0sIDB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgyN119fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs1OF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4OF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc4OF19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs0NF19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjRdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3MDVdfSwgMHg2Njoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcyOF19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA1XX19fX19fX19fSwgMHg3ODoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDUwXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc3M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODYxXX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzUwXX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ4XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzIwXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxNjldfSwgMHg3Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ3MV19fX19fX0sIGM6IFsxNjldfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjI5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTAwMDddfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5Ml19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NTldfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTYxXX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5NjBdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTYyXX19fX19fX19fSwgMHg3NDoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDNdfX19fX19fX19LCAweDc1OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTUyXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTQ5XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjZdfX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjddfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MzBdfSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwNTU3XX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI0XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODIyXX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyNl19fX19fX19LCAweDNCOiB7YzogWzg3NDZdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ1XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODIxXX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODc0NiwgNjUwMjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjMxXX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDU1Nl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjZdfX19fX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbODkyN119fX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MTBdfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkxMV19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTY0XX19LCBjOiBbMTY0XX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjMwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzMV19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkxMF19fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5MTFdfX19fX19fX19LCAweDc3OiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1NF19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTNdfX19fX19fX19LCAweDc5OiB7bDogezB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFs5MDA1XX19fX19fX19fX19fX0sXHJcbiAgICAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg2Nzoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjRdfX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODUwNF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1OTVdfX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzgyMDhdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4NjddfX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fSwgMHg2Mjoge2w6IHsweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUxMV19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs3MzNdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNzFdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3Nl19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI1XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1MF19fX19fX19LCAweDNCOiB7YzogWzg1MThdfSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA4NzFdfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTc2XX19LCBjOiBbMTc2XX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ4XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjczXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5N119fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5N119fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODY0M119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQyXX19fX19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTAwXX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODkwMF19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgzMF19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODMwXX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxNjhdfX19LCAweDY3OiB7bDogezB4NjE6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5ODldfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk0Nl19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMjQ3XX0sIDB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ3XX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTAzXX19fX19fX19fX19fX19fX0sIGM6IFsyNDddfX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbODkwM119fX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA2XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTBdfX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTczXX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszNl19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0OV19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzcyOV19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NV19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODc2MF19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjRdfX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4NjVdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5NjZdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTVdfX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjUwXX19fX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODY0M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2NDJdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTEyXX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTkxXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk3Ml19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTNdfX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwOV19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA3NDJdfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyNzNdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTQ1XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NjNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NjJdfX19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY5M119fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjA3XX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2Ml19fX19fX19fX19fX19LCAweDdBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTldfX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzldfX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg2Nzoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjVdfX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA5XX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTgwXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjcwXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDRdfX19fX0sIDB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NTE3XX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2ODoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA1MTNdfX19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzExXX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxNl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3MV19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxODBdfX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbNzI5XX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MzNdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2XX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MzJdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODkwMF19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDY2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ0OiB7bDogezB4M0I6IHtjOiBbODUxOF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjZdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjNdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNjhdfSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDEyXX19fX19fX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3ODRdfX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNjhdfX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1OV19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTZdfX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYwXX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDk4MF19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzM119fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NThdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg3Ml19fX19fX19fX19fX19fX19fSwgMHg1NToge2w6IHsweDcwOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTddfX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTVdfX19fX19fSwgMHgzQjoge2M6IFs4NTk1XX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjkzXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzc4NV19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3Nl19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5MF19fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTgyXX19fX19fX0sIDB4M0I6IHtjOiBbODYzN119fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkxXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODNdfX19fX19fSwgMHgzQjoge2M6IFs4NjQxXX19fX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE1XX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjhdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NjddfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyNzJdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyOV19fX19fX19LCAweDVBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzldfX19fX19fX19LFxyXG4gICAgMHg0NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDFdfX0sIGM6IFsyMDFdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODJdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIwMl19fSwgYzogWzIwMl19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNjldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjc4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3Ml19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjAwXX19LCBjOiBbMjAwXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzEyXX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNzRdfX19fX19fSwgMHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTcyM119fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDUzOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjQzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0RToge2w6IHsweDQ3OiB7bDogezB4M0I6IHtjOiBbMzMwXX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjgwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNF19fX19fX19LCAweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzkxN119fX19fX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NjldfSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MF19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg2NTJdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTZdfX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwODY3XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxOV19fX19fSwgMHg1NDoge2w6IHsweDQ4OiB7bDogezB4M0I6IHtjOiBbMjA4XX19LCBjOiBbMjA4XX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMDNdfX0sIGM6IFsyMDNdfX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MDddfX19fX19fX19LCAweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODUxOV19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzNdfX0sIGM6IFsyMzNdfX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODYyXX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODNdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIzNF19fSwgYzogWzIzNF19LCAweDNCOiB7YzogWzg3OTBdfX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4Nzg5XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDFdfX19fX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3MV19fX19fX19LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg1XX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjc5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NTE5XX19fSwgMHg2Njoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3ODZdfX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5OF19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwOTA2XX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzJdfX0sIGM6IFsyMzJdfX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MDRdfX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkwNV19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxOTFdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg0NjddfX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDFdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDkwM119fX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI3NV19fX19fX19LCAweDcwOiB7bDogezB4NzQ6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzg3MDldfSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcwOiB7bDogezB4MzE6IHtsOiB7MHgzMzoge2w6IHsweDNCOiB7YzogWzgxOTZdfX19LCAweDM0OiB7bDogezB4M0I6IHtjOiBbODE5N119fX19fSwgMHgzQjoge2M6IFs4MTk1XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzMzMV19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgxOTRdfX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI4MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTE3XX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzIzXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg2NV19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NDldfSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NDldfX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwMTNdfX19fX19fX19LCAweDcxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4NzkwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4Nzg5XX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Nzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDkwMl19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDFdfX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzYxXX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc5OV19fX19fX19LCAweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODAxXX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzEwODcyXX19fX19fX19fX19LCAweDc2OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzI1XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjA5XX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4N119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5NV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUxXX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzI0MF19fSwgYzogWzI0MF19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjM1XX19LCBjOiBbMjM1XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODM2NF19fX19fX19LCAweDc4OiB7bDogezB4NjM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMzXX19fX19LCAweDY5OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MDddfX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NDk2XX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg1MTldfX19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NjY6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4Nzg2XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOTJdfX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3OTJdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzY0MjU5XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1Nl19fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI2MF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTldfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1N119fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIsIDEwNl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgzN119fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1OF19fX19fX19LCAweDc0OiB7bDogezB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk2NDldfX19fX19fX19LCAweDZFOiB7bDogezB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzQwMl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1MV19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3MDRdfX19fX19fSwgMHg2Qjoge2w6IHsweDNCOiB7YzogWzg5MTZdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTY5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY1XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzMToge2w6IHsweDMyOiB7bDogezB4M0I6IHtjOiBbMTg5XX19LCBjOiBbMTg5XX0sIDB4MzM6IHtsOiB7MHgzQjoge2M6IFs4NTMxXX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzE4OF19fSwgYzogWzE4OF19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzM119fX0sIDB4MzY6IHtsOiB7MHgzQjoge2M6IFs4NTM3XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1MzldfX19fX0sIDB4MzI6IHtsOiB7MHgzMzoge2w6IHsweDNCOiB7YzogWzg1MzJdfX19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzNF19fX19fSwgMHgzMzoge2w6IHsweDM0OiB7bDogezB4M0I6IHtjOiBbMTkwXX19LCBjOiBbMTkwXX0sIDB4MzU6IHtsOiB7MHgzQjoge2M6IFs4NTM1XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1NDBdfX19fX0sIDB4MzQ6IHtsOiB7MHgzNToge2w6IHsweDNCOiB7YzogWzg1MzZdfX19fX0sIDB4MzU6IHtsOiB7MHgzNjoge2w6IHsweDNCOiB7YzogWzg1MzhdfX19LCAweDM4OiB7bDogezB4M0I6IHtjOiBbODU0MV19fX19fSwgMHgzNzoge2w6IHsweDM4OiB7bDogezB4M0I6IHtjOiBbODU0Ml19fX19fX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4MjYwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk5NF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk1XX19fX19fX19fSxcclxuICAgIDB4NDY6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2MF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDczXX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTcyNF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDUzOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNV19fX19fSwgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3MDRdfX19fX19fX19LCAweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDk3XX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5N119fX19fX19fX0sXHJcbiAgICAweDY3OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzUwMV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ3XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5ODldfX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4ODZdfX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI4N119fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI4NV19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3NV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyODldfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDVdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjNdfX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwNV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwN119fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc4XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MjFdfX19fX0sIDB4M0I6IHtjOiBbMTA4NzhdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg4MF19LCAweDZGOiB7bDogezB4M0I6IHtjOiBbMTA4ODJdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODg0XX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMywgNjUwMjRdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDBdfX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA3XX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg5Ml19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAwXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODgxMV19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMV19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg1MDNdfX19fX19fX19LCAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDddfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA5MTddfX19LCAweDNCOiB7YzogWzg4MjNdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODk4XX19fSwgMHg2QToge2w6IHsweDNCOiB7YzogWzEwOTE2XX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODkwXX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDg5MF19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4ODhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwODg4XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA5XX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA5XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM1XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTJdfX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDU4XX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg5NF19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg5Nl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MTldfX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDg3NF19fX19fX19LCAweDNCOiB7YzogWzYyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkxOV19fX19fX19LCAweDZDOiB7bDogezB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2NDVdfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3Nl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwODg2XX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxNl19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTldfX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fX19fX19fSwgMHg3MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4OTJdfX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyM119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgxOV19fX19fX19fX19LCBjOiBbNjJdfSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOSwgNjUwMjRdfX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA5LCA2NTAyNF19fX19fX19fX0sXHJcbiAgICAweDQ3OiB7bDogezB4NjE6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTVdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzk4OF19fX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjg2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyOTBdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI4NF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0M119fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyODhdfX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc0XX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMV19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyN119fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNl19fX19fX19LCAweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA1XX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fX19fX19fX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgwN119fX19fX19fX19fX19fX19fX19LCAweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MTRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyM119fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg3OF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MTldfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTcwXX19fX19fX0sIDB4NTQ6IHtsOiB7MHgzQjoge2M6IFs2Ml19fSwgYzogWzYyXX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODExXX19fX19LFxyXG4gICAgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbNzExXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NF19fX19fSwgMHg0MToge2w6IHsweDUyOiB7bDogezB4NDQ6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2Nl19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI5Ml19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjBdfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDYyOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NTldfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ2MV19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4N0E6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NEM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NDcyXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjk0XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDg6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzgyXX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzgzXX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgyMDJdfX19fX19fX19LCAweDZDOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxODldfX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY0OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOThdfX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTY4XX19fX19fX0sIDB4M0I6IHtjOiBbODU5Nl19LCAweDc3OiB7bDogezB4M0I6IHtjOiBbODYyMV19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2MF19fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjNdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI5M119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk4MjldfSwgMHg3NToge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5ODI5XX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgyMzBdfX19fX19fX19LCAweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg4OV19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAxXX19fX19LCAweDZCOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTA1MzNdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTM0XX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MDNdfX19fX19fSwgMHg2RDoge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NjNdfX19fX19fX19LCAweDZGOiB7bDogezB4NkI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE3XX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE4XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1M119fX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMTNdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk3XX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODQ2M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyOTVdfX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHg2Mjoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzgyNTldfX19fX19fX19LCAweDcwOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODIwOF19fX19fX19fX19fX19LFxyXG4gICAgMHg0OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDVdfX0sIGM6IFsyMDVdfX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjA2XX19LCBjOiBbMjA2XX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0OF19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszMDRdfX19fX19fSwgMHg0NToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ1XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjVdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwNF19fSwgYzogWzIwNF19fX19fX19fX0sIDB4NEE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMDZdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjk4XX19fX19LCAweDY3OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDQ5OiB7bDogezB4M0I6IHtjOiBbODUyMF19fX19fX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4NDY1XX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NThdfX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc0OF19LCAweDY1OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQ3XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fX19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODI5MV19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODI5MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEY6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyNV19fX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzAyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyOF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIxXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ2NF19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyOTZdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDMwXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIwN119fSwgYzogWzIwN119fX19fX19LFxyXG4gICAgMHg2OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzddfX0sIGM6IFsyMzddfX19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODI5MV19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIzOF19fSwgYzogWzIzOF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODBdfX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3N119fX19fSwgMHg3ODoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxNjFdfX0sIGM6IFsxNjFdfX19fX19fSwgMHg2Njoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODY2MF19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIzNl19fSwgYzogWzIzNl19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NTIwXX0sIDB4Njk6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NF19fX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Njoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDcxNl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODQ4OV19fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMDddfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjk5XX19fX19LCAweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDY1XX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NjRdfX19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ2NV19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbMzA1XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg4ODddfX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbNDM3XX19fX19fX19fSwgMHg2RToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ1M119fX19fX19fX0sIDB4M0I6IHtjOiBbODcxMl19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3MzRdfSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDcxN119fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzA1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4OTBdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ3XX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0ODRdfX19fX19fX19LCAweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg5MF19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA3NzVdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxMl19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDVdfX19fX0sIDB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzAzXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1NF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUzXX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxMl19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE5MV19fSwgYzogWzE5MV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk4XX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzEyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0OV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODk1M119fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTQ4XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4OTQ3XX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODcxMl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4MjkwXX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyOTddfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTEwXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIzOV19fSwgYzogWzIzOV19fX19fX19LFxyXG4gICAgMHg0QToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzA4XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ5XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzddfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTI5XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTczXX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzMl19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZCOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjhdfX19fX19fX19fX0sXHJcbiAgICAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMDldfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODFdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwM119fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzU2N119fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU1XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk5XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExMl19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZCOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDhdfX19fX19fX19fX0sXHJcbiAgICAweDRCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MjJdfX19fX19fX19LCAweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTBdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1MF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc4XX19fX19LCAweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjFdfX19fX19fSwgMHg0QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMwXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc0XX19fX19fX19fSxcclxuICAgIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1NF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTAwOF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzExXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzEyXX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOTNdfX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU2XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDAwXX19fX19fX19fSxcclxuICAgIDB4NkM6IHtsOiB7MHg0MToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjZdfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1Nl19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIzXX19fX19fX19fX19LCAweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszMTRdfX19fX19fX19LCAweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjc2XX19fX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYyOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1NV19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzEwMjE2XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0MV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwMjE2XX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwODg1XX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFsxNzFdfX0sIGM6IFsxNzFdfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODY3Nl19LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyN119fX19fX19LCAweDNCOiB7YzogWzg1OTJdfSwgMHg2Njoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA1MjVdfX19fX0sIDB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg2MTddfX19fX0sIDB4NkM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MTldfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTUzXX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjExXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTBdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MjFdfX19fX19fSwgMHgzQjoge2M6IFsxMDkyM119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA5MjVdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTI1LCA2NTAyNF19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwOF19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDk4XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMjNdfX19LCAweDZCOiB7bDogezB4M0I6IHtjOiBbOTFdfX19fX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2MzVdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjM5XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNjM3XX19fX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMxOF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTZdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk2OF19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMjNdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgzXX19fX19LCAweDY0OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTUwXX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMjBdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjJdfX19fX19fX19LCAweDcyOiB7bDogezB4NjQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5OV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTcxXX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjZdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDRdfSwgMHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTJdfSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTBdfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODYzN119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MzZdfX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDddfX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5Nl19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODY0Nl19fX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYyMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwN119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMl19fX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA2XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NzddfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDkyMF19fX19fSwgMHgzQjoge2M6IFsxMDg3N119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc5XX0sIDB4NkY6IHtsOiB7MHgzQjoge2M6IFsxMDg4MV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4ODNdfX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTIyLCA2NTAyNF19LCAweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg5OV19fX19fX19LCAweDczOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4ODVdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTE4XX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjJdfX19fX19fSwgMHg3MToge2w6IHsweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODkxXX19fX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODgyMl19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MThdfX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg4MDZdfSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwODkxXX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg4MjJdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODk3XX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NjM3XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzg2MzZdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNjAyXX19fX19fX19fSwgMHg2Mjoge2w6IHsweDZDOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5NjA0XX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTEzXX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ3XX19fX19fX0sIDB4M0I6IHtjOiBbODgxMF19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5OTBdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjAzXX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzIwXX19fX19fX19fSwgMHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTEzNl19fX19fX19fX0sIDB4M0I6IHtjOiBbOTEzNl19fX19fX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDg4OV19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4ODldfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwODg3XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDg4N119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOF19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOF19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIyMF19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODcwMV19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMjE0XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjI5XX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTAyMzZdfX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MTldfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjIwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MjldfX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTddfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk3XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDRdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzI3XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTVdfX19fX19fX19LCAweDdBOiB7bDogezB4M0I6IHtjOiBbOTY3NF19LCAweDY1OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY3NF19fX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMDczMV19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzQwXX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjQzXX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0Nl19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5OTFdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwNV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4MjA2XX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODk1XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODI0OV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMV19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjRdfX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg5M119fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDg5NV19fX19fX19LCAweDcxOiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs5MV19fX0sIDB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMTZdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMThdfX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzIyXX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwOTE4XX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NzNdfX19fX19fSwgMHgzQjoge2M6IFs2MF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MThdfX19fX19fSwgMHg2ODoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MDddfX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwNV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxNF19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc1XX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjY3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg0XX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NjZdfX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2NDZdfX19fX19fX19fSwgYzogWzYwXX0sIDB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3MF19fX19fX19fX19fSwgMHg3NToge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk4XX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MDgsIDY1MDI0XX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOCwgNjUwMjRdfX19fX19fX19LFxyXG4gICAgMHg0Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszMTNdfX19fX19fX19LCAweDZEOiB7bDogezB4NjI6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIzXX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMThdfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjZdfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDZdfX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzE3XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMxNV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDUxXX19fX19LCAweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE2XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY3Nl19fX19fX19LCAweDNCOiB7YzogWzg1OTJdfSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NDZdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1Nl19fX19fX19fX19fSwgMHg0Mzoge2w6IHsweDY1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg5NjhdfX19fX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTAyMTRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkzXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODVdfX19fX19fSwgMHgzQjoge2M6IFs4NjQzXX19fX19fX19fX19fX19fX19fX19fSwgMHg0Njoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk3MF19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTZdfX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYwXX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxMl19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODY3XX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODZdfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwM119fX19fX19LCAweDNCOiB7YzogWzg4ODJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg4NF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzddfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkyXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODRdfX19fX19fSwgMHgzQjoge2M6IFs4NjM5XX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc4XX19fX19fX0sIDB4M0I6IHtjOiBbODYzNl19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDczOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODkyMl19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDZdfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjJdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MTNdfX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NzddfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzldfX19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzM119fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMF19LCAweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjY2XX19fX19fX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzMxOV19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIyOV19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMF19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzM119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMzFdfX19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMV19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNF19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszMjFdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHgzQjoge2M6IFs2MF19fSwgYzogWzYwXX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEwXX19fX19LFxyXG4gICAgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzE3NV19fSwgYzogWzE3NV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3OTRdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTAwMTZdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDAxNl19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg2MTRdfSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NjE1XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MTJdfX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjEzXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NjQ2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDc5M119fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg0XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODIxMl19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzYyXX19fX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzM3XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNl19fX19fSwgMHg2ODoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODQ4N119fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzE4MV19fSwgYzogWzE4MV19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzQyXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5OTJdfX19fX19fSwgMHgzQjoge2M6IFs4NzM5XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTgzXX19LCBjOiBbMTgzXX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODYzXX19fSwgMHgzQjoge2M6IFs4NzIyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzYwXX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDc5NF19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTcxXX19fX19LCAweDY0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjMwXX19fX19fX0sIDB4NkU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NzFdfX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNThdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMl19fX19fSwgMHg3NDoge2w6IHsweDcwOiB7bDogezB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NjZdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NTZdfSwgMHg2Qzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODg4XX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg4OF19fX19fX19fX19fSxcclxuICAgIDB4NEQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA1MDFdfX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNTJdfX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjg3XX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDk5XX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODBdfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMyXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5OV19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTI0XX19fX19LFxyXG4gICAgMHg2RToge2w6IHsweDYxOiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODcxMV19fX19fX19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzI0XX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODczNiwgODQwMl19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3NzddfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODY0LCA4MjRdfX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4Nzc5LCA4MjRdfX19fX0sIDB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzMyOV19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg3NzddfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk4MzhdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NjldfX19fX19fSwgMHgzQjoge2M6IFs5ODM4XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxNjBdfX0sIGM6IFsxNjBdfX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODIsIDgyNF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4MywgODI0XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODE5XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMjhdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzI2XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4Nzc1XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NjEsIDgyNF19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgxOF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODVdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4MjExXX19fX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA1MzJdfX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk5XX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTldfX19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2M119fX19fX19LCAweDNCOiB7YzogWzg4MDBdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg0LCA4MjRdfX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg4MDJdfX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzZdfX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc3MCwgODI0XX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwN119fX19fSwgMHg2Nzoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwNywgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MTddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MTddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDcsIDgyNF19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgyMV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxNV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODgxNV19fX19fX19LCAweDQ3OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTIxLCA4MjRdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMSwgODQwMl19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODgxMSwgODI0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjIyXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1NF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTk0XX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzg3MTVdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg5NTZdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzg5NTRdfX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX19fX19LCAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTRdfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDJdfX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUzXX19fX19fX0sIDB4NjQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjldfX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA2LCA4MjRdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODgxNl19LCAweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MjJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MTZdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDYsIDgyNF19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTRdfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODIwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODE0XX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzg5MzhdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg5NDBdfX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1M119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTRdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMCwgODI0XX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4MTAsIDg0MDJdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4MTAsIDgyNF19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNzJdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcxM119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDksIDgyNF19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODk1MywgODI0XX19fSwgMHg3Njoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODcxM119fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFs4OTUxXX19fSwgMHg2Mzoge2w6IHsweDNCOiB7YzogWzg5NTBdfX19fX19fX19LCAweDZFOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NzE2XX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg3MTZdfX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODk1OF19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTU3XX19fX19fX19fX0sIGM6IFsxNzJdfX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQyXX19fX19fX19fX19LCAweDNCOiB7YzogWzg3NDJdfSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTEwMDUsIDg0MjFdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA2LCA4MjRdfX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzJdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkyOF19fX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI3LCA4MjRdfX19fX19fSwgMHgzQjoge2M6IFsxMDkyNywgODI0XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwNTQ3LCA4MjRdfX19LCAweDNCOiB7YzogWzg2MDNdfSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDUsIDgyNF19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1NV19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDNdfX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4OTM5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTQxXX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTI5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDkyOCwgODI0XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwM119fX19fSwgMHg2ODoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzQwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19LCAweDcxOiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTMwXX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTMxXX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODM2XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk0OSwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDBdfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NDksIDgyNF19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjgsIDgyNF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODM3XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1MCwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDFdfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzUsIDg0MDJdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTAsIDgyNF19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MjVdfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDFdfX0sIGM6IFsyNDFdfX19fX19fSwgMHg2Qzoge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODgyNF19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkzOF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MzldfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU3XX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFszNV19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg0NzBdfX19fX19fSwgMHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODE5OV19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MSwgODQwMl19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzZdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3N119fX19fX19fX0sIDB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MDUsIDg0MDJdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjIsIDg0MDJdfX19fX0sIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwMF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzEwNzE4XX19fX19fX19fX19LCAweDZDOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA0OThdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDQsIDg0MDJdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjAsIDg0MDJdfSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg0LCA4NDAyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA0OTldfX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4ODUsIDg0MDJdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NCwgODQwMl19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzhdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3OV19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA1MzFdfX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk4XX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OThdfX19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2Ml19fX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzVdfX19fX19fX19fX19fSxcclxuICAgIDB4NEU6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzIzXX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMjddfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzI1XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTNdfX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHg0RDoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIwM119fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDU0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTBdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTBdfX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgxXX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzRdfX19fX19fSwgMHg2Rjoge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4Mjg4XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2Qjoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxNjBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk4OF19LCAweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MDJdfX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDQzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4MTNdfX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTNdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDBdfSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MCwgODI0XX19fX19fX19fX19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MDhdfX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTVdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgxN119fX19fX19fX19fSwgMHg0Njoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA3LCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTEsIDgyNF19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI1XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODIxXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDg6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQ4OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MiwgODI0XX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzgzLCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDU0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwMywgODI0XX19fX19fX0sIDB4M0I6IHtjOiBbODkzOF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTRdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgxNl19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgxMCwgODI0XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODIwXX19fX19fX19fX19fX19fX19fX0sIDB4NEU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTE0LCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTEzLCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MzJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjcsIDgyNF19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjhdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcxNl19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3MDQsIDgyNF19fX19fX19LCAweDNCOiB7YzogWzg5MzldfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUzOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDUzOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDcsIDgyNF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTMwXX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0OCwgODI0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNCwgODQwMl19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODQwXX19fX19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgzM119LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkyOCwgODI0XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODkyOV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzEsIDgyNF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1LCA4NDAyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY5XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzJdfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc3NV19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc3XX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc3XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwOV19fSwgYzogWzIwOV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5MjVdfX19fX0sXHJcbiAgICAweDRGOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxMV19fSwgYzogWzIxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMTJdfX0sIGM6IFsyMTJdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU0XX19fX19LCAweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMzZdfX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMzhdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxMF19fSwgYzogWzIxMF19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszMzJdfX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MzddfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTI3XX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTM0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NDM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjIwXX19fX19fX19fX19fX19fX19fX19fX19LCAweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjE2XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODM2XX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NzhdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFsyMTZdfX0sIGM6IFsyMTZdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTNdfX0sIGM6IFsyMTNdfX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDddfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjE0XX19LCBjOiBbMjE0XX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyNTRdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5MTgyXX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5MTQwXX19fX19fX19fX19fX19fSwgMHg1MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbOTE4MF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2Rjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDNdfX0sIGM6IFsyNDNdfX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg1OV19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjQ0XX19LCBjOiBbMjQ0XX0sIDB4M0I6IHtjOiBbODg1OF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODZdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODYxXX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMzddfX19fX19fX19LCAweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDgwOF19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg1N119fX19fSwgMHg3Mzoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjg0XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzM5XX19fX19fX19fSwgMHg2Njoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjg3XX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDhdfX19fX0sIDB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNzMxXX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQyXX19LCBjOiBbMjQyXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY4OV19fX19fSwgMHg2ODoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjc3XX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5MzddfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MF19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYzNF19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjg2XX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA2ODNdfX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI1NF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2ODhdfX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszMzNdfX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NjldfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTU5XX19fX19fX19fSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjc4XX19fSwgMHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODU0XX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2MF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjc5XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNjgxXX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjM1XX19fX19fX0sIDB4M0I6IHtjOiBbODc0NF19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4NDVdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODUwMF19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NTAwXX19fX19fX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzE3MF19fSwgYzogWzE3MF19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbMTg2XX19LCBjOiBbMTg2XX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg4ODZdfX19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDgzOF19fX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4MzldfX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDg0M119fX19fSwgMHg1Mzoge2w6IHsweDNCOiB7YzogWzk0MTZdfX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1MDBdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFsyNDhdfX0sIGM6IFsyNDhdfX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg1Nl19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDVdfX0sIGM6IFsyNDVdfX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA2XX19fX19LCAweDNCOiB7YzogWzg4NTVdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjQ2XX19LCBjOiBbMjQ2XX19fX19LCAweDc2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTAyMV19fX19fX19fX19fSxcclxuICAgIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxODJdfSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NDFdfX19fX19fX19fSwgYzogWzE4Ml19LCAweDNCOiB7YzogWzg3NDFdfSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDk5NV19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzExMDA1XX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODcwNl19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg3XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszN119fX19fX19LCAweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzQ2XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODI0MF19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODg2OV19fX0sIDB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4MjQxXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwOV19fX19fSwgMHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDk5XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NzQyXX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzk2MF19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDY2OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODkxNl19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5ODJdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg0NjNdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg0NjJdfX19fX19fSwgMHg2Qjoge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbODQ2M119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3ODddfX19fX19fX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODg2Ml19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3ODZdfX19fX19fSwgMHgzQjoge2M6IFs0M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzI0XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNzg5XX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NjZdfX19LCAweDZEOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxNzddfX0sIGM6IFsxNzddfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNzkwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Nzoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTA3OTFdfX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzE3N119fX0sIDB4NkY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc3M119fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjFdfX19fX0sIDB4NzU6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTYzXX19LCBjOiBbMTYzXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzVdfX19fX0sIDB4M0I6IHtjOiBbODgyNl19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MjhdfX19fX19fSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzVdfX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODI2XX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODI4XX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjddfX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDkzN119fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTMzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgzMF19fX19fX19fX0sIDB4M0I6IHtjOiBbMTA5MjddfX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MzFdfX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDJdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzNdfX19fX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTM3XX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MzNdfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzZdfX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzE5XX19fSwgMHg2Njoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTAwNl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTc4XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg5NzldfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX0sIDB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg3MzNdfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fSwgMHg3NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4ODBdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA1XX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTY4XX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAwXX19fX19fX19fX19fX0sXHJcbiAgICAweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NzA2XX19fX19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1NV19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgzXX19fX19LCAweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzRdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MjhdfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDREOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxNzddfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ2MF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ3M119fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MzldfSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI2XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTI3XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgyOF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0M119fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg3NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzE5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19LCAweDNCOiB7YzogWzg3NTldfX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NzldfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzZdfX19fX19fSxcclxuICAgIDB4NTE6IHtsOiB7MHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg0XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NzRdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODBdfX19fX19fSwgMHg1NToge2w6IHsweDRGOiB7bDogezB4NTQ6IHtsOiB7MHgzQjoge2M6IFszNF19fSwgYzogWzM0XX19fX19fX0sXHJcbiAgICAweDcxOiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMF19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NF19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2Ml19fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjc5XX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwNl19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ2MV19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzRdfX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbNjNdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc5OV19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzRdfX0sIGM6IFszNF19fX19fX19LFxyXG4gICAgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2N119fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MjRdfX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2NSwgODE3XX19fSwgMHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDFdfX19fX19fX19LCAweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg3MzBdfX19fX19fSwgMHg2NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3NV19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NDJdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjFdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTg3XX19LCBjOiBbMTg3XX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA2MTNdfX19fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFs4Njc3XX0sIDB4NjY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNTI4XX19fX19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDU0N119fX0sIDB4M0I6IHtjOiBbODU5NF19LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyNl19fX19fSwgMHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODYxOF19fX19fSwgMHg2Qzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODYyMF19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1NjVdfX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA2MTJdfX19fX19fSwgMHg3NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODYxMV19fX19fSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDVdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg3NThdfSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzRdfX19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwOV19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDk5XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMjVdfX19LCAweDZCOiB7bDogezB4M0I6IHtjOiBbOTNdfX19fX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2MzZdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjM4XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNjQwXX19fX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM0NV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNDNdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk2OV19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMjVdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg4XX19fX19LCAweDY0OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTUxXX19fX19LCAweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwMV19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODYyN119fX19fX19LCAweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg0NzZdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDc1XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDc2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzddfX19fX19fSwgMHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTY0NV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzE3NF19fSwgYzogWzE3NF19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIxXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5NzFdfX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTExXX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk2XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NjQxXX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzg2NDBdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNjA0XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDNCOiB7YzogWzk2MV19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTAwOV19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTRdfSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTFdfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODY0MV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2NDBdfX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDRdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY1Ml19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ5XX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwNV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTA4XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNzMwXX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4N119fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDRdfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUyXX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4MjA3XX19fX19LCAweDZEOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzkxMzddfX19fX19fX19LCAweDNCOiB7YzogWzkxMzddfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDk5MF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIyMV19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODcwMl19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMjE1XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MzBdfX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjNdfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDVdfX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs0MV19LCAweDY3OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0NF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzBdfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0OV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyNTBdfX19fX19fX19LCAweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDddfX19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NjI1XX19fSwgMHg3MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOTNdfX19LCAweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA4XX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5MDZdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjU3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg1XX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NTZdfX19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbMTA3MDJdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjAwXX19fX19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4NDc4XX19fX19LFxyXG4gICAgMHg1Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDBdfX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxOV19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYwOF19LCAweDc0OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDUxOF19fX19fX19fX19fSwgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTEyXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzQ0XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM0Ml19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU2XX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODQ3Nl19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTVdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg2NTFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwN119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg0Nzoge2w6IHsweDNCOiB7YzogWzE3NF19fSwgYzogWzE3NF19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NzZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzkyOV19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE3XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY3N119fX19fX19LCAweDNCOiB7YzogWzg1OTRdfSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19fX19fX19LCAweDQzOiB7bDogezB4NjU6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODk2OV19fX19fX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDIxNV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODldfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4MV19fX19fX19LCAweDNCOiB7YzogWzg2NDJdfX19fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcxXX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjZdfSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4N119fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzA0XX19fX19fX0sIDB4M0I6IHtjOiBbODg4M119LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODg1XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NToge2w6IHsweDcwOiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODhdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4MF19fX19fX19LCAweDNCOiB7YzogWzg2MzhdfX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzldfX19fX19fSwgMHgzQjoge2M6IFs4NjQwXX19fX19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDc3XX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDQ5OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA2MDhdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjY3XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDc1XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNV19fX19fSwgMHg3NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0NDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDc5OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNzQwXX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg1Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1Ml19fX19fX19fX0sIDB4M0I6IHtjOiBbMTA5NDBdfSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM1MF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzQ4XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU3XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODZdfX19fX0sIDB4NDg6IHtsOiB7MHg0Mzoge2w6IHsweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjVdfX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk1XX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5Ml19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5NF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTMxXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3MjhdfX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NDY6IHtsOiB7MHg1NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY4XX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzOF19fX19fX19LCAweDcxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MzBdfX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjMzXX0sIDB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg1MV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUzOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDddfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg0OV19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDhdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg1MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4NTJdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4Ml19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MDJdfX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODkxMl19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgzOF19fX19fX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MjddfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjhdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgzMV19fX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg1NDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTVdfX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3MjFdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODkxM119LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MzldfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTNdfX19fX19fX19fX19fSxcclxuICAgIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQ3XX19fX19fX19fX19LCAweDYyOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIxOF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzZdfX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1M119fX19fX19fX0sIDB4M0I6IHtjOiBbODgyN119LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MjldfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI4XX0sIDB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzUxXX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTMyXX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNDldfX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDkzOF19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTM0XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM3XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc3MV19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzFdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODY1XX19fSwgMHgzQjoge2M6IFs4OTAxXX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg1NF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTMzXX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYwMF19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAwXX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjRdfX19fX19fSwgMHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTY3XX19LCBjOiBbMTY3XX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbNTldfX19fX0sIDB4NzM6IHtsOiB7MHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUzN119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19fX0sIDB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX0sIDB4Nzg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMDM4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMl19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTRdfX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs5ODM5XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk3XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk2XX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3MzldfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzE3M119fSwgYzogWzE3M119fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NjNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2Ml19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5NjJdfX19fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODU4XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbMTA5MTBdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTEyXX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MDldfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTExXX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc0XX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3ODhdfX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTBdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1OTJdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjZdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODAzXX19fX19fX19fSwgMHg2NToge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDcyNF19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzM5XX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk5NV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MjJdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI0XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkyNCwgNjUwMjRdfX19fX19fX19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAwXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwMjNdfX19fX0sIDB4M0I6IHtjOiBbMTA2OTJdfX19LCAweDNCOiB7YzogWzQ3XX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk4MjRdfSwgMHg3NToge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5ODI0XX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NzQxXX19fX19fX0sIDB4NzE6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODUxXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUxLCA2NTAyNF19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODUyXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUyLCA2NTAyNF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg0N119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0OV19fX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0N119LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQ5XX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODUwXX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NTBdfX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjMzXX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NDJdfX19fX19fSwgMHgzQjoge2M6IFs5NjMzXX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk0XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDhdfX19fX0sIDB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5OTVdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODkwMl19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NzM0XX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NzMzXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDEzXX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzE3NV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4MzRdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0MV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NDldfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODgzOF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ3XX19fX19fX19fSwgMHg2RDoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ1XX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NTVdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0Ml19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTQzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjE3XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM0XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MzhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0Ml19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTVdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA5NTFdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY1XX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTYzXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzZdfX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODI3XX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjhdfX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDkzOF19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTM0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzN119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgzMV19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3MjFdfX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs5ODM0XX19fX19LCAweDcwOiB7bDogezB4MzE6IHtsOiB7MHgzQjoge2M6IFsxODVdfX0sIGM6IFsxODVdfSwgMHgzMjoge2w6IHsweDNCOiB7YzogWzE3OF19fSwgYzogWzE3OF19LCAweDMzOiB7bDogezB4M0I6IHtjOiBbMTc5XX19LCBjOiBbMTc5XX0sIDB4M0I6IHtjOiBbODgzNV19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQyXX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY4XX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTUwXX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MzldfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0OF19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg3Mzoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDE4NV19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NjddfX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTldfX19fX19fX19LCAweDZEOiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5NDZdfX19fX19fX19LCAweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1Nl19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQzXX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5NDRdfX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzVdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgzOV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTBdfX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQzXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1Nl19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDk1Ml19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NjRdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5NjZdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTM0XX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYwMV19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAxXX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjVdfX19fX19fSwgMHg2RToge2w6IHsweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTM4XX19fX19fX19fX19LCAweDdBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjIzXX19LCBjOiBbMjIzXX19fX19fX19fSxcclxuICAgIDB4NTQ6IHtsOiB7MHg2MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOV19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5MzJdfX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1Nl19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTRdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1OF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg3XX19fX19LCAweDY4OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU2XX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkyMF19fX19fX19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjg3LCA4MjAyXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAxXX19fX19fX19fX19fX19fX19LCAweDQ4OiB7bDogezB4NEY6IHtsOiB7MHg1Mjoge2w6IHsweDRFOiB7bDogezB4M0I6IHtjOiBbMjIyXX19LCBjOiBbMjIyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzFdfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc3M119fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTM5XX19fX19fX0sIDB4NTI6IHtsOiB7MHg0MToge2w6IHsweDQ0OiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFs4NDgyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQxMV19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODNdfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszNThdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2Ml19fX19fSwgMHg0ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM1XX19fX19fX19fX19LFxyXG4gICAgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTgyXX19fX19fX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzk2NF19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5MTQwXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1N119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTVdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5MF19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDExXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5ODFdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExM119fX19fSwgMHg2ODoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDM0OiB7bDogezB4M0I6IHtjOiBbODc1Nl19fX0sIDB4NjY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU2XX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1Ml19LCAweDczOiB7bDogezB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzk3N119fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTc3XX19fX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAxXX19fX19fX19fSwgMHg2Qjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjRdfX19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI1NF19fSwgYzogWzI1NF19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNzMyXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4MDFdfX19fX0sIDB4M0I6IHtjOiBbODg2NF19fX0sIDB4M0I6IHtjOiBbMjE1XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgwMF19fX19LCBjOiBbMjE1XX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzQ5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA1MzZdfX19fX0sIDB4NzA6IHtsOiB7MHg2Mjoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5MDE0XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5OTNdfX19fX19fSwgMHgzQjoge2M6IFs4ODY4XX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjVdfSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDk3MF19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA1MzddfX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0ODJdfX19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjUzXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYzXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NjddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg4NF19fX19fX19fX19fX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc5Nl19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NTddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg4NV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk3MDhdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3OTZdfX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgxMF19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA3MDFdfX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDgxMV19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4N0E6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5MTg2XX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDldfX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5NF19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE1XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszNTldfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2OToge2w6IHsweDc4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEyXX19fX19fX0sIDB4NkY6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2NDoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDZdfX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDhdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDU1OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxOF19fSwgYzogWzIxOF19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA3XX0sIDB4NkY6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU2OV19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM4XX19fX19LCAweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM2NF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIxOV19fSwgYzogWzIxOV19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM2OF19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg4XX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTddfX0sIGM6IFsyMTddfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzYyXX19fX19fX19fSwgMHg2RToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzk1XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTE4M119fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTE0MV19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxODFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg5OV19LCAweDUwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg0Nl19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM3MF19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDBdfX19fX19fSwgMHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxNF19fX19fX19LCAweDNCOiB7YzogWzg1OTNdfSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ1XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU3XX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTddfX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYxXX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjA2XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OThdfX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTldfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzhdfSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5MzNdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MTNdfX19fX19fX19fX0sIDB4M0I6IHtjOiBbODg2OV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszNjZdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4NF19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjBdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjIwXX19LCBjOiBbMjIwXX19fX19fX0sXHJcbiAgICAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1MF19fSwgYzogWzI1MF19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1N119fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExOF19fX19fSwgMHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjVdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyNTFdfX0sIGM6IFsyNTFdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDkxXX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0NV19fX19fX19LCAweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzY5XX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwNl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExNF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ5XX19LCBjOiBbMjQ5XX19fX19fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5NV19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODYzOV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjM4XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTYwMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5ODhdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk4OF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTc1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIwXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzM2M119fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTY4XX19LCBjOiBbMTY4XX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM3MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjZdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTddfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzOV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzhdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODQ2XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NV19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbOTc4XX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjVdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDhdfX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk4OV19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTg5XX19fX19fX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg5NzRdfX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzM2N119fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk3MjFdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMF19fX19fX19LCAweDc0OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0NF19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzYxXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1M119LCAweDY2OiB7bDogezB4M0I6IHtjOiBbOTY1Ml19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ4XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzI1Ml19fSwgYzogWzI1Ml19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2M119fX19fX19fX19fX19fX0sXHJcbiAgICAweDc2OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjUyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTAxM119fX19fX19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwMDhdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODJdfX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk3XX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzEwMDldfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTYyXX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MiwgNjUwMjRdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTU1LCA2NTAyNF19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDMsIDY1MDI0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1NiwgNjUwMjRdfX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NzddfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODgyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg4M119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjFdfX19fX19fSwgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDk4NF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTA5ODVdfX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc0XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2Nl19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODcyXX19fX19fX19fSwgMHg2NToge2w6IHsweDY1OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODg5MV19fX19fX19LCAweDNCOiB7YzogWzg3NDRdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc5NF19fX19fX19LCAweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk0Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjRdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEyNF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTVdfX19fX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODgyXX19fX19fX19fSwgMHg2RToge2w6IHsweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODgzNSwgODQwMl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY3XX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzg4ODNdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMV19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU1LCA2NTAyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQyLCA2NTAyNF19fX19fX19LCAweDcwOiB7bDogezB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU2LCA2NTAyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQzLCA2NTAyNF19fX19fX19fX19fSwgMHg3QToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg3QToge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDY1MF19fX19fX19fX19fX19fX0sXHJcbiAgICAweDU2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5ODddfX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0Ml19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzNdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTgyXX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3NV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19LCAweDcyOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODIxNF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODIxNF19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODczOV19fX19fX19LCAweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTI0XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDA3Ml19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY4XX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDU0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg5XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0MV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4NV19fX19fX19LCAweDc2OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODc0XX19fX19fX19fX19fX0sXHJcbiAgICAweDU3OiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzJdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5MF19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDJdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODZdfX19fX19fX19LFxyXG4gICAgMHg3Nzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzczXX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NDddfX19fX19fSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc0M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc5M119fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NDcyXX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTZdfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY4XX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NDcyXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NjhdfSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg3NjhdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDEyXX19fX19fX19fSxcclxuICAgIDB4Nzg6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODk4XX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzk3MTFdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OV19fX19fX19LCAweDY0OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2MV19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExN119fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTU4XX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjI5XX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzJdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwMjM2XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODk1NV19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NTJdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY5XX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDc1NF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMwXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzNdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxM119fX19fSwgMHg3MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNzU4XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1Nl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1MV19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5N119fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODk2XX19fX19fX19fX19fX0sXHJcbiAgICAweDU4OiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5MV19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzkyNl19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg3XX19fX19fX19fSxcclxuICAgIDB4NTk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjIxXX19LCBjOiBbMjIxXX19fX19fX19fSwgMHg0MToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDcxXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzRdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNjddfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5Ml19fX19fSwgMHg0OToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDMxXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg4XX19fX19fX0sIDB4NTU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3MF19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM3Nl19fX19fX19fX0sXHJcbiAgICAweDc5OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1M119fSwgYzogWzI1M119fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDNdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM3NV19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5OV19fX19fSwgMHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTY1XX19LCBjOiBbMTY1XX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTE4XX19fX19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTFdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNzBdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTRdfX19fX19fSwgMHg3NToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAyXX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyNTVdfX0sIGM6IFsyNTVdfX19fX19fSxcclxuICAgIDB4NUE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzc3XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszODFdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0N119fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszNzldfX19fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg1Nzoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0ODhdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0Nl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0ODRdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODldfX19fX19fX19LFxyXG4gICAgMHg3QToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNzhdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM4Ml19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc5XX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzM4MF19fX19fX19LCAweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDg4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUwXX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExOV19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc4XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2OV19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE3MV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxNV19fX19fX19LCAweDc3OiB7bDogezB4NkE6IHtsOiB7MHgzQjoge2M6IFs4MjA1XX19fSwgMHg2RToge2w6IHsweDZBOiB7bDogezB4M0I6IHtjOiBbODIwNF19fX19fX19fX1cclxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IFVOSUNPREUuQ09ERV9QT0lOVFM7XG5cbi8vVXRpbHNcblxuLy9PUFRJTUlaQVRJT046IHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgbW92ZWQgb3V0IG9mIHRoaXMgbW9kdWxlLiBWOCBDcmFua3NoYWZ0IHdpbGwgbm90IGlubGluZVxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXG5mdW5jdGlvbiBpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSB7XG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCAmJiBjcCA8PSAweERGRkYgfHwgY3AgPiAweDEwRkZGRjtcbn1cblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKGNwMSwgY3AyKSB7XG4gICAgcmV0dXJuIGNwMSA+PSAweEQ4MDAgJiYgY3AxIDw9IDB4REJGRiAmJiBjcDIgPj0gMHhEQzAwICYmIGNwMiA8PSAweERGRkY7XG59XG5cbmZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVBhaXJDb2RlUG9pbnQoY3AxLCBjcDIpIHtcbiAgICByZXR1cm4gKGNwMSAtIDB4RDgwMCkgKiAweDQwMCArIDB4MjQwMCArIGNwMjtcbn1cblxuLy9QcmVwcm9jZXNzb3Jcbi8vTk9URTogSFRNTCBpbnB1dCBwcmVwcm9jZXNzaW5nXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW0pXG52YXIgUHJlcHJvY2Vzc29yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIHRoaXMud3JpdGUoaHRtbCk7XG5cbiAgICAvL05PVEU6IG9uZSBsZWFkaW5nIFUrRkVGRiBCWVRFIE9SREVSIE1BUksgY2hhcmFjdGVyIG11c3QgYmUgaWdub3JlZCBpZiBhbnkgYXJlIHByZXNlbnQgaW4gdGhlIGlucHV0IHN0cmVhbS5cbiAgICB0aGlzLnBvcyA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KDApID09PSAkLkJPTSA/IDAgOiAtMTtcblxuICAgIHRoaXMuZ2FwU3RhY2sgPSBbXTtcbiAgICB0aGlzLmxhc3RHYXBQb3MgPSAtMTtcbiAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgaWYgKHRoaXMuaHRtbCkge1xuICAgICAgICB0aGlzLmh0bWwgPSB0aGlzLmh0bWwuc3Vic3RyaW5nKDAsIHRoaXMucG9zICsgMSkgK1xuICAgICAgICAgICAgICAgICAgICBodG1sICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odG1sLnN1YnN0cmluZyh0aGlzLnBvcyArIDEsIHRoaXMuaHRtbC5sZW5ndGgpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcblxuXG4gICAgdGhpcy5sYXN0Q2hhclBvcyA9IHRoaXMuaHRtbC5sZW5ndGggLSAxO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvcysrO1xuXG4gICAgaWYgKHRoaXMucG9zID4gdGhpcy5sYXN0Q2hhclBvcylcbiAgICAgICAgcmV0dXJuICQuRU9GO1xuXG4gICAgdmFyIGNwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuXG4gICAgLy9OT1RFOiBhbnkgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlcnMgdGhhdCBpbW1lZGlhdGVseSBmb2xsb3cgYSBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVyXG4gICAgLy9tdXN0IGJlIGlnbm9yZWQuXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lICYmIGNwID09PSAkLkxJTkVfRkVFRCkge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGRHYXAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQoKTtcbiAgICB9XG5cbiAgICAvL05PVEU6IGFsbCBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVycyBtdXN0IGJlIGNvbnZlcnRlZCB0byBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyc1xuICAgIGlmIChjcCA9PT0gJC5DQVJSSUFHRV9SRVRVUk4pIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gJC5MSU5FX0ZFRUQ7XG4gICAgfVxuXG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcblxuICAgIC8vT1BUSU1JWkFUSU9OOiBmaXJzdCBwZXJmb3JtIGNoZWNrIGlmIHRoZSBjb2RlIHBvaW50IGluIHRoZSBhbGxvd2VkIHJhbmdlIHRoYXQgY292ZXJzIG1vc3QgY29tbW9uXG4gICAgLy9IVE1MIGlucHV0IChlLmcuIEFTQ0lJIGNvZGVzKSB0byBhdm9pZCBwZXJmb3JtYW5jZS1jb3N0IG9wZXJhdGlvbnMgZm9yIGhpZ2gtcmFuZ2UgY29kZSBwb2ludHMuXG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCA/IHRoaXMuX3Byb2Nlc3NIaWdoUmFuZ2VDb2RlUG9pbnQoY3ApIDogY3A7XG59O1xuXG5QcmVwcm9jZXNzb3IucHJvdG90eXBlLl9wcm9jZXNzSGlnaFJhbmdlQ29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XG4gICAgLy9OT1RFOiB0cnkgdG8gcGVlayBhIHN1cnJvZ2F0ZSBwYWlyXG4gICAgaWYgKHRoaXMucG9zICE9PSB0aGlzLmxhc3RDaGFyUG9zKSB7XG4gICAgICAgIHZhciBuZXh0Q3AgPSB0aGlzLmh0bWwuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuXG4gICAgICAgIGlmIChpc1N1cnJvZ2F0ZVBhaXIoY3AsIG5leHRDcCkpIHtcbiAgICAgICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIHN1cnJvZ2F0ZSBwYWlyLiBQZWVrIHBhaXIgY2hhcmFjdGVyIGFuZCByZWNhbGN1bGF0ZSBjb2RlIHBvaW50LlxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGNwID0gZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludChjcCwgbmV4dENwKTtcblxuICAgICAgICAgICAgLy9OT1RFOiBhZGQgZ2FwIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQgZHVyaW5nIHJldHJlYXRcbiAgICAgICAgICAgIHRoaXMuX2FkZEdhcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUmVzZXJ2ZWRDb2RlUG9pbnQoY3ApKVxuICAgICAgICBjcCA9ICQuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuXG4gICAgcmV0dXJuIGNwO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5fYWRkR2FwID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZ2FwU3RhY2sucHVzaCh0aGlzLmxhc3RHYXBQb3MpO1xuICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMucG9zO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5yZXRyZWF0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBvcyA9PT0gdGhpcy5sYXN0R2FwUG9zKSB7XG4gICAgICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMuZ2FwU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMucG9zLS07XG4gICAgfVxuXG4gICAgdGhpcy5wb3MtLTtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUHJlcHJvY2Vzc29yID0gcmVxdWlyZSgnLi9wcmVwcm9jZXNzb3InKSxcclxuICAgIExvY2F0aW9uSW5mb01peGluID0gcmVxdWlyZSgnLi9sb2NhdGlvbl9pbmZvX21peGluJyksXHJcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcclxuICAgIE5BTUVEX0VOVElUWV9UUklFID0gcmVxdWlyZSgnLi9uYW1lZF9lbnRpdHlfdHJpZScpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gVU5JQ09ERS5DT0RFX1BPSU5UUyxcclxuICAgICQkID0gVU5JQ09ERS5DT0RFX1BPSU5UX1NFUVVFTkNFUztcclxuXHJcbi8vUmVwbGFjZW1lbnQgY29kZSBwb2ludHMgZm9yIG51bWVyaWMgZW50aXRpZXNcclxudmFyIE5VTUVSSUNfRU5USVRZX1JFUExBQ0VNRU5UUyA9IHtcclxuICAgIDB4MDA6IDB4RkZGRCwgMHgwRDogMHgwMDBELCAweDgwOiAweDIwQUMsIDB4ODE6IDB4MDA4MSwgMHg4MjogMHgyMDFBLCAweDgzOiAweDAxOTIsIDB4ODQ6IDB4MjAxRSxcclxuICAgIDB4ODU6IDB4MjAyNiwgMHg4NjogMHgyMDIwLCAweDg3OiAweDIwMjEsIDB4ODg6IDB4MDJDNiwgMHg4OTogMHgyMDMwLCAweDhBOiAweDAxNjAsIDB4OEI6IDB4MjAzOSxcclxuICAgIDB4OEM6IDB4MDE1MiwgMHg4RDogMHgwMDhELCAweDhFOiAweDAxN0QsIDB4OEY6IDB4MDA4RiwgMHg5MDogMHgwMDkwLCAweDkxOiAweDIwMTgsIDB4OTI6IDB4MjAxOSxcclxuICAgIDB4OTM6IDB4MjAxQywgMHg5NDogMHgyMDFELCAweDk1OiAweDIwMjIsIDB4OTY6IDB4MjAxMywgMHg5NzogMHgyMDE0LCAweDk4OiAweDAyREMsIDB4OTk6IDB4MjEyMixcclxuICAgIDB4OUE6IDB4MDE2MSwgMHg5QjogMHgyMDNBLCAweDlDOiAweDAxNTMsIDB4OUQ6IDB4MDA5RCwgMHg5RTogMHgwMTdFLCAweDlGOiAweDAxNzhcclxufTtcclxuXHJcbi8vU3RhdGVzXHJcbnZhciBEQVRBX1NUQVRFID0gJ0RBVEFfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURScsXHJcbiAgICBSQ0RBVEFfU1RBVEUgPSAnUkNEQVRBX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfU1RBVEUgPSAnUkFXVEVYVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9TVEFURSA9ICdTQ1JJUFRfREFUQV9TVEFURScsXHJcbiAgICBQTEFJTlRFWFRfU1RBVEUgPSAnUExBSU5URVhUX1NUQVRFJyxcclxuICAgIFRBR19PUEVOX1NUQVRFID0gJ1RBR19PUEVOX1NUQVRFJyxcclxuICAgIEVORF9UQUdfT1BFTl9TVEFURSA9ICdFTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgVEFHX05BTUVfU1RBVEUgPSAnVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1JDREFUQV9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnUkFXVEVYVF9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFJyxcclxuICAgIEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUgPSAnQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURSA9ICdBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFJyxcclxuICAgIFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUgPSAnU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURScsXHJcbiAgICBCT0dVU19DT01NRU5UX1NUQVRFID0gJ0JPR1VTX0NPTU1FTlRfU1RBVEUnLFxyXG4gICAgTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUgPSAnTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFSVF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBUlRfREFTSF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFURSA9ICdDT01NRU5UX1NUQVRFJyxcclxuICAgIENPTU1FTlRfRU5EX0RBU0hfU1RBVEUgPSAnQ09NTUVOVF9FTkRfREFTSF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9TVEFURSA9ICdDT01NRU5UX0VORF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9CQU5HX1NUQVRFID0gJ0NPTU1FTlRfRU5EX0JBTkdfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TVEFURSA9ICdET0NUWVBFX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURScsXHJcbiAgICBET0NUWVBFX05BTUVfU1RBVEUgPSAnRE9DVFlQRV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFID0gJ0JFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURScsXHJcbiAgICBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEUgPSAnRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURScsXHJcbiAgICBCT0dVU19ET0NUWVBFX1NUQVRFID0gJ0JPR1VTX0RPQ1RZUEVfU1RBVEUnLFxyXG4gICAgQ0RBVEFfU0VDVElPTl9TVEFURSA9ICdDREFUQV9TRUNUSU9OX1NUQVRFJztcclxuXHJcbi8vVXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcclxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxyXG4vL0Fsd2F5cyBwZXJmb3JtIGlubGluaW5nIGNoZWNrIGJlZm9yZSBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbnMgKCdub2RlIC0tdHJhY2UtaW5saW5pbmcnKS5cclxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPT09ICQuU1BBQ0UgfHwgY3AgPT09ICQuTElORV9GRUVEIHx8IGNwID09PSAkLlRBQlVMQVRJT04gfHwgY3AgPT09ICQuRk9STV9GRUVEO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpRGlnaXQoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkRJR0lUXzAgJiYgY3AgPD0gJC5ESUdJVF85O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpVXBwZXIoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSAkLkxBVElOX0NBUElUQUxfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUxvd2VyKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5MQVRJTl9TTUFMTF9BICYmIGNwIDw9ICQuTEFUSU5fU01BTExfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUFscGhhTnVtZXJpYyhjcCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgaXNBc2NpaVVwcGVyKGNwKSB8fCBpc0FzY2lpTG93ZXIoY3ApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RpZ2l0KGNwLCBpc0hleCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgKGlzSGV4ICYmICgoY3AgPj0gJC5MQVRJTl9DQVBJVEFMX0EgJiYgY3AgPD0gJC5MQVRJTl9DQVBJVEFMX0YpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcCA+PSAkLkxBVElOX1NNQUxMX0EgJiYgY3AgPD0gJC5MQVRJTl9TTUFMTF9GKSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gMHhEODAwICYmIGNwIDw9IDB4REZGRiB8fCBjcCA+IDB4MTBGRkZGO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApIHtcclxuICAgIHJldHVybiBjcCArIDB4MDAyMDtcclxufVxyXG5cclxuLy9OT1RFOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCkgZnVuY3Rpb24gY2FuIGhhbmRsZSBvbmx5IGNoYXJhY3RlcnMgZnJvbSBCTVAgc3Vic2V0LlxyXG4vL1NvLCB3ZSBuZWVkIHRvIHdvcmthcm91bmQgdGhpcyBtYW51YWxseS5cclxuLy8oc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9mcm9tQ2hhckNvZGUjR2V0dGluZ19pdF90b193b3JrX3dpdGhfaGlnaGVyX3ZhbHVlcylcclxuZnVuY3Rpb24gdG9DaGFyKGNwKSB7XHJcbiAgICBpZiAoY3AgPD0gMHhGRkZGKVxyXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKTtcclxuXHJcbiAgICBjcCAtPSAweDEwMDAwO1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3AgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgfCBjcCAmIDB4M0ZGKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyQ2hhcihjcCkge1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbn1cclxuXHJcbi8vVG9rZW5pemVyXHJcbnZhciBUb2tlbml6ZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChodG1sLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IgPSBuZXcgUHJlcHJvY2Vzc29yKGh0bWwpO1xyXG5cclxuICAgIHRoaXMudG9rZW5RdWV1ZSA9IFtdO1xyXG5cclxuICAgIHRoaXMuYWxsb3dDREFUQSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5yZXR1cm5TdGF0ZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY29uc3VtcHRpb25Qb3MgPSAwO1xyXG5cclxuICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudEF0dHIgPSBudWxsO1xyXG5cclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyA9ICFvcHRpb25zLmRlY29kZUh0bWxFbnRpdGllcztcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYXRpb25JbmZvKVxyXG4gICAgICAgICAgICBMb2NhdGlvbkluZm9NaXhpbi5hc3NpZ24odGhpcyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1Rva2VuIHR5cGVzXHJcblRva2VuaXplci5DSEFSQUNURVJfVE9LRU4gPSAnQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOID0gJ05VTExfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOID0gJ1dISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiA9ICdTVEFSVF9UQUdfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU5EX1RBR19UT0tFTiA9ICdFTkRfVEFHX1RPS0VOJztcclxuVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4gPSAnQ09NTUVOVF9UT0tFTic7XHJcblRva2VuaXplci5ET0NUWVBFX1RPS0VOID0gJ0RPQ1RZUEVfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU9GX1RPS0VOID0gJ0VPRl9UT0tFTic7XHJcblxyXG4vL1Rva2VuaXplciBpbml0aWFsIHN0YXRlcyBmb3IgZGlmZmVyZW50IG1vZGVzXHJcblRva2VuaXplci5NT0RFID0gVG9rZW5pemVyLnByb3RvdHlwZS5NT0RFID0ge1xyXG4gICAgREFUQTogREFUQV9TVEFURSxcclxuICAgIFJDREFUQTogUkNEQVRBX1NUQVRFLFxyXG4gICAgUkFXVEVYVDogUkFXVEVYVF9TVEFURSxcclxuICAgIFNDUklQVF9EQVRBOiBTQ1JJUFRfREFUQV9TVEFURSxcclxuICAgIFBMQUlOVEVYVDogUExBSU5URVhUX1NUQVRFXHJcbn07XHJcblxyXG4vL1N0YXRpY1xyXG5Ub2tlbml6ZXIuZ2V0VG9rZW5BdHRyID0gZnVuY3Rpb24gKHRva2VuLCBhdHRyTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRva2VuLmF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRva2VuLmF0dHJzW2ldLm5hbWUgPT09IGF0dHJOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW4uYXR0cnNbaV0udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG4vL0dldCB0b2tlblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICghdGhpcy50b2tlblF1ZXVlLmxlbmd0aClcclxuICAgICAgICB0aGlzW3RoaXMuc3RhdGVdKHRoaXMuX2NvbnN1bWUoKSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5RdWV1ZS5zaGlmdCgpO1xyXG59O1xyXG5cclxuLy9Db25zdW1wdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jb25zdW1wdGlvblBvcysrO1xyXG4gICAgcmV0dXJuIHRoaXMucHJlcHJvY2Vzc29yLmFkdmFuY2VBbmRQZWVrQ29kZVBvaW50KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmNvbnN1bXB0aW9uUG9zLS07XHJcbiAgICB0aGlzLnByZXByb2Nlc3Nvci5yZXRyZWF0KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWVTZXZlcmFsID0gZnVuY3Rpb24gKGNvdW50KSB7XHJcbiAgICB3aGlsZSAoY291bnQtLSlcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWUoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX3JlY29uc3VtZUluU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuX3VuY29uc3VtZSgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoID0gZnVuY3Rpb24gKHBhdHRlcm4sIHN0YXJ0Q3AsIGNhc2VTZW5zaXRpdmUpIHtcclxuICAgIHZhciByb2xsYmFja1BvcyA9IHRoaXMuY29uc3VtcHRpb25Qb3MsXHJcbiAgICAgICAgaXNNYXRjaCA9IHRydWUsXHJcbiAgICAgICAgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoLFxyXG4gICAgICAgIHBhdHRlcm5Qb3MgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBwYXR0ZXJuQ3AgPSB2b2lkIDA7XHJcblxyXG4gICAgZm9yICg7IHBhdHRlcm5Qb3MgPCBwYXR0ZXJuTGVuZ3RoOyBwYXR0ZXJuUG9zKyspIHtcclxuICAgICAgICBpZiAocGF0dGVyblBvcyA+IDApXHJcbiAgICAgICAgICAgIGNwID0gdGhpcy5fY29uc3VtZSgpO1xyXG5cclxuICAgICAgICBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXR0ZXJuQ3AgPSBwYXR0ZXJuW3BhdHRlcm5Qb3NdO1xyXG5cclxuICAgICAgICBpZiAoY3AgIT09IHBhdHRlcm5DcCAmJiAoY2FzZVNlbnNpdGl2ZSB8fCBjcCAhPT0gdG9Bc2NpaUxvd2VyQ29kZVBvaW50KHBhdHRlcm5DcCkpKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNNYXRjaClcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKHRoaXMuY29uc3VtcHRpb25Qb3MgLSByb2xsYmFja1Bvcyk7XHJcblxyXG4gICAgcmV0dXJuIGlzTWF0Y2g7XHJcbn07XHJcblxyXG4vL0xvb2thaGVhZFxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sb29rYWhlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY3AgPSB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCgpO1xyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCgpO1xyXG5cclxuICAgIHJldHVybiBjcDtcclxufTtcclxuXHJcbi8vVGVtcCBidWZmZXJcclxuVG9rZW5pemVyLnByb3RvdHlwZS5pc1RlbXBCdWZmZXJFcXVhbFRvU2NyaXB0U3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMudGVtcEJ1ZmYubGVuZ3RoICE9PSAkJC5TQ1JJUFRfU1RSSU5HLmxlbmd0aClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRlbXBCdWZmLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcEJ1ZmZbaV0gIT09ICQkLlNDUklQVF9TVFJJTkdbaV0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8vVG9rZW4gY3JlYXRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5idWlsZFN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuYnVpbGRFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IFRva2VuaXplci5FTkRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgaWdub3JlZDogZmFsc2UsXHJcbiAgICAgICAgYXR0cnM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlU3RhcnRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkU3RhcnRUYWdUb2tlbih0YWdOYW1lRmlyc3RDaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkRW5kVGFnVG9rZW4odGFnTmFtZUZpcnN0Q2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ29tbWVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4sXHJcbiAgICAgICAgZGF0YTogJydcclxuICAgIH07XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVEb2N0eXBlVG9rZW4gPSBmdW5jdGlvbiAoZG9jdHlwZU5hbWVGaXJzdENoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTixcclxuICAgICAgICBuYW1lOiBkb2N0eXBlTmFtZUZpcnN0Q2ggfHwgJycsXHJcbiAgICAgICAgZm9yY2VRdWlya3M6IGZhbHNlLFxyXG4gICAgICAgIHB1YmxpY0lkOiBudWxsLFxyXG4gICAgICAgIHN5c3RlbUlkOiBudWxsXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAodHlwZSwgY2gpIHtcclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0ge1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgY2hhcnM6IGNoXHJcbiAgICB9O1xyXG59O1xyXG5cclxuLy9UYWcgYXR0cmlidXRlc1xyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVBdHRyID0gZnVuY3Rpb24gKGF0dHJOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50QXR0ciA9IHtcclxuICAgICAgICBuYW1lOiBhdHRyTmFtZUZpcnN0Q2gsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNEdXBsaWNhdGVBdHRyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIFRva2VuaXplci5nZXRUb2tlbkF0dHIodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudEF0dHIubmFtZSkgIT09IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sZWF2ZUF0dHJOYW1lID0gZnVuY3Rpb24gKHRvU3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSB0b1N0YXRlO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNEdXBsaWNhdGVBdHRyKCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uYXR0cnMucHVzaCh0aGlzLmN1cnJlbnRBdHRyKTtcclxufTtcclxuXHJcbi8vQXBwcm9wcmlhdGUgZW5kIHRhZyB0b2tlblxyXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI2FwcHJvcHJpYXRlLWVuZC10YWctdG9rZW4pXHJcblRva2VuaXplci5wcm90b3R5cGUuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPT09IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWU7XHJcbn07XHJcblxyXG4vL1Rva2VuIGVtaXNzaW9uXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgLy9OT1RFOiBzdG9yZSBlbWl0ZWQgc3RhcnQgdGFnJ3MgdGFnTmFtZSB0byBkZXRlcm1pbmUgaXMgdGhlIGZvbGxvd2luZyBlbmQgdGFnIHRva2VuIGlzIGFwcHJvcHJpYXRlLlxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4pXHJcbiAgICAgICAgdGhpcy5sYXN0U3RhcnRUYWdOYW1lID0gdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICB0aGlzLnRva2VuUXVldWUucHVzaCh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKSB7XHJcbiAgICAgICAgdGhpcy50b2tlblF1ZXVlLnB1c2godGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRFT0ZUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4oKTtcclxuICAgIHRoaXMudG9rZW5RdWV1ZS5wdXNoKHt0eXBlOiBUb2tlbml6ZXIuRU9GX1RPS0VOfSk7XHJcbn07XHJcblxyXG4vL0NoYXJhY3RlcnMgZW1pc3Npb25cclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBzcGVjaWZpY2F0aW9uIHVzZXMgb25seSBvbmUgdHlwZSBvZiBjaGFyYWN0ZXIgdG9rZW5zIChvbmUgdG9rZW4gcGVyIGNoYXJhY3RlcikuXHJcbi8vVGhpcyBjYXVzZXMgYSBodWdlIG1lbW9yeSBvdmVyaGVhZCBhbmQgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgcGFyc2VyIGxvb3BzLiBwYXJzZTUgdXNlcyAzIGdyb3VwcyBvZiBjaGFyYWN0ZXJzLlxyXG4vL0lmIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYmVsb25nIHRvIHRoZSBzYW1lIGdyb3VwLCBwYXJzZXIgY2FuIHByb2Nlc3MgaXRcclxuLy9hcyBhIHNpbmdsZSBzb2xpZCBjaGFyYWN0ZXIgdG9rZW4uXHJcbi8vU28sIHRoZXJlIGFyZSAzIHR5cGVzIG9mIGNoYXJhY3RlciB0b2tlbnMgaW4gcGFyc2U1OlxyXG4vLzEpTlVMTF9DSEFSQUNURVJfVE9LRU4gLSBcXHUwMDAwLWNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcdTAwMDBcXHUwMDAwXFx1MDAwMCcpXHJcbi8vMilXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAtIGFueSB3aGl0ZXNwYWNlL25ldy1saW5lIGNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcbiAgXFxyXFx0ICAgXFxmJylcclxuLy8zKUNIQVJBQ1RFUl9UT0tFTiAtIGFueSBjaGFyYWN0ZXIgc2VxdWVuY2Ugd2hpY2ggZG9uJ3QgYmVsb25nIHRvIGdyb3VwcyAxIGFuZCAyIChlLmcuICdhYmNkZWYxMjM0QEAjJCVeJylcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4udHlwZSAhPT0gdHlwZSlcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKVxyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmNoYXJzICs9IGNoO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XHJcbiAgICB2YXIgdHlwZSA9IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdHlwZSA9IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHR5cGUgPSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKHR5cGUsIHRvQ2hhcihjcCkpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdFNldmVyYWxDb2RlUG9pbnRzID0gZnVuY3Rpb24gKGNvZGVQb2ludHMpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNvZGVQb2ludHNbaV0pO1xyXG59O1xyXG5cclxuLy9OT1RFOiB1c2VkIHRoZW4gd2UgZW1pdCBjaGFyYWN0ZXIgZXhwbGljaXRseS4gVGhpcyBpcyBhbHdheXMgYSBub24td2hpdGVzcGFjZSBhbmQgYSBub24tbnVsbCBjaGFyYWN0ZXIuXHJcbi8vU28gd2UgY2FuIGF2b2lkIGFkZGl0aW9uYWwgY2hlY2tzIGhlcmUuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDaGFyID0gZnVuY3Rpb24gKGNoKSB7XHJcbiAgICB0aGlzLl9hcHBlbmRDaGFyVG9DdXJyZW50Q2hhcmFjdGVyVG9rZW4oVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiwgY2gpO1xyXG59O1xyXG5cclxuLy9DaGFyYWN0ZXIgcmVmZXJlbmNlIHRva2VuaXphdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lTnVtZXJpY0VudGl0eSA9IGZ1bmN0aW9uIChpc0hleCkge1xyXG4gICAgdmFyIGRpZ2l0cyA9ICcnLFxyXG4gICAgICAgIG5leHRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgICAgZGlnaXRzICs9IHRvQ2hhcih0aGlzLl9jb25zdW1lKCkpO1xyXG4gICAgICAgIG5leHRDcCA9IHRoaXMuX2xvb2thaGVhZCgpO1xyXG4gICAgfSB3aGlsZSAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKTtcclxuXHJcbiAgICBpZiAodGhpcy5fbG9va2FoZWFkKCkgPT09ICQuU0VNSUNPTE9OKVxyXG4gICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENwID0gcGFyc2VJbnQoZGlnaXRzLCBpc0hleCA/IDE2IDogMTApLFxyXG4gICAgICAgIHJlcGxhY2VtZW50ID0gTlVNRVJJQ19FTlRJVFlfUkVQTEFDRU1FTlRTW3JlZmVyZW5jZWRDcF07XHJcblxyXG4gICAgaWYgKHJlcGxhY2VtZW50KVxyXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcclxuXHJcbiAgICBpZiAoaXNSZXNlcnZlZENvZGVQb2ludChyZWZlcmVuY2VkQ3ApKVxyXG4gICAgICAgIHJldHVybiAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICByZXR1cm4gcmVmZXJlbmNlZENwO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZU5hbWVkRW50aXR5ID0gZnVuY3Rpb24gKHN0YXJ0Q3AsIGluQXR0cikge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gbnVsbCxcclxuICAgICAgICBlbnRpdHlDb2RlUG9pbnRzQ291bnQgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBsZWFmID0gTkFNRURfRU5USVRZX1RSSUVbY3BdLFxyXG4gICAgICAgIGNvbnN1bWVkQ291bnQgPSAxLFxyXG4gICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKDsgbGVhZiAmJiBjcCAhPT0gJC5FT0Y7IGNwID0gdGhpcy5fY29uc3VtZSgpLCBjb25zdW1lZENvdW50KyssIGxlYWYgPSBsZWFmLmwgJiYgbGVhZi5sW2NwXSkge1xyXG4gICAgICAgIGlmIChsZWFmLmMpIHtcclxuICAgICAgICAgICAgLy9OT1RFOiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBuYW1lZCByZWZlcmVuY2UgbWF0Y2guIEJ1dCB3ZSBkb24ndCBzdG9wIGxvb2t1cCBhdCB0aGlzIHBvaW50LFxyXG4gICAgICAgICAgICAvL2JlY2F1c2UgbG9uZ2VyIG1hdGNoZXMgc3RpbGwgY2FuIGJlIGZvdW5kIChlLmcuICcmbm90JyBhbmQgJyZub3RpbjsnKSBleGNlcHQgdGhlIGNhc2VcclxuICAgICAgICAgICAgLy90aGVuIGZvdW5kIG1hdGNoIGlzIHRlcm1pbmF0ZWQgYnkgc2VtaWNvbG9uLlxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQ29kZVBvaW50cyA9IGxlYWYuYztcclxuICAgICAgICAgICAgZW50aXR5Q29kZVBvaW50c0NvdW50ID0gY29uc3VtZWRDb3VudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TRU1JQ09MT04pIHtcclxuICAgICAgICAgICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKCFzZW1pY29sb25UZXJtaW5hdGVkKSB7XHJcbiAgICAgICAgICAgIC8vTk9URTogdW5jb25zdW1lIGV4Y2VzcyAoZS5nLiAnaXQnIGluICcmbm90aXQnKVxyXG4gICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQgLSBlbnRpdHlDb2RlUG9pbnRzQ291bnQpO1xyXG5cclxuICAgICAgICAgICAgLy9OT1RFOiBJZiB0aGUgY2hhcmFjdGVyIHJlZmVyZW5jZSBpcyBiZWluZyBjb25zdW1lZCBhcyBwYXJ0IG9mIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIG5leHQgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgIC8vaXMgZWl0aGVyIGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSkgb3IgYW4gYWxwaGFudW1lcmljIEFTQ0lJIGNoYXJhY3RlciwgdGhlbiwgZm9yIGhpc3RvcmljYWxcclxuICAgICAgICAgICAgLy9yZWFzb25zLCBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIG1hdGNoZWQgYWZ0ZXIgdGhlIFUrMDAyNiBBTVBFUlNBTkQgY2hhcmFjdGVyICgmKSBtdXN0IGJlXHJcbiAgICAgICAgICAgIC8vdW5jb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgICAgIC8vSG93ZXZlciwgaWYgdGhpcyBuZXh0IGNoYXJhY3RlciBpcyBpbiBmYWN0IGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSksIHRoZW4gdGhpcyBpcyBhXHJcbiAgICAgICAgICAgIC8vcGFyc2UgZXJyb3IsIGJlY2F1c2Ugc29tZSBsZWdhY3kgdXNlciBhZ2VudHMgd2lsbCBtaXNpbnRlcnByZXQgdGhlIG1hcmt1cCBpbiB0aG9zZSBjYXNlcy5cclxuICAgICAgICAgICAgLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzKVxyXG4gICAgICAgICAgICBpZiAoaW5BdHRyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBpc0FzY2lpQWxwaGFOdW1lcmljKG5leHRDcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGVudGl0eUNvZGVQb2ludHNDb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZWZlcmVuY2VkQ29kZVBvaW50cztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQpO1xyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZSA9IGZ1bmN0aW9uIChzdGFydENwLCBpbkF0dHIpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nIHx8IGlzV2hpdGVzcGFjZShzdGFydENwKSB8fCBzdGFydENwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgc3RhcnRDcCA9PT0gJC5BTVBFUlNBTkQgfHwgc3RhcnRDcCA9PT0gdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwIHx8IHN0YXJ0Q3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgLy9OT1RFOiBub3QgYSBjaGFyYWN0ZXIgcmVmZXJlbmNlLiBObyBjaGFyYWN0ZXJzIGFyZSBjb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoc3RhcnRDcCA9PT0gJC5OVU1CRVJfU0lHTikge1xyXG4gICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIG51bWVyaWMgZW50aXR5IGNhbmRpZGF0ZSwgbm93IHdlIHNob3VsZCBkZXRlcm1pbmUgaWYgaXQncyBoZXggb3IgZGVjaW1hbFxyXG4gICAgICAgIHZhciBpc0hleCA9IGZhbHNlLFxyXG4gICAgICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5MQVRJTl9TTUFMTF9YIHx8IG5leHRDcCA9PT0gJC5MQVRJTl9DQVBJVEFMX1gpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uc3VtZSgpO1xyXG4gICAgICAgICAgICBpc0hleCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBkaWdpdCB0aGlzIGlzIGEgbnVtZXJpYyBlbnRpdHkgZm9yIHN1cmUsIHNvIHdlIGNvbnN1bWUgaXRcclxuICAgICAgICBpZiAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKVxyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NvbnN1bWVOdW1lcmljRW50aXR5KGlzSGV4KV07XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvL05PVEU6IG90aGVyd2lzZSB0aGlzIGlzIGEgYm9ndXMgbnVtYmVyIGVudGl0eSBhbmQgYSBwYXJzZSBlcnJvci4gVW5jb25zdW1lIHRoZSBudW1iZXIgc2lnblxyXG4gICAgICAgICAgICAvL2FuZCB0aGUgJ3gnLWNoYXJhY3RlciBpZiBhcHByb3ByaWF0ZS5cclxuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChpc0hleCA/IDIgOiAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uc3VtZU5hbWVkRW50aXR5KHN0YXJ0Q3AsIGluQXR0cik7XHJcbn07XHJcblxyXG4vL1N0YXRlIG1hY2hpbmVcclxudmFyIF8gPSBUb2tlbml6ZXIucHJvdG90eXBlO1xyXG5cclxuLy8xMi4yLjQuMSBEYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bREFUQV9TVEFURV0gPSBmdW5jdGlvbiBkYXRhU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluRGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENvZGVQb2ludHMgPSB0aGlzLl9jb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKGNwLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKVxyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyhyZWZlcmVuY2VkQ29kZVBvaW50cyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyYnKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zIFJDREFUQSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkFNUEVSU0FORClcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9SQ0RBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBSQ0RBVEEgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJblJjZGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gUkNEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gdm9pZCAwO1xyXG5cclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IHRoaXMuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoY3AsIGZhbHNlKTtcclxuXHJcbiAgICBpZiAocmVmZXJlbmNlZENvZGVQb2ludHMpXHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHJlZmVyZW5jZWRDb2RlUG9pbnRzKTtcclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignJicpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUgUkFXVEVYVCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42IFNjcmlwdCBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNyBQTEFJTlRFWFQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tQTEFJTlRFWFRfU1RBVEVdID0gZnVuY3Rpb24gcGxhaW50ZXh0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjggVGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiB0YWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5FWENMQU1BVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBNQVJLVVBfREVDTEFSQVRJT05fT1BFTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBFTkRfVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlU3RhcnRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVFU1RJT05fTUFSSykge1xyXG4gICAgICAgIC8vTk9URTogY2FsbCBib2d1cyBjb21tZW50IHN0YXRlIGRpcmVjdGx5IHdpdGggY3VycmVudCBjb25zdW1lZCBjaGFyYWN0ZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVjb25zdW1wdGlvbi5cclxuICAgICAgICB0aGlzW0JPR1VTX0NPTU1FTlRfU1RBVEVdKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuOSBFbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tFTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gZW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvL05PVEU6IGNhbGwgYm9ndXMgY29tbWVudCBzdGF0ZSBkaXJlY3RseSB3aXRoIGN1cnJlbnQgY29uc3VtZWQgY2hhcmFjdGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlY29uc3VtcHRpb24uXHJcbiAgICAgICAgdGhpc1tCT0dVU19DT01NRU5UX1NUQVRFXShjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTAgVGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiB0YWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTEgUkNEQVRBIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHJjZGF0YUxlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMiBSQ0RBVEEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMyBSQ0RBVEEgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTQgUkFXVEVYVCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE1IFJBV1RFWFQgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE2IFJBV1RFWFQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHRoaXMudGVtcEJ1ZmYpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkFXVEVYVF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTcgU2NyaXB0IGRhdGEgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignIScpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTggU2NyaXB0IGRhdGEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xOSBTY3JpcHQgZGF0YSBlbmQgdGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yMCBTY3JpcHQgZGF0YSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZVN0YXJ0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjEgU2NyaXB0IGRhdGEgZXNjYXBlIHN0YXJ0IGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlU3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjIgU2NyaXB0IGRhdGEgZXNjYXBlZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjMgU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNCBTY3JpcHQgZGF0YSBlc2NhcGVkIGRhc2ggZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc+Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNSBTY3JpcHQgZGF0YSBlc2NhcGVkIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjYgU2NyaXB0IGRhdGEgZXNjYXBlZCBlbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI3IFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI4IFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSB8fCBjcCA9PT0gJC5TT0xJRFVTIHx8IGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuaXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZygpID8gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjkgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMCBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMSBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMiBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVkTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlIGVuZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVFbmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkgfHwgY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmlzVGVtcEJ1ZmZlckVxdWFsVG9TY3JpcHRTdHJpbmcoKSA/IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaCh0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzQgQmVmb3JlIGF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZUF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzUgQXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FUVVBTFNfU0lHTilcclxuICAgICAgICB0aGlzLl9sZWF2ZUF0dHJOYW1lKEJFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShEQVRBX1NUQVRFKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9DaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzYgQWZ0ZXIgYXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9BVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVRVUFMU19TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzcgQmVmb3JlIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOIHx8IGNwID09PSAkLkdSQVZFX0FDQ0VOVCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM4IEF0dHJpYnV0ZSB2YWx1ZSAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKSB7XHJcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gJC5RVU9UQVRJT05fTUFSSztcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzkgQXR0cmlidXRlIHZhbHVlIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuQVBPU1RST1BIRTtcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDAgQXR0cmlidXRlIHZhbHVlICh1bnF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlVmFsdWVVbnF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuR1JFQVRFUl9USEFOX1NJR047XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgICAgICBjcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBjcCA9PT0gJC5HUkFWRV9BQ0NFTlQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40MSBDaGFyYWN0ZXIgcmVmZXJlbmNlIGluIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gdGhpcy5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShjcCwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVuY2VkQ29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIocmVmZXJlbmNlZENvZGVQb2ludHNbaV0pO1xyXG4gICAgfSBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSAnJic7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmV0dXJuU3RhdGU7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDIgQWZ0ZXIgYXR0cmlidXRlIHZhbHVlIChxdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQzIFNlbGYtY2xvc2luZyBzdGFydCB0YWcgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFXSA9IGZ1bmN0aW9uIHNlbGZDbG9zaW5nU3RhcnRUYWdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ0IEJvZ3VzIGNvbW1lbnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCT0dVU19DT01NRU5UX1NUQVRFXSA9IGZ1bmN0aW9uIGJvZ3VzQ29tbWVudFN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLl9jcmVhdGVDb21tZW50VG9rZW4oKTtcclxuXHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBjcCA9PT0gJC5OVUxMID8gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIgOiB0b0NoYXIoY3ApO1xyXG4gICAgICAgICAgICBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ1IE1hcmt1cCBkZWNsYXJhdGlvbiBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gbWFya3VwRGVjbGFyYXRpb25PcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuREFTSF9EQVNIX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBUlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkRPQ1RZUEVfU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuYWxsb3dDREFUQSAmJiB0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfU1RBUlRfU1RSSU5HLCBjcCwgdHJ1ZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENEQVRBX1NFQ1RJT05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy9OT1RFOiBjYWxsIGJvZ3VzIGNvbW1lbnQgc3RhdGUgZGlyZWN0bHkgd2l0aCBjdXJyZW50IGNvbnN1bWVkIGNoYXJhY3RlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWNvbnN1bXB0aW9uLlxyXG4gICAgICAgIHRoaXNbQk9HVVNfQ09NTUVOVF9TVEFURV0oY3ApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ2IENvbW1lbnQgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ3IENvbW1lbnQgc3RhcnQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40OCBDb21tZW50IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDkgQ29tbWVudCBlbmQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUwIENvbW1lbnQgZW5kIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9FTkRfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfQkFOR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTEgQ29tbWVudCBlbmQgYmFuZyBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0JBTkdfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZEJhbmdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MiBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MyBCZWZvcmUgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU0IERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLm5hbWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTUgQWZ0ZXIgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlBVQkxJQ19TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlNZU1RFTV9TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU2IEFmdGVyIERPQ1RZUEUgcHVibGljIGtleXdvcmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVB1YmxpY0tleXdvcmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTcgQmVmb3JlIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTggRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41OSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlUHVibGljSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjAgQWZ0ZXIgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MSBCZXR3ZWVuIERPQ1RZUEUgcHVibGljIGFuZCBzeXN0ZW0gaWRlbnRpZmllcnMgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEVdID0gZnVuY3Rpb24gYmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVyc1N0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjIgQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0ga2V5d29yZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MyBCZWZvcmUgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NCBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChkb3VibGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3lzdGVtSWRlbnRpZmllckRvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY1IERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NiBBZnRlciBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NyBCb2d1cyBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQk9HVVNfRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBib2d1c0RvY3R5cGVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY4IENEQVRBIHNlY3Rpb24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDREFUQV9TRUNUSU9OX1NUQVRFXSA9IGZ1bmN0aW9uIGNkYXRhU2VjdGlvblN0YXRlKGNwKSB7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfRU5EX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgICAgICAgICAgY3AgPSB0aGlzLl9jb25zdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL05vZGUgY29uc3RydWN0aW9uXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50JyxcclxuICAgICAgICBxdWlya3NNb2RlOiBmYWxzZSxcclxuICAgICAgICBjaGlsZE5vZGVzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnQtZnJhZ21lbnQnLFxyXG4gICAgICAgIHF1aXJrc01vZGU6IGZhbHNlLFxyXG4gICAgICAgIGNoaWxkTm9kZXM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgdGFnTmFtZTogdGFnTmFtZSxcclxuICAgICAgICBhdHRyczogYXR0cnMsXHJcbiAgICAgICAgbmFtZXNwYWNlVVJJOiBuYW1lc3BhY2VVUkksXHJcbiAgICAgICAgY2hpbGROb2RlczogW10sXHJcbiAgICAgICAgcGFyZW50Tm9kZTogbnVsbFxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlTmFtZTogJyNjb21tZW50JyxcclxuICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH07XHJcbn07XHJcblxyXG52YXIgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjdGV4dCcsXHJcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgbXV0YXRpb25cclxuZXhwb3J0cy5zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xyXG4gICAgdmFyIGRvY3R5cGVOb2RlID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGROb2Rlc1tpXS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnKSB7XHJcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlID0gZG9jdW1lbnQuY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb2N0eXBlTm9kZSkge1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLnB1YmxpY0lkID0gcHVibGljSWQ7XHJcbiAgICAgICAgZG9jdHlwZU5vZGUuc3lzdGVtSWQgPSBzeXN0ZW1JZDtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCwge1xyXG4gICAgICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudFR5cGUnLFxyXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICBwdWJsaWNJZDogcHVibGljSWQsXHJcbiAgICAgICAgICAgIHN5c3RlbUlkOiBzeXN0ZW1JZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5zZXRRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICBkb2N1bWVudC5xdWlya3NNb2RlID0gdHJ1ZTtcclxufTtcclxuXHJcbmV4cG9ydHMuaXNRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzTW9kZTtcclxufTtcclxuXHJcbnZhciBhcHBlbmRDaGlsZCA9IGV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnB1c2gobmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxudmFyIGluc2VydEJlZm9yZSA9IGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihyZWZlcmVuY2VOb2RlKTtcclxuXHJcbiAgICBwYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5kZXRhY2hOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICB2YXIgaWR4ID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcclxuXHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0KSB7XHJcbiAgICBpZiAocGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBwcmV2Tm9kZSA9IHBhcmVudE5vZGUuY2hpbGROb2Rlc1twYXJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGlmIChwcmV2Tm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jykge1xyXG4gICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpKTtcclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcclxuXHJcbiAgICBpZiAocHJldk5vZGUgJiYgcHJldk5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCcpXHJcbiAgICAgICAgcHJldk5vZGUudmFsdWUgKz0gdGV4dDtcclxuICAgIGVsc2VcclxuICAgICAgICBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCksIHJlZmVyZW5jZU5vZGUpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5hZG9wdEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocmVjaXBpZW50Tm9kZSwgYXR0cnMpIHtcclxuICAgIHZhciByZWNpcGllbnRBdHRyc01hcCA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjaXBpZW50Tm9kZS5hdHRycy5sZW5ndGg7IGkrKylcclxuICAgICAgICByZWNpcGllbnRBdHRyc01hcC5wdXNoKHJlY2lwaWVudE5vZGUuYXR0cnNbaV0ubmFtZSk7XHJcblxyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnRBdHRyc01hcC5pbmRleE9mKGF0dHJzW2pdLm5hbWUpID09PSAtMSlcclxuICAgICAgICAgICAgcmVjaXBpZW50Tm9kZS5hdHRycy5wdXNoKGF0dHJzW2pdKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgdHJhdmVyc2luZ1xyXG5leHBvcnRzLmdldEZpcnN0Q2hpbGQgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1swXTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q2hpbGROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmF0dHJzO1xyXG59O1xyXG5cclxuLy9Ob2RlIGRhdGFcclxuZXhwb3J0cy5nZXRUYWdOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBlbGVtZW50LnRhZ05hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldE5hbWVzcGFjZVVSSSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lc3BhY2VVUkk7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldFRleHROb2RlQ29udGVudCA9IGZ1bmN0aW9uICh0ZXh0Tm9kZSkge1xyXG4gICAgcmV0dXJuIHRleHROb2RlLnZhbHVlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRDb21tZW50Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoY29tbWVudE5vZGUpIHtcclxuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLm5hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLnB1YmxpY0lkO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5zeXN0ZW1JZDtcclxufTtcclxuXHJcbi8vTm9kZSB0eXBlc1xyXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjY29tbWVudCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0VsZW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiAhIW5vZGUudGFnTmFtZTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyk7XG5cbi8vQ29udmVyc2lvbiB0YWJsZXMgZm9yIERPTSBMZXZlbDEgc3RydWN0dXJlIGVtdWxhdGlvblxudmFyIG5vZGVUeXBlcyA9IHtcbiAgICBlbGVtZW50OiAxLFxuICAgIHRleHQ6IDMsXG4gICAgY2RhdGE6IDQsXG4gICAgY29tbWVudDogOFxufTtcblxudmFyIG5vZGVQcm9wZXJ0eVNob3J0aGFuZHMgPSB7XG4gICAgdGFnTmFtZTogJ25hbWUnLFxuICAgIGNoaWxkTm9kZXM6ICdjaGlsZHJlbicsXG4gICAgcGFyZW50Tm9kZTogJ3BhcmVudCcsXG4gICAgcHJldmlvdXNTaWJsaW5nOiAncHJldicsXG4gICAgbmV4dFNpYmxpbmc6ICduZXh0JyxcbiAgICBub2RlVmFsdWU6ICdkYXRhJ1xufTtcblxuLy9Ob2RlXG52YXIgTm9kZSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxufTtcblxuTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiAmJiBjaGlsZHJlblswXSB8fCBudWxsO1xuICAgIH0sXG5cbiAgICBnZXQgbGFzdENoaWxkKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0gfHwgbnVsbDtcbiAgICB9LFxuXG4gICAgZ2V0IG5vZGVUeXBlKCkge1xuICAgICAgICByZXR1cm4gbm9kZVR5cGVzW3RoaXMudHlwZV0gfHwgbm9kZVR5cGVzLmVsZW1lbnQ7XG4gICAgfVxufTtcblxuT2JqZWN0LmtleXMobm9kZVByb3BlcnR5U2hvcnRoYW5kcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHNob3J0aGFuZCA9IG5vZGVQcm9wZXJ0eVNob3J0aGFuZHNba2V5XTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbc2hvcnRoYW5kXSB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXNbc2hvcnRoYW5kXSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuXG5cbi8vTm9kZSBjb25zdHJ1Y3Rpb25cbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPVxuZXhwb3J0cy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICdyb290JyxcbiAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH0pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcbiAgICB2YXIgYXR0cmlicyA9IHt9LFxuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlID0ge30sXG4gICAgICAgIGF0dHJpYnNQcmVmaXggPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHJOYW1lID0gYXR0cnNbaV0ubmFtZTtcblxuICAgICAgICBhdHRyaWJzW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgYXR0cmlic1ByZWZpeFthdHRyTmFtZV0gPSBhdHRyc1tpXS5wcmVmaXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBOb2RlKHtcbiAgICAgICAgdHlwZTogdGFnTmFtZSA9PT0gJ3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ3N0eWxlJyA/IHRhZ05hbWUgOiAndGFnJyxcbiAgICAgICAgbmFtZTogdGFnTmFtZSxcbiAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VVUkksXG4gICAgICAgIGF0dHJpYnM6IGF0dHJpYnMsXG4gICAgICAgICd4LWF0dHJpYnNOYW1lc3BhY2UnOiBhdHRyaWJzTmFtZXNwYWNlLFxuICAgICAgICAneC1hdHRyaWJzUHJlZml4JzogYXR0cmlic1ByZWZpeCxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG59O1xuXG52YXIgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIGRhdGE6IHZhbHVlLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICB9KTtcbn07XG5cblxuLy9UcmVlIG11dGF0aW9uXG5leHBvcnRzLnNldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uIChkb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gICAgdmFyIGRhdGEgPSBEb2N0eXBlLnNlcmlhbGl6ZUNvbnRlbnQobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSxcbiAgICAgICAgZG9jdHlwZU5vZGUgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGRyZW5baV0udHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgZG9jdW1lbnQuY2hpbGRyZW5baV0ubmFtZSA9PT0gJyFkb2N0eXBlJykge1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUgPSBkb2N1bWVudC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvY3R5cGVOb2RlKSB7XG4gICAgICAgIGRvY3R5cGVOb2RlLmRhdGEgPSBkYXRhO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1uYW1lJ10gPSBuYW1lO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddID0gcHVibGljSWQ7XG4gICAgICAgIGRvY3R5cGVOb2RlWyd4LXN5c3RlbUlkJ10gPSBzeXN0ZW1JZDtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQsIG5ldyBOb2RlKHtcbiAgICAgICAgICAgIHR5cGU6ICdkaXJlY3RpdmUnLFxuICAgICAgICAgICAgbmFtZTogJyFkb2N0eXBlJyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAneC1uYW1lJzogbmFtZSxcbiAgICAgICAgICAgICd4LXB1YmxpY0lkJzogcHVibGljSWQsXG4gICAgICAgICAgICAneC1zeXN0ZW1JZCc6IHN5c3RlbUlkXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbn07XG5cbmV4cG9ydHMuc2V0UXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICAgIGRvY3VtZW50LnF1aXJrc01vZGUgPSB0cnVlO1xufTtcblxuZXhwb3J0cy5pc1F1aXJrc01vZGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzTW9kZTtcbn07XG5cbnZhciBhcHBlbmRDaGlsZCA9IGV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xuICAgIHZhciBwcmV2ID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2gobmV3Tm9kZSk7XG4gICAgbmV3Tm9kZS5wYXJlbnQgPSBwYXJlbnROb2RlO1xufTtcblxudmFyIGluc2VydEJlZm9yZSA9IGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICB2YXIgaW5zZXJ0aW9uSWR4ID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pbmRleE9mKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICBwcmV2ID0gcmVmZXJlbmNlTm9kZS5wcmV2O1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICByZWZlcmVuY2VOb2RlLnByZXYgPSBuZXdOb2RlO1xuICAgIG5ld05vZGUubmV4dCA9IHJlZmVyZW5jZU5vZGU7XG5cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xuICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbn07XG5cbmV4cG9ydHMuZGV0YWNoTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50KSB7XG4gICAgICAgIHZhciBpZHggPSBub2RlLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKG5vZGUpLFxuICAgICAgICAgICAgcHJldiA9IG5vZGUucHJldixcbiAgICAgICAgICAgIG5leHQgPSBub2RlLm5leHQ7XG5cbiAgICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcblxuICAgICAgICBpZiAocHJldilcbiAgICAgICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG5cbiAgICAgICAgaWYgKG5leHQpXG4gICAgICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xuXG4gICAgICAgIG5vZGUucGFyZW50LmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xuICAgICAgICBub2RlLnBhcmVudCA9IG51bGw7XG4gICAgfVxufTtcblxuZXhwb3J0cy5pbnNlcnRUZXh0ID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIHRleHQpIHtcbiAgICB2YXIgbGFzdENoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQudHlwZSA9PT0gJ3RleHQnKVxuICAgICAgICBsYXN0Q2hpbGQuZGF0YSArPSB0ZXh0O1xuICAgIGVsc2VcbiAgICAgICAgYXBwZW5kQ2hpbGQocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xufTtcblxuZXhwb3J0cy5pbnNlcnRUZXh0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIHRleHQsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkcmVuW3BhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKSAtIDFdO1xuXG4gICAgaWYgKHByZXZOb2RlICYmIHByZXZOb2RlLnR5cGUgPT09ICd0ZXh0JylcbiAgICAgICAgcHJldk5vZGUuZGF0YSArPSB0ZXh0O1xuICAgIGVsc2VcbiAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcbn07XG5cbmV4cG9ydHMuYWRvcHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHJlY2lwaWVudE5vZGUsIGF0dHJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyc1tpXS5uYW1lO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcmVjaXBpZW50Tm9kZS5hdHRyaWJzW2F0dHJOYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGUuYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGVbJ3gtYXR0cmlic05hbWVzcGFjZSddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGVbJ3gtYXR0cmlic1ByZWZpeCddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnByZWZpeDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLy9UcmVlIHRyYXZlcnNpbmdcbmV4cG9ydHMuZ2V0Rmlyc3RDaGlsZCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW5bMF07XG59O1xuXG5leHBvcnRzLmdldENoaWxkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuO1xufTtcblxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnQ7XG59O1xuXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0ckxpc3QgPSBbXTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZS5hdHRyaWJzKSB7XG4gICAgICAgIGlmIChub2RlLmF0dHJpYnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIGF0dHJMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUuYXR0cmlic1tuYW1lXSxcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5vZGVbJ3gtYXR0cmlic05hbWVzcGFjZSddW25hbWVdLFxuICAgICAgICAgICAgICAgIHByZWZpeDogbm9kZVsneC1hdHRyaWJzUHJlZml4J11bbmFtZV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJMaXN0O1xufTtcblxuXG4vL05vZGUgZGF0YVxuZXhwb3J0cy5nZXRUYWdOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lO1xufTtcblxuZXhwb3J0cy5nZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZTtcbn07XG5cbmV4cG9ydHMuZ2V0VGV4dE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKHRleHROb2RlKSB7XG4gICAgcmV0dXJuIHRleHROb2RlLmRhdGE7XG59O1xuXG5leHBvcnRzLmdldENvbW1lbnROb2RlQ29udGVudCA9IGZ1bmN0aW9uIChjb21tZW50Tm9kZSkge1xuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1uYW1lJ107XG59O1xuXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtc3lzdGVtSWQnXTtcbn07XG5cblxuLy9Ob2RlIHR5cGVzXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICd0ZXh0Jztcbn07XG5cbmV4cG9ydHMuaXNDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2NvbW1lbnQnO1xufTtcblxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdkaXJlY3RpdmUnICYmIG5vZGUubmFtZSA9PT0gJyFkb2N0eXBlJztcbn07XG5cbmV4cG9ydHMuaXNFbGVtZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEhbm9kZS5hdHRyaWJzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vQ29uc3RcclxudmFyIE5PQUhfQVJLX0NBUEFDSVRZID0gMztcclxuXHJcbi8vTGlzdCBvZiBmb3JtYXR0aW5nIGVsZW1lbnRzXHJcbnZhciBGb3JtYXR0aW5nRWxlbWVudExpc3QgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0cmVlQWRhcHRlcikge1xyXG4gICAgdGhpcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5lbnRyaWVzID0gW107XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbiAgICB0aGlzLmJvb2ttYXJrID0gbnVsbDtcclxufTtcclxuXHJcbi8vRW50cnkgdHlwZXNcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSA9ICdNQVJLRVJfRU5UUlknO1xyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSA9ICdFTEVNRU5UX0VOVFJZJztcclxuXHJcbi8vTm9haCBBcmsncyBjb25kaXRpb25cclxuLy9PUFRJTUlaQVRJT046IGF0IGZpcnN0IHdlIHRyeSB0byBmaW5kIHBvc3NpYmxlIGNhbmRpZGF0ZXMgZm9yIGV4Y2x1c2lvbiB1c2luZ1xyXG4vL2xpZ2h0d2VpZ2h0IGhldXJpc3RpY3Mgd2l0aG91dCB0aG9yb3VnaCBhdHRyaWJ1dGVzIGNoZWNrLlxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyA9IGZ1bmN0aW9uIChuZXdFbGVtZW50KSB7XHJcbiAgICB2YXIgY2FuZGlkYXRlcyA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmxlbmd0aCA+PSBOT0FIX0FSS19DQVBBQ0lUWSkge1xyXG4gICAgICAgIHZhciBuZUF0dHJzTGVuZ3RoID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChuZXdFbGVtZW50KS5sZW5ndGgsXHJcbiAgICAgICAgICAgIG5lVGFnTmFtZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShuZXdFbGVtZW50KSxcclxuICAgICAgICAgICAgbmVOYW1lc3BhY2VVUkkgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShuZXdFbGVtZW50KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZW50cnkuZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QoZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSBuZVRhZ05hbWUgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpID09PSBuZU5hbWVzcGFjZVVSSSAmJlxyXG4gICAgICAgICAgICAgICAgZWxlbWVudEF0dHJzLmxlbmd0aCA9PT0gbmVBdHRyc0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHtpZHg6IGksIGF0dHJzOiBlbGVtZW50QXR0cnN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FuZGlkYXRlcy5sZW5ndGggPCBOT0FIX0FSS19DQVBBQ0lUWSA/IFtdIDogY2FuZGlkYXRlcztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuX2Vuc3VyZU5vYWhBcmtDb25kaXRpb24gPSBmdW5jdGlvbiAobmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGNhbmRpZGF0ZXMgPSB0aGlzLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyhuZXdFbGVtZW50KSxcclxuICAgICAgICBjTGVuZ3RoID0gY2FuZGlkYXRlcy5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGNMZW5ndGgpIHtcclxuICAgICAgICB2YXIgbmVBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCksXHJcbiAgICAgICAgICAgIG5lQXR0cnNMZW5ndGggPSBuZUF0dHJzLmxlbmd0aCxcclxuICAgICAgICAgICAgbmVBdHRyc01hcCA9IHt9O1xyXG5cclxuICAgICAgICAvL05PVEU6IGJ1aWxkIGF0dHJzIG1hcCBmb3IgdGhlIG5ldyBlbGVtZW50IHNvIHdlIGNhbiBwZXJmb3JtIGZhc3QgbG9va3Vwc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmVBdHRyc0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuZUF0dHIgPSBuZUF0dHJzW2ldO1xyXG5cclxuICAgICAgICAgICAgbmVBdHRyc01hcFtuZUF0dHIubmFtZV0gPSBuZUF0dHIudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lQXR0cnNMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNMZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNBdHRyID0gY2FuZGlkYXRlc1tqXS5hdHRyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmVBdHRyc01hcFtjQXR0ci5uYW1lXSAhPT0gY0F0dHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnNwbGljZShqLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBjTGVuZ3RoLS07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL05PVEU6IHJlbW92ZSBib3R0b21tb3N0IGNhbmRpZGF0ZXMgdW50aWwgTm9haCdzIEFyayBjb25kaXRpb24gd2lsbCBub3QgYmUgbWV0XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGNMZW5ndGggLSAxOyBpID49IE5PQUhfQVJLX0NBUEFDSVRZIC0gMTsgaS0tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoY2FuZGlkYXRlc1tpXS5pZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vTXV0YXRpb25zXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuaW5zZXJ0TWFya2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe3R5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUll9KTtcclxuICAgIHRoaXMubGVuZ3RoKys7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLnB1c2hFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHRva2VuKSB7XHJcbiAgICB0aGlzLl9lbnN1cmVOb2FoQXJrQ29uZGl0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcclxuICAgICAgICB0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSxcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIHRva2VuOiB0b2tlblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sZW5ndGgrKztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuaW5zZXJ0RWxlbWVudEFmdGVyQm9va21hcmsgPSBmdW5jdGlvbiAoZWxlbWVudCwgdG9rZW4pIHtcclxuICAgIHZhciBib29rbWFya0lkeCA9IHRoaXMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICBmb3IgKDsgYm9va21hcmtJZHggPj0gMDsgYm9va21hcmtJZHgtLSkge1xyXG4gICAgICAgIGlmICh0aGlzLmVudHJpZXNbYm9va21hcmtJZHhdID09PSB0aGlzLmJvb2ttYXJrKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGJvb2ttYXJrSWR4ICsgMSwgMCwge1xyXG4gICAgICAgIHR5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZLFxyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgdG9rZW46IHRva2VuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxlbmd0aCsrO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5yZW1vdmVFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRyaWVzW2ldID09PSBlbnRyeSkge1xyXG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmNsZWFyVG9MYXN0TWFya2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzLnBvcCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1NlYXJjaFxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVudHJ5LmVsZW1lbnQpID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmdldEVsZW1lbnRFbnRyeSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZICYmIGVudHJ5LmVsZW1lbnQgPT0gZWxlbWVudClcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBPcGVuRWxlbWVudFN0YWNrID0gcmVxdWlyZSgnLi9vcGVuX2VsZW1lbnRfc3RhY2snKSxcbiAgICBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTO1xuXG5cbmZ1bmN0aW9uIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIGVuZFRhZ1Rva2VuKSB7XG4gICAgaWYgKGVsZW1lbnQuX19sb2NhdGlvbilcbiAgICAgICAgZWxlbWVudC5fX2xvY2F0aW9uLmVuZCA9IGVuZFRhZ1Rva2VuLmxvY2F0aW9uLmVuZDtcbn1cblxuLy9OT1RFOiBwYXRjaCBvcGVuIGVsZW1lbnRzIHN0YWNrLCBzbyB3ZSBjYW4gYXNzaWduIGVuZCBsb2NhdGlvbiBmb3IgdGhlIGVsZW1lbnRzXG5mdW5jdGlvbiBwYXRjaE9wZW5FbGVtZW50c1N0YWNrKHN0YWNrLCBwYXJzZXIpIHtcbiAgICBzdGFjay5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldEVuZExvY2F0aW9uKHRoaXMuY3VycmVudCwgcGFyc2VyLmN1cnJlbnRUb2tlbik7XG4gICAgICAgIE9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcC5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICBzdGFjay5wb3BBbGxVcFRvSHRtbEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID4gMDsgaS0tKVxuICAgICAgICAgICAgc2V0RW5kTG9jYXRpb24odGhpcy5pdGVtc1tpXSwgcGFyc2VyLmN1cnJlbnRUb2tlbik7XG5cbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wQWxsVXBUb0h0bWxFbGVtZW50LmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIHN0YWNrLnJlbW92ZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIHBhcnNlci5jdXJyZW50VG9rZW4pO1xuICAgICAgICBPcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLCBlbGVtZW50KTtcbiAgICB9O1xufVxuXG5leHBvcnRzLmFzc2lnbiA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcbiAgICAvL05PVEU6IG9idGFpbiBQYXJzZXIgcHJvdG8gdGhpcyB3YXkgdG8gYXZvaWQgbW9kdWxlIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgICB2YXIgcGFyc2VyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyc2VyKTtcblxuICAgIC8vTk9URTogcGF0Y2ggX3Jlc2V0IG1ldGhvZFxuICAgIHBhcnNlci5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCkge1xuICAgICAgICBwYXJzZXJQcm90by5fcmVzZXQuY2FsbCh0aGlzLCBodG1sLCBkb2N1bWVudCwgZnJhZ21lbnRDb250ZXh0KTtcblxuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcblxuICAgICAgICBwYXRjaE9wZW5FbGVtZW50c1N0YWNrKHRoaXMub3BlbkVsZW1lbnRzLCBwYXJzZXIpO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX3Byb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0b2tlbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX3Byb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQuY2FsbCh0aGlzLCB0b2tlbik7XG4gICAgfTtcblxuICAgIHBhcnNlci5fcHJvY2Vzc1Rva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XG4gICAgICAgIHBhcnNlclByb3RvLl9wcm9jZXNzVG9rZW4uY2FsbCh0aGlzLCB0b2tlbik7XG5cbiAgICAgICAgLy9OT1RFOiA8Ym9keT4gYW5kIDxodG1sPiBhcmUgbmV2ZXIgcG9wcGVkIGZyb20gdGhlIHN0YWNrLCBzbyB3ZSBuZWVkIHRvIHVwZGF0ZWRcbiAgICAgICAgLy90aGVpciBlbmQgbG9jYXRpb24gZXhwbGljaXRseS5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOICYmXG4gICAgICAgICAgICAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MIHx8XG4gICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuQk9EWSAmJiB0aGlzLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQk9EWSkpKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0b2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vRG9jdHlwZVxuICAgIHBhcnNlci5fc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9zZXREb2N1bWVudFR5cGUuY2FsbCh0aGlzLCB0b2tlbik7XG5cbiAgICAgICAgdmFyIGRvY3VtZW50Q2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5kb2N1bWVudCksXG4gICAgICAgICAgICBjbkxlbmd0aCA9IGRvY3VtZW50Q2hpbGRyZW4ubGVuZ3RoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY25MZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudENoaWxkcmVuW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBub2RlLl9fbG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvL0VsZW1lbnRzXG4gICAgcGFyc2VyLl9hdHRhY2hFbGVtZW50VG9UcmVlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgLy9OT1RFOiBfYXR0YWNoRWxlbWVudFRvVHJlZSBpcyBjYWxsZWQgZnJvbSBfYXBwZW5kRWxlbWVudCwgX2luc2VydEVsZW1lbnQgYW5kIF9pbnNlcnRUZW1wbGF0ZSBtZXRob2RzLlxuICAgICAgICAvL1NvIHdlIHdpbGwgdXNlIHRva2VuIGxvY2F0aW9uIHN0b3JlZCBpbiB0aGlzIG1ldGhvZHMgZm9yIHRoZSBlbGVtZW50LlxuICAgICAgICBlbGVtZW50Ll9fbG9jYXRpb24gPSB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gfHwgbnVsbDtcbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2F0dGFjaEVsZW1lbnRUb1RyZWUuY2FsbCh0aGlzLCBlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9hcHBlbmRFbGVtZW50ID0gZnVuY3Rpb24gKHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgICAgIHBhcnNlclByb3RvLl9hcHBlbmRFbGVtZW50LmNhbGwodGhpcywgdG9rZW4sIG5hbWVzcGFjZVVSSSk7XG4gICAgfTtcblxuICAgIHBhcnNlci5faW5zZXJ0RWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgICAgICBwYXJzZXJQcm90by5faW5zZXJ0RWxlbWVudC5jYWxsKHRoaXMsIHRva2VuLCBuYW1lc3BhY2VVUkkpO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX2luc2VydFRlbXBsYXRlID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgICAgICBwYXJzZXJQcm90by5faW5zZXJ0VGVtcGxhdGUuY2FsbCh0aGlzLCB0b2tlbik7XG5cbiAgICAgICAgdmFyIHRtcGxDb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQpWzBdO1xuXG4gICAgICAgIHRtcGxDb250ZW50Ll9fbG9jYXRpb24gPSBudWxsO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX2luc2VydEZha2VSb290RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydEZha2VSb290RWxlbWVudC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50Ll9fbG9jYXRpb24gPSBudWxsO1xuICAgIH07XG5cbiAgICAvL0NvbW1lbnRzXG4gICAgcGFyc2VyLl9hcHBlbmRDb21tZW50Tm9kZSA9IGZ1bmN0aW9uICh0b2tlbiwgcGFyZW50KSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9hcHBlbmRDb21tZW50Tm9kZS5jYWxsKHRoaXMsIHRva2VuLCBwYXJlbnQpO1xuXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2RlcyhwYXJlbnQpLFxuICAgICAgICAgICAgY29tbWVudE5vZGUgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcblxuICAgICAgICBjb21tZW50Tm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgfTtcblxuICAgIC8vVGV4dFxuICAgIHBhcnNlci5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvL05PVEU6IHN0b3JlIGxhc3QgZm9zdGVyIHBhcmVudGluZyBsb2NhdGlvbiwgc28gd2Ugd2lsbCBiZSBhYmxlIHRvIGZpbmQgaW5zZXJ0ZWQgdGV4dFxuICAgICAgICAvL2luIGNhc2Ugb2YgZm9zdGVyIHBhcmVudGluZ1xuICAgICAgICB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IHBhcnNlclByb3RvLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24uY2FsbCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdEZvc3RlclBhcmVudGluZ0xvY2F0aW9uO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX2luc2VydENoYXJhY3RlcnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydENoYXJhY3RlcnMuY2FsbCh0aGlzLCB0b2tlbik7XG5cbiAgICAgICAgdmFyIGhhc0Zvc3RlclBhcmVudCA9IHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCksXG4gICAgICAgICAgICBwYXJlbnRpbmdMb2NhdGlvbiA9IHRoaXMubGFzdEZvc3RlclBhcmVudGluZ0xvY2F0aW9uLFxuICAgICAgICAgICAgcGFyZW50ID0gKGhhc0Zvc3RlclBhcmVudCAmJiBwYXJlbnRpbmdMb2NhdGlvbi5wYXJlbnQpIHx8XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsXG4gICAgICAgICAgICBzaWJsaW5ncyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2RlcyhwYXJlbnQpLFxuICAgICAgICAgICAgdGV4dE5vZGVJZHggPSBoYXNGb3N0ZXJQYXJlbnQgJiYgcGFyZW50aW5nTG9jYXRpb24uYmVmb3JlRWxlbWVudCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLmluZGV4T2YocGFyZW50aW5nTG9jYXRpb24uYmVmb3JlRWxlbWVudCkgLSAxIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZ3MubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIHRleHROb2RlID0gc2libGluZ3NbdGV4dE5vZGVJZHhdO1xuXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBsb2NhdGlvbiBhc3NpZ25lZCBieSBhbm90aGVyIHRva2VuLCB0aGVuIGp1c3QgdXBkYXRlIGVuZCBwb3NpdGlvblxuICAgICAgICBpZiAodGV4dE5vZGUuX19sb2NhdGlvbilcbiAgICAgICAgICAgIHRleHROb2RlLl9fbG9jYXRpb24uZW5kID0gdG9rZW4ubG9jYXRpb24uZW5kO1xuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRleHROb2RlLl9fbG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICB9O1xufTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIEhUTUwgPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVMsXHJcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUztcclxuXHJcbi8vRWxlbWVudCB1dGlsc1xyXG5cclxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxyXG4vL0l0J3MgZmFzdGVyIHRoYW4gdXNpbmcgZGljdGlvbmFyeS5cclxuZnVuY3Rpb24gaXNJbXBsaWVkRW5kVGFnUmVxdWlyZWQodG4pIHtcclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuUDtcclxuXHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuUlAgfHwgdG4gPT09ICQuUlQgfHwgdG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQgfHwgdG4gPT09ICQuTEk7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVElPTjtcclxuXHJcbiAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuT1BUR1JPVVA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykge1xyXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USClcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1JIHx8IHRuID09PSAkLk1PIHx8IHRuID09ICQuTU4gfHwgdG4gPT09ICQuTVMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTDtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuREVTQylcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlRBQkxFKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTVRFWFQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRJVExFKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5TVkc7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICByZXR1cm4gKHRuID09PSAkLkFQUExFVCB8fCB0biA9PT0gJC5PQkpFQ1QpICYmIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICBjYXNlIDc6XHJcbiAgICAgICAgICAgIHJldHVybiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5NQVJRVUVFKSAmJiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5GT1JFSUdOX09CSkVDVCAmJiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuQU5OT1RBVElPTl9YTUwgJiYgbnMgPT09IE5TLk1BVEhNTDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8vU3RhY2sgb2Ygb3BlbiBlbGVtZW50c1xyXG52YXIgT3BlbkVsZW1lbnRTdGFjayA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvY3VtZW50LCB0cmVlQWRhcHRlcikge1xyXG4gICAgdGhpcy5zdGFja1RvcCA9IC0xO1xyXG4gICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gZG9jdW1lbnQ7XHJcbiAgICB0aGlzLmN1cnJlbnRUYWdOYW1lID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFRtcGxDb250ZW50ID0gbnVsbDtcclxuICAgIHRoaXMudG1wbENvdW50ID0gMDtcclxuICAgIHRoaXMudHJlZUFkYXB0ZXIgPSB0cmVlQWRhcHRlcjtcclxufTtcclxuXHJcbi8vSW5kZXggb2YgZWxlbWVudFxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5faW5kZXhPZiA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB2YXIgaWR4ID0gLTE7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNbaV0gPT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWR4ID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkeDtcclxufTtcclxuXHJcbi8vVXBkYXRlIGN1cnJlbnQgZWxlbWVudFxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5faXNJblRlbXBsYXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLmN1cnJlbnQpID09PSBOUy5IVE1MO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX3VwZGF0ZUN1cnJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5pdGVtc1t0aGlzLnN0YWNrVG9wXTtcclxuICAgIHRoaXMuY3VycmVudFRhZ05hbWUgPSB0aGlzLmN1cnJlbnQgJiYgdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuY3VycmVudCk7XHJcblxyXG4gICAgdGhpcy5jdXJyZW50VG1wbENvbnRlbnQgPSB0aGlzLl9pc0luVGVtcGxhdGUoKSA/IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyh0aGlzLmN1cnJlbnQpWzBdIDogbnVsbDtcclxufTtcclxuXHJcbi8vTXV0YXRpb25zXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdGhpcy5pdGVtc1srK3RoaXMuc3RhY2tUb3BdID0gZWxlbWVudDtcclxuICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzSW5UZW1wbGF0ZSgpKVxyXG4gICAgICAgIHRoaXMudG1wbENvdW50Kys7XHJcblxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5zdGFja1RvcC0tO1xyXG5cclxuICAgIGlmICh0aGlzLnRtcGxDb3VudCA+IDAgJiYgdGhpcy5faXNJblRlbXBsYXRlKCkpXHJcbiAgICAgICAgdGhpcy50bXBsQ291bnQtLTtcclxuXHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIChvbGRFbGVtZW50LCBuZXdFbGVtZW50KSB7XHJcbiAgICB2YXIgaWR4ID0gdGhpcy5faW5kZXhPZihvbGRFbGVtZW50KTtcclxuICAgIHRoaXMuaXRlbXNbaWR4XSA9IG5ld0VsZW1lbnQ7XHJcblxyXG4gICAgaWYgKGlkeCA9PT0gdGhpcy5zdGFja1RvcClcclxuICAgICAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXIgPSBmdW5jdGlvbiAocmVmZXJlbmNlRWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGluc2VydGlvbklkeCA9IHRoaXMuX2luZGV4T2YocmVmZXJlbmNlRWxlbWVudCkgKyAxO1xyXG5cclxuICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3RWxlbWVudCk7XHJcblxyXG4gICAgaWYgKGluc2VydGlvbklkeCA9PSArK3RoaXMuc3RhY2tUb3ApXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsVGFnTmFtZVBvcHBlZCA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsVGVtcGxhdGVQb3BwZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZSxcclxuICAgICAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLmN1cnJlbnQpO1xyXG5cclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wVW50aWxFbGVtZW50UG9wcGVkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHdoaWxlICh0aGlzLnN0YWNrVG9wID4gLTEpIHtcclxuICAgICAgICB2YXIgcG9wcGVkRWxlbWVudCA9IHRoaXMuY3VycmVudDtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHBvcHBlZEVsZW1lbnQgPT09IGVsZW1lbnQpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wVW50aWxOdW1iZXJlZEhlYWRlclBvcHBlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLnN0YWNrVG9wID4gLTEpIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLmN1cnJlbnRUYWdOYW1lO1xyXG5cclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wQWxsVXBUb0h0bWxFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLy9OT1RFOiBoZXJlIHdlIGFzc3VtZSB0aGF0IHJvb3QgPGh0bWw+IGVsZW1lbnQgaXMgYWx3YXlzIGZpcnN0IGluIHRoZSBvcGVuIGVsZW1lbnQgc3RhY2ssIHNvXHJcbiAgICAvL3dlIHBlcmZvcm0gdGhpcyBmYXN0IHN0YWNrIGNsZWFuIHVwLlxyXG4gICAgdGhpcy5zdGFja1RvcCA9IDA7XHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5UQUJMRSAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTClcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEJPRFkgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URk9PVCAmJlxyXG4gICAgICAgICAgIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEhFQUQgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URU1QTEFURSAmJlxyXG4gICAgICAgICAgIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTCkge1xyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRSICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5IVE1MKVxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNbaV0gPT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhY2tUb3AtLTtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLy9TZWFyY2hcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAvL1Byb3Blcmx5IG5lc3RlZCA8Ym9keT4gZWxlbWVudCAoc2hvdWxkIGJlIHNlY29uZCBlbGVtZW50IGluIHN0YWNrKS5cclxuICAgIHZhciBlbGVtZW50ID0gdGhpcy5pdGVtc1sxXTtcclxuICAgIHJldHVybiBlbGVtZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gJC5CT0RZID8gZWxlbWVudCA6IG51bGw7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5kZXhPZihlbGVtZW50KSA+IC0xO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2V0Q29tbW9uQW5jZXN0b3IgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIGVsZW1lbnRJZHggPSB0aGlzLl9pbmRleE9mKGVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiAtLWVsZW1lbnRJZHggPj0gMCA/IHRoaXMuaXRlbXNbZWxlbWVudElkeF0gOiBudWxsO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaXNSb290SHRtbEVsZW1lbnRDdXJyZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tUb3AgPT09IDAgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSA9PT0gJC5IVE1MO1xyXG59O1xyXG5cclxuLy9FbGVtZW50IGluIHNjb3BlXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luU2NvcGUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKGlzU2NvcGluZ0VsZW1lbnQodG4sIG5zKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoaXNTY29waW5nRWxlbWVudCh0biwgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSkpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJbkxpc3RJdGVtU2NvcGUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCgodG4gPT09ICQuVUwgfHwgdG4gPT09ICQuT0wpICYmIG5zID09PSBOUy5IVE1MKSB8fCBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luQnV0dG9uU2NvcGUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCh0biA9PT0gJC5CVVRUT04gJiYgbnMgPT09IE5TLkhUTUwpIHx8IGlzU2NvcGluZ0VsZW1lbnQodG4sIG5zKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5UYWJsZVNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgodG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuSFRNTCkgJiYgbnMgPT09IE5TLkhUTUwpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5URk9PVClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAoKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLkhUTUwpICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJblNlbGVjdFNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biAhPT0gJC5PUFRJT04gJiYgdG4gIT09ICQuT1BUR1JPVVAgJiYgbnMgPT09IE5TLkhUTUwpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8vSW1wbGllZCBlbmQgdGFnc1xyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRoaXMuY3VycmVudFRhZ05hbWUpKVxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbiA9IGZ1bmN0aW9uIChleGNsdXNpb25UYWdOYW1lKSB7XHJcbiAgICB3aGlsZSAoaXNJbXBsaWVkRW5kVGFnUmVxdWlyZWQodGhpcy5jdXJyZW50VGFnTmFtZSkgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gZXhjbHVzaW9uVGFnTmFtZSlcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXG4gICAgT3BlbkVsZW1lbnRTdGFjayA9IHJlcXVpcmUoJy4vb3Blbl9lbGVtZW50X3N0YWNrJyksXG4gICAgRm9ybWF0dGluZ0VsZW1lbnRMaXN0ID0gcmVxdWlyZSgnLi9mb3JtYXR0aW5nX2VsZW1lbnRfbGlzdCcpLFxuICAgIExvY2F0aW9uSW5mb01peGluID0gcmVxdWlyZSgnLi9sb2NhdGlvbl9pbmZvX21peGluJyksXG4gICAgRGVmYXVsdFRyZWVBZGFwdGVyID0gcmVxdWlyZSgnLi4vdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXG4gICAgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyksXG4gICAgRm9yZWlnbkNvbnRlbnQgPSByZXF1aXJlKCcuLi9jb21tb24vZm9yZWlnbl9jb250ZW50JyksXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKSxcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTLFxuICAgIEFUVFJTID0gSFRNTC5BVFRSUztcblxuLy9EZWZhdWx0IG9wdGlvbnNcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgZGVjb2RlSHRtbEVudGl0aWVzOiB0cnVlLFxuICAgIGxvY2F0aW9uSW5mbzogZmFsc2Vcbn07XG5cbi8vTWlzYyBjb25zdGFudHNcbnZhciBTRUFSQ0hBQkxFX0lOREVYX0RFRkFVTFRfUFJPTVBUID0gJ1RoaXMgaXMgYSBzZWFyY2hhYmxlIGluZGV4LiBFbnRlciBzZWFyY2gga2V5d29yZHM6ICcsXG4gICAgU0VBUkNIQUJMRV9JTkRFWF9JTlBVVF9OQU1FID0gJ2lzaW5kZXgnLFxuICAgIEhJRERFTl9JTlBVVF9UWVBFID0gJ2hpZGRlbic7XG5cbi8vQWRvcHRpb24gYWdlbmN5IGxvb3BzIGl0ZXJhdGlvbiBjb3VudFxudmFyIEFBX09VVEVSX0xPT1BfSVRFUiA9IDgsXG4gICAgQUFfSU5ORVJfTE9PUF9JVEVSID0gMztcblxuLy9JbnNlcnRpb24gbW9kZXNcbnZhciBJTklUSUFMX01PREUgPSAnSU5JVElBTF9NT0RFJyxcbiAgICBCRUZPUkVfSFRNTF9NT0RFID0gJ0JFRk9SRV9IVE1MX01PREUnLFxuICAgIEJFRk9SRV9IRUFEX01PREUgPSAnQkVGT1JFX0hFQURfTU9ERScsXG4gICAgSU5fSEVBRF9NT0RFID0gJ0lOX0hFQURfTU9ERScsXG4gICAgQUZURVJfSEVBRF9NT0RFID0gJ0FGVEVSX0hFQURfTU9ERScsXG4gICAgSU5fQk9EWV9NT0RFID0gJ0lOX0JPRFlfTU9ERScsXG4gICAgVEVYVF9NT0RFID0gJ1RFWFRfTU9ERScsXG4gICAgSU5fVEFCTEVfTU9ERSA9ICdJTl9UQUJMRV9NT0RFJyxcbiAgICBJTl9UQUJMRV9URVhUX01PREUgPSAnSU5fVEFCTEVfVEVYVF9NT0RFJyxcbiAgICBJTl9DQVBUSU9OX01PREUgPSAnSU5fQ0FQVElPTl9NT0RFJyxcbiAgICBJTl9DT0xVTU5fR1JPVVBfTU9ERSA9ICdJTl9DT0xVTU5fR1JPVVBfTU9ERScsXG4gICAgSU5fVEFCTEVfQk9EWV9NT0RFID0gJ0lOX1RBQkxFX0JPRFlfTU9ERScsXG4gICAgSU5fUk9XX01PREUgPSAnSU5fUk9XX01PREUnLFxuICAgIElOX0NFTExfTU9ERSA9ICdJTl9DRUxMX01PREUnLFxuICAgIElOX1NFTEVDVF9NT0RFID0gJ0lOX1NFTEVDVF9NT0RFJyxcbiAgICBJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERSA9ICdJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERScsXG4gICAgSU5fVEVNUExBVEVfTU9ERSA9ICdJTl9URU1QTEFURV9NT0RFJyxcbiAgICBBRlRFUl9CT0RZX01PREUgPSAnQUZURVJfQk9EWV9NT0RFJyxcbiAgICBJTl9GUkFNRVNFVF9NT0RFID0gJ0lOX0ZSQU1FU0VUX01PREUnLFxuICAgIEFGVEVSX0ZSQU1FU0VUX01PREUgPSAnQUZURVJfRlJBTUVTRVRfTU9ERScsXG4gICAgQUZURVJfQUZURVJfQk9EWV9NT0RFID0gJ0FGVEVSX0FGVEVSX0JPRFlfTU9ERScsXG4gICAgQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERSA9ICdBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFJztcblxuLy9JbnNlcnRpb24gbW9kZSByZXNldCBtYXBcbnZhciBJTlNFUlRJT05fTU9ERV9SRVNFVF9NQVAgPSB7fTtcblxuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVFJdID0gSU5fUk9XX01PREU7XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5UQk9EWV0gPVxuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEhFQURdID1cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRGT09UXSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkNBUFRJT05dID0gSU5fQ0FQVElPTl9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuQ09MR1JPVVBdID0gSU5fQ09MVU1OX0dST1VQX01PREU7XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5UQUJMRV0gPSBJTl9UQUJMRV9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuQk9EWV0gPSBJTl9CT0RZX01PREU7XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5GUkFNRVNFVF0gPSBJTl9GUkFNRVNFVF9NT0RFO1xuXG4vL1RlbXBsYXRlIGluc2VydGlvbiBtb2RlIHN3aXRjaCBtYXBcbnZhciBURU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQID0ge307XG5cblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5DQVBUSU9OXSA9XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ09MR1JPVVBdID1cblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5UQk9EWV0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRGT09UXSA9XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEhFQURdID0gSU5fVEFCTEVfTU9ERTtcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5DT0xdID0gSU5fQ09MVU1OX0dST1VQX01PREU7XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVFJdID0gSU5fVEFCTEVfQk9EWV9NT0RFO1xuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlREXSA9XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEhdID0gSU5fUk9XX01PREU7XG5cbi8vVG9rZW4gaGFuZGxlcnMgbWFwIGZvciBpbnNlcnRpb24gbW9kZXNcbnZhciBfID0ge307XG5cbl9bSU5JVElBTF9NT0RFXSA9IHt9O1xuX1tJTklUSUFMX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5JbkluaXRpYWxNb2RlO1xuX1tJTklUSUFMX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTklUSUFMX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGRvY3R5cGVJbkluaXRpYWxNb2RlO1xuX1tJTklUSUFMX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID1cbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPVxuX1tJTklUSUFMX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5JbkluaXRpYWxNb2RlO1xuXG5fW0JFRk9SRV9IVE1MX01PREVdID0ge307XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuQmVmb3JlSHRtbDtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0JlZm9yZUh0bWw7XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0JlZm9yZUh0bWw7XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5CZWZvcmVIdG1sO1xuXG5fW0JFRk9SRV9IRUFEX01PREVdID0ge307XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuQmVmb3JlSGVhZDtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0JlZm9yZUhlYWQ7XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0JlZm9yZUhlYWQ7XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5CZWZvcmVIZWFkO1xuXG5fW0lOX0hFQURfTU9ERV0gPSB7fTtcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuSW5IZWFkO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luSGVhZDtcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkhlYWQ7XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkluSGVhZDtcblxuX1tBRlRFUl9IRUFEX01PREVdID0ge307XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkFmdGVySGVhZDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckhlYWQ7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJIZWFkO1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5BZnRlckhlYWQ7XG5cbl9bSU5fQk9EWV9NT0RFXSA9IHt9O1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5Cb2R5O1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkJvZHk7XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Cb2R5O1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW1RFWFRfTU9ERV0gPSB7fTtcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID1cbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UZXh0O1xuX1tURVhUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5UZXh0O1xuXG5fW0lOX1RBQkxFX01PREVdID0ge307XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luVGFibGU7XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGFibGU7XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW0lOX1RBQkxFX1RFWFRfTU9ERV0gPSB7fTtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluVGFibGVUZXh0O1xuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluVGFibGVUZXh0O1xuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID1cbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID1cbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuSW5UYWJsZVRleHQ7XG5cbl9bSU5fQ0FQVElPTl9NT0RFXSA9IHt9O1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5Cb2R5O1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkNhcHRpb247XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5DYXB0aW9uO1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXSA9IHt9O1xuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuSW5Db2x1bW5Hcm91cDtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQ29sdW1uR3JvdXA7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkNvbHVtbkdyb3VwO1xuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fVEFCTEVfQk9EWV9NT0RFXSA9IHt9O1xuX1tJTl9UQUJMRV9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZTtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9UQUJMRV9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9UQUJMRV9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRhYmxlQm9keTtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRhYmxlQm9keTtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9ST1dfTU9ERV0gPSB7fTtcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluVGFibGU7XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5Sb3c7XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblJvdztcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW0lOX0NFTExfTU9ERV0gPSB7fTtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5DZWxsO1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQ2VsbDtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9TRUxFQ1RfTU9ERV0gPSB7fTtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luU2VsZWN0O1xuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5TZWxlY3Q7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERV0gPSB7fTtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luU2VsZWN0SW5UYWJsZTtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luU2VsZWN0SW5UYWJsZTtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW0lOX1RFTVBMQVRFX01PREVdID0ge307XG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5Cb2R5O1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luVGVtcGxhdGU7XG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGVtcGxhdGU7XG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5UZW1wbGF0ZTtcblxuX1tBRlRFUl9CT0RZX01PREVdID0ge307XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkFmdGVyQm9keTtcbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50VG9Sb290SHRtbEVsZW1lbnQ7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyQm9keTtcbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdBZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcblxuX1tJTl9GUkFNRVNFVF9NT0RFXSA9IHt9O1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5GcmFtZXNldDtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5GcmFtZXNldDtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcblxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXSA9IHt9O1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJGcmFtZXNldDtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJGcmFtZXNldDtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcblxuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdID0ge307XG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkFmdGVyQWZ0ZXJCb2R5O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkFmdGVyQWZ0ZXJCb2R5O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnRUb0RvY3VtZW50O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSB0b2tlbkFmdGVyQWZ0ZXJCb2R5O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50VG9Eb2N1bWVudDtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xuXG4vL1NlYXJjaGFibGUgaW5kZXggYnVpbGRpbmcgdXRpbHMgKDxpc2luZGV4PiB0YWcpXG5mdW5jdGlvbiBnZXRTZWFyY2hhYmxlSW5kZXhGb3JtQXR0cnMoaXNpbmRleFN0YXJ0VGFnVG9rZW4pIHtcbiAgICB2YXIgaW5kZXhBY3Rpb24gPSBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKGlzaW5kZXhTdGFydFRhZ1Rva2VuLCBBVFRSUy5BQ1RJT04pLFxuICAgICAgICBhdHRycyA9IFtdO1xuXG4gICAgaWYgKGluZGV4QWN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGF0dHJzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogQVRUUlMuQUNUSU9OLFxuICAgICAgICAgICAgdmFsdWU6IGluZGV4QWN0aW9uXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUluZGV4TGFiZWxUZXh0KGlzaW5kZXhTdGFydFRhZ1Rva2VuKSB7XG4gICAgdmFyIGluZGV4UHJvbXB0ID0gVG9rZW5pemVyLmdldFRva2VuQXR0cihpc2luZGV4U3RhcnRUYWdUb2tlbiwgQVRUUlMuUFJPTVBUKTtcblxuICAgIHJldHVybiBpbmRleFByb21wdCA9PT0gbnVsbCA/IFNFQVJDSEFCTEVfSU5ERVhfREVGQVVMVF9QUk9NUFQgOiBpbmRleFByb21wdDtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUluZGV4SW5wdXRBdHRycyhpc2luZGV4U3RhcnRUYWdUb2tlbikge1xuICAgIHZhciBpc2luZGV4QXR0cnMgPSBpc2luZGV4U3RhcnRUYWdUb2tlbi5hdHRycyxcbiAgICAgICAgaW5wdXRBdHRycyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpc2luZGV4QXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5hbWUgPSBpc2luZGV4QXR0cnNbaV0ubmFtZTtcblxuICAgICAgICBpZiAobmFtZSAhPT0gQVRUUlMuTkFNRSAmJiBuYW1lICE9PSBBVFRSUy5BQ1RJT04gJiYgbmFtZSAhPT0gQVRUUlMuUFJPTVBUKVxuICAgICAgICAgICAgaW5wdXRBdHRycy5wdXNoKGlzaW5kZXhBdHRyc1tpXSk7XG4gICAgfVxuXG4gICAgaW5wdXRBdHRycy5wdXNoKHtcbiAgICAgICAgbmFtZTogQVRUUlMuTkFNRSxcbiAgICAgICAgdmFsdWU6IFNFQVJDSEFCTEVfSU5ERVhfSU5QVVRfTkFNRVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlucHV0QXR0cnM7XG59XG5cbi8vUGFyc2VyXG52YXIgUGFyc2VyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodHJlZUFkYXB0ZXIsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXIgfHwgRGVmYXVsdFRyZWVBZGFwdGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xuICAgIHRoaXMuc2NyaXB0SGFuZGxlciA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9uSW5mbylcbiAgICAgICAgTG9jYXRpb25JbmZvTWl4aW4uYXNzaWduKHRoaXMpO1xufTtcblxuLy9BUElcblBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnQoKTtcblxuICAgIHRoaXMuX3Jlc2V0KGh0bWwsIGRvY3VtZW50LCBudWxsKTtcbiAgICB0aGlzLl9ydW5QYXJzaW5nTG9vcCgpO1xuXG4gICAgcmV0dXJuIGRvY3VtZW50O1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZyYWdtZW50ID0gZnVuY3Rpb24gKGh0bWwsIGZyYWdtZW50Q29udGV4dCkge1xuICAgIC8vTk9URTogdXNlIDx0ZW1wbGF0ZT4gZWxlbWVudCBhcyBhIGZyYWdtZW50IGNvbnRleHQgaWYgY29udGV4dCBlbGVtZW50IHdhcyBub3QgcHJvdmlkZWQsXG4gICAgLy9zbyB3ZSB3aWxsIHBhcnNlIGluIFwiZm9yZ2l2aW5nXCIgbWFubmVyXG4gICAgaWYgKCFmcmFnbWVudENvbnRleHQpXG4gICAgICAgIGZyYWdtZW50Q29udGV4dCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCgkLlRFTVBMQVRFLCBOUy5IVE1MLCBbXSk7XG5cbiAgICAvL05PVEU6IGNyZWF0ZSBmYWtlIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSB1c2VkIGFzICdkb2N1bWVudCcgZm9yIGZyYWdtZW50IHBhcnNpbmcuXG4gICAgLy9UaGlzIGlzIGltcG9ydGFudCBmb3IganNkb20gdGhlcmUgJ2RvY3VtZW50JyBjYW4ndCBiZSByZWNyZWF0ZWQsIHRoZXJlZm9yZVxuICAgIC8vZnJhZ21lbnQgcGFyc2luZyBjYXVzZXMgbWVzc2luZyBvZiB0aGUgbWFpbiBgZG9jdW1lbnRgLlxuICAgIHZhciBkb2N1bWVudE1vY2sgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJ2RvY3VtZW50bW9jaycsIE5TLkhUTUwsIFtdKTtcblxuICAgIHRoaXMuX3Jlc2V0KGh0bWwsIGRvY3VtZW50TW9jaywgZnJhZ21lbnRDb250ZXh0KTtcblxuICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZnJhZ21lbnRDb250ZXh0KSA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgdGhpcy5fcHVzaFRtcGxJbnNlcnRpb25Nb2RlKElOX1RFTVBMQVRFX01PREUpO1xuXG4gICAgdGhpcy5faW5pdFRva2VuaXplckZvckZyYWdtZW50UGFyc2luZygpO1xuICAgIHRoaXMuX2luc2VydEZha2VSb290RWxlbWVudCgpO1xuICAgIHRoaXMuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIHRoaXMuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQoKTtcbiAgICB0aGlzLl9ydW5QYXJzaW5nTG9vcCgpO1xuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKGRvY3VtZW50TW9jayksXG4gICAgICAgIGZyYWdtZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICB0aGlzLl9hZG9wdE5vZGVzKHJvb3RFbGVtZW50LCBmcmFnbWVudCk7XG5cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG59O1xuXG4vL1Jlc2V0IHN0YXRlXG5QYXJzZXIucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uIChodG1sLCBkb2N1bWVudCwgZnJhZ21lbnRDb250ZXh0KSB7XG4gICAgdGhpcy50b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKGh0bWwsIHRoaXMub3B0aW9ucyk7XG5cbiAgICB0aGlzLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOSVRJQUxfTU9ERTtcbiAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9ICcnO1xuXG4gICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0ID0gZnJhZ21lbnRDb250ZXh0O1xuXG4gICAgdGhpcy5oZWFkRWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5mb3JtRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLm9wZW5FbGVtZW50cyA9IG5ldyBPcGVuRWxlbWVudFN0YWNrKHRoaXMuZG9jdW1lbnQsIHRoaXMudHJlZUFkYXB0ZXIpO1xuICAgIHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzID0gbmV3IEZvcm1hdHRpbmdFbGVtZW50TGlzdCh0aGlzLnRyZWVBZGFwdGVyKTtcblxuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjayA9IFtdO1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCA9IC0xO1xuICAgIHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlID0gbnVsbDtcblxuICAgIHRoaXMucGVuZGluZ0NoYXJhY3RlclRva2VucyA9IFtdO1xuICAgIHRoaXMuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbiA9IGZhbHNlO1xuXG4gICAgdGhpcy5mcmFtZXNldE9rID0gdHJ1ZTtcbiAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IGZhbHNlO1xufTtcblxuLy9QYXJzaW5nIGxvb3BcblBhcnNlci5wcm90b3R5cGUuX2l0ZXJhdGVQYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9zZXR1cFRva2VuaXplckNEQVRBTW9kZSgpO1xuXG4gICAgdmFyIHRva2VuID0gdGhpcy50b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7XG5cbiAgICBpZiAodGhpcy5za2lwTmV4dE5ld0xpbmUpIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOICYmIHRva2VuLmNoYXJzWzBdID09PSAnXFxuJykge1xuICAgICAgICAgICAgaWYgKHRva2VuLmNoYXJzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHRva2VuLmNoYXJzID0gdG9rZW4uY2hhcnMuc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Nob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQodG9rZW4pKVxuICAgICAgICB0aGlzLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3J1blBhcnNpbmdMb29wID0gZnVuY3Rpb24gKCkge1xuICAgIHdoaWxlICghdGhpcy5zdG9wcGVkKVxuICAgICAgICB0aGlzLl9pdGVyYXRlUGFyc2luZ0xvb3AoKTtcbn07XG5cbi8vVGV4dCBwYXJzaW5nXG5QYXJzZXIucHJvdG90eXBlLl9zZXR1cFRva2VuaXplckNEQVRBTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKTtcblxuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSBjdXJyZW50ICYmIGN1cnJlbnQgIT09IHRoaXMuZG9jdW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY3VycmVudCkgIT09IE5TLkhUTUwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0aGlzLl9pc0h0bWxJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXRoaXMuX2lzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQoY3VycmVudCkpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fc3dpdGNoVG9UZXh0UGFyc2luZyA9IGZ1bmN0aW9uIChjdXJyZW50VG9rZW4sIG5leHRUb2tlbml6ZXJTdGF0ZSkge1xuICAgIHRoaXMuX2luc2VydEVsZW1lbnQoY3VycmVudFRva2VuLCBOUy5IVE1MKTtcbiAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IG5leHRUb2tlbml6ZXJTdGF0ZTtcbiAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IHRoaXMuaW5zZXJ0aW9uTW9kZTtcbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBURVhUX01PREU7XG59O1xuXG4vL0ZyYWdtZW50IHBhcnNpbmdcblBhcnNlci5wcm90b3R5cGUuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuZnJhZ21lbnRDb250ZXh0ID9cbiAgICAgICAgICAgdGhpcy5mcmFnbWVudENvbnRleHQgOlxuICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fZmluZEZvcm1JbkZyYWdtZW50Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuZnJhZ21lbnRDb250ZXh0O1xuXG4gICAgZG8ge1xuICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG5vZGUpID09PSAkLkZPUk0pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBub2RlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gdGhpcy50cmVlQWRhcHRlci5nZXRQYXJlbnROb2RlKG5vZGUpO1xuICAgIH0gd2hpbGUgKG5vZGUpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5faW5pdFRva2VuaXplckZvckZyYWdtZW50UGFyc2luZyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5mcmFnbWVudENvbnRleHQpO1xuXG4gICAgaWYgKHRuID09PSAkLlRJVExFIHx8IHRuID09PSAkLlRFWFRBUkVBKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJDREFUQTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlhNUCB8fCB0biA9PT0gJC5JRlJBTUUgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0VNQkVEIHx8IHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkFXVEVYVDtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuU0NSSVBUX0RBVEE7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5QTEFJTlRFWFQpXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUExBSU5URVhUO1xufTtcblxuLy9UcmVlIG11dGF0aW9uXG5QYXJzZXIucHJvdG90eXBlLl9zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB0aGlzLnRyZWVBZGFwdGVyLnNldERvY3VtZW50VHlwZSh0aGlzLmRvY3VtZW50LCB0b2tlbi5uYW1lLCB0b2tlbi5wdWJsaWNJZCwgdG9rZW4uc3lzdGVtSWQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYXR0YWNoRWxlbWVudFRvVHJlZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpXG4gICAgICAgIHRoaXMuX2Zvc3RlclBhcmVudEVsZW1lbnQoZWxlbWVudCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudCB8fCB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBlbGVtZW50KTtcbiAgICB9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9hcHBlbmRFbGVtZW50ID0gZnVuY3Rpb24gKHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBuYW1lc3BhY2VVUkksIHRva2VuLmF0dHJzKTtcblxuICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRFbGVtZW50ID0gZnVuY3Rpb24gKHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBuYW1lc3BhY2VVUkksIHRva2VuLmF0dHJzKTtcblxuICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCk7XG4gICAgdGhpcy5vcGVuRWxlbWVudHMucHVzaChlbGVtZW50KTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2luc2VydFRlbXBsYXRlID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgdmFyIHRtcGwgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgTlMuSFRNTCwgdG9rZW4uYXR0cnMpLFxuICAgICAgICBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRtcGwsIGNvbnRlbnQpO1xuICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUodG1wbCk7XG4gICAgdGhpcy5vcGVuRWxlbWVudHMucHVzaCh0bXBsKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2luc2VydEZha2VSb290RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCgkLkhUTUwsIE5TLkhUTUwsIFtdKTtcblxuICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQodGhpcy5vcGVuRWxlbWVudHMuY3VycmVudCwgZWxlbWVudCk7XG4gICAgdGhpcy5vcGVuRWxlbWVudHMucHVzaChlbGVtZW50KTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2FwcGVuZENvbW1lbnROb2RlID0gZnVuY3Rpb24gKHRva2VuLCBwYXJlbnQpIHtcbiAgICB2YXIgY29tbWVudE5vZGUgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUNvbW1lbnROb2RlKHRva2VuLmRhdGEpO1xuXG4gICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChwYXJlbnQsIGNvbW1lbnROb2RlKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2luc2VydENoYXJhY3RlcnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICBpZiAodGhpcy5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24oKSlcbiAgICAgICAgdGhpcy5fZm9zdGVyUGFyZW50VGV4dCh0b2tlbi5jaGFycyk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudCB8fCB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChwYXJlbnQsIHRva2VuLmNoYXJzKTtcbiAgICB9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9hZG9wdE5vZGVzID0gZnVuY3Rpb24gKGRvbm9yLCByZWNpcGllbnQpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQoZG9ub3IpO1xuXG4gICAgICAgIGlmICghY2hpbGQpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUoY2hpbGQpO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHJlY2lwaWVudCwgY2hpbGQpO1xuICAgIH1cbn07XG5cbi8vVG9rZW4gcHJvY2Vzc2luZ1xuUGFyc2VyLnByb3RvdHlwZS5fc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy5fZ2V0QWRqdXN0ZWRDdXJyZW50RWxlbWVudCgpO1xuXG4gICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQgPT09IHRoaXMuZG9jdW1lbnQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xuXG4gICAgaWYgKG5zID09PSBOUy5IVE1MKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGN1cnJlbnQpID09PSAkLkFOTk9UQVRJT05fWE1MICYmIG5zID09PSBOUy5NQVRITUwgJiZcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiAmJiB0b2tlbi50YWdOYW1lID09PSAkLlNWRykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGlzQ2hhcmFjdGVyVG9rZW4gPSB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTixcbiAgICAgICAgaXNNYXRoTUxUZXh0U3RhcnRUYWcgPSB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSAhPT0gJC5NR0xZUEggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50YWdOYW1lICE9PSAkLk1BTElHTk1BUks7XG5cbiAgICBpZiAoKGlzTWF0aE1MVGV4dFN0YXJ0VGFnIHx8IGlzQ2hhcmFjdGVyVG9rZW4pICYmIHRoaXMuX2lzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQoY3VycmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGlmICgodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiB8fCBpc0NoYXJhY3RlclRva2VuKSAmJiB0aGlzLl9pc0h0bWxJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gdG9rZW4udHlwZSAhPT0gVG9rZW5pemVyLkVPRl9UT0tFTjtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIF9bdGhpcy5pbnNlcnRpb25Nb2RlXVt0b2tlbi50eXBlXSh0aGlzLCB0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW5JbkJvZHlNb2RlID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgX1tJTl9CT0RZX01PREVdW3Rva2VuLnR5cGVdKHRoaXMsIHRva2VuKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTilcbiAgICAgICAgY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIG51bGxDaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTilcbiAgICAgICAgaW5zZXJ0Q2hhcmFjdGVycyh0aGlzLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTilcbiAgICAgICAgYXBwZW5kQ29tbWVudCh0aGlzLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxuICAgICAgICBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkVORF9UQUdfVE9LRU4pXG4gICAgICAgIGVuZFRhZ0luRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycyA9IGZ1bmN0aW9uICh0YWdOYW1lLCBhdHRycykge1xuICAgIHZhciBmYWtlVG9rZW4gPSB0aGlzLnRva2VuaXplci5idWlsZFN0YXJ0VGFnVG9rZW4odGFnTmFtZSk7XG5cbiAgICBmYWtlVG9rZW4uYXR0cnMgPSBhdHRycztcbiAgICB0aGlzLl9wcm9jZXNzVG9rZW4oZmFrZVRva2VuKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlU3RhcnRUYWcgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xuICAgIHZhciBmYWtlVG9rZW4gPSB0aGlzLnRva2VuaXplci5idWlsZFN0YXJ0VGFnVG9rZW4odGFnTmFtZSk7XG5cbiAgICB0aGlzLl9wcm9jZXNzVG9rZW4oZmFrZVRva2VuKTtcbiAgICByZXR1cm4gZmFrZVRva2VuO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc0Zha2VFbmRUYWcgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xuICAgIHZhciBmYWtlVG9rZW4gPSB0aGlzLnRva2VuaXplci5idWlsZEVuZFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG4gICAgcmV0dXJuIGZha2VUb2tlbjtcbn07XG5cbi8vSW50ZWdyYXRpb24gcG9pbnRzXG5QYXJzZXIucHJvdG90eXBlLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudCk7XG5cbiAgICByZXR1cm4gRm9yZWlnbkNvbnRlbnQuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCh0biwgbnMpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5faXNIdG1sSW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpLFxuICAgICAgICBhdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QoZWxlbWVudCk7XG5cbiAgICByZXR1cm4gRm9yZWlnbkNvbnRlbnQuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgbnMsIGF0dHJzKTtcbn07XG5cbi8vQWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMgcmVjb25zdHJ1Y3Rpb25cblBhcnNlci5wcm90b3R5cGUuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsaXN0TGVuZ3RoID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKGxpc3RMZW5ndGgpIHtcbiAgICAgICAgdmFyIHVub3BlbklkeCA9IGxpc3RMZW5ndGgsXG4gICAgICAgICAgICBlbnRyeSA9IG51bGw7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgdW5vcGVuSWR4LS07XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmVudHJpZXNbdW5vcGVuSWR4XTtcblxuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkgfHwgdGhpcy5vcGVuRWxlbWVudHMuY29udGFpbnMoZW50cnkuZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB1bm9wZW5JZHgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAodW5vcGVuSWR4ID4gMCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IHVub3BlbklkeDsgaSA8IGxpc3RMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzW2ldO1xuICAgICAgICAgICAgdGhpcy5faW5zZXJ0RWxlbWVudChlbnRyeS50b2tlbiwgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZW50cnkuZWxlbWVudCkpO1xuICAgICAgICAgICAgZW50cnkuZWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vL0Nsb3NlIGVsZW1lbnRzXG5QYXJzZXIucHJvdG90eXBlLl9jbG9zZVRhYmxlQ2VsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVEQpKVxuICAgICAgICB0aGlzLl9wcm9jZXNzRmFrZUVuZFRhZygkLlREKTtcblxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5USCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9jbG9zZVBFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuUCk7XG4gICAgdGhpcy5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuUCk7XG59O1xuXG4vL0luc2VydGlvbiBtb2Rlc1xuUGFyc2VyLnByb3RvdHlwZS5fcmVzZXRJbnNlcnRpb25Nb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCwgbGFzdCA9IGZhbHNlOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICBsYXN0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KVxuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSxcbiAgICAgICAgICAgIG5ld0luc2VydGlvbk1vZGUgPSBJTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbdG5dO1xuXG4gICAgICAgIGlmIChuZXdJbnNlcnRpb25Nb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBuZXdJbnNlcnRpb25Nb2RlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICghbGFzdCAmJiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9DRUxMX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKCFsYXN0ICYmIHRuID09PSAkLkhFQUQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX0hFQURfTU9ERTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGVGb3JTZWxlY3QoaSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSFRNTCkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gdGhpcy5oZWFkRWxlbWVudCA/IEFGVEVSX0hFQURfTU9ERSA6IEJFRk9SRV9IRUFEX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKGxhc3QpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX0JPRFlfTU9ERTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0ID0gZnVuY3Rpb24gKHNlbGVjdElkeCkge1xuICAgIGlmIChzZWxlY3RJZHggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBzZWxlY3RJZHggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIgYW5jZXN0b3IgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXSxcbiAgICAgICAgICAgICAgICB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShhbmNlc3Rvcik7XG5cbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfTU9ERTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZSA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrLnB1c2gobW9kZSk7XG4gICAgdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrVG9wKys7XG4gICAgdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGUgPSBtb2RlO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fcG9wVG1wbEluc2VydGlvbk1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrLnBvcCgpO1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcC0tO1xuICAgIHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlID0gdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrW3RoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcF07XG59O1xuXG4vL0Zvc3RlciBwYXJlbnRpbmdcblBhcnNlci5wcm90b3R5cGUuX2lzRWxlbWVudENhdXNlc0Zvc3RlclBhcmVudGluZyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFI7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3N0ZXJQYXJlbnRpbmdFbmFibGVkICYmIHRoaXMuX2lzRWxlbWVudENhdXNlc0Zvc3RlclBhcmVudGluZyh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50KTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbG9jYXRpb24gPSB7XG4gICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgYmVmb3JlRWxlbWVudDogbnVsbFxuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBvcGVuRWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2ldLFxuICAgICAgICAgICAgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUob3BlbkVsZW1lbnQpLFxuICAgICAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShvcGVuRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5wYXJlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMob3BlbkVsZW1lbnQpWzBdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRQYXJlbnROb2RlKG9wZW5FbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnBhcmVudClcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5iZWZvcmVFbGVtZW50ID0gb3BlbkVsZW1lbnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaSAtIDFdO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbG9jYXRpb24ucGFyZW50KVxuICAgICAgICBsb2NhdGlvbi5wYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1swXTtcblxuICAgIHJldHVybiBsb2NhdGlvbjtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2Zvc3RlclBhcmVudEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpO1xuXG4gICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0QmVmb3JlKGxvY2F0aW9uLnBhcmVudCwgZWxlbWVudCwgbG9jYXRpb24uYmVmb3JlRWxlbWVudCk7XG4gICAgZWxzZVxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGxvY2F0aW9uLnBhcmVudCwgZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9mb3N0ZXJQYXJlbnRUZXh0ID0gZnVuY3Rpb24gKGNoYXJzKSB7XG4gICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uKCk7XG5cbiAgICBpZiAobG9jYXRpb24uYmVmb3JlRWxlbWVudClcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5pbnNlcnRUZXh0QmVmb3JlKGxvY2F0aW9uLnBhcmVudCwgY2hhcnMsIGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpO1xuICAgIGVsc2VcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5pbnNlcnRUZXh0KGxvY2F0aW9uLnBhcmVudCwgY2hhcnMpO1xufTtcblxuLy9TcGVjaWFsIGVsZW1lbnRzXG5QYXJzZXIucHJvdG90eXBlLl9pc1NwZWNpYWxFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudCk7XG5cbiAgICByZXR1cm4gSFRNTC5TUEVDSUFMX0VMRU1FTlRTW25zXVt0bl07XG59O1xuXG4vL0Fkb3B0aW9uIGFnZW5jeSBhbGdvcml0aG1cbi8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdHJlZS1jb25zdHJ1Y3Rpb24uaHRtbCNhZG9wdGlvbkFnZW5jeSlcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vU3RlcHMgNS04IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRm9ybWF0dGluZ0VsZW1lbnRFbnRyeShwLCB0b2tlbikge1xuICAgIHZhciBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lKHRva2VuLnRhZ05hbWUpO1xuXG4gICAgaWYgKGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICAgICAgaWYgKCFwLm9wZW5FbGVtZW50cy5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICAgICAgICAgIGZvcm1hdHRpbmdFbGVtZW50RW50cnkgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoIXAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG9rZW4udGFnTmFtZSkpXG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgcmV0dXJuIGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG59XG5cbi8vU3RlcHMgOSBhbmQgMTAgb2YgdGhlIGFsZ29yaXRobVxuZnVuY3Rpb24gYWFPYnRhaW5GdXJ0aGVzdEJsb2NrKHAsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICB2YXIgZnVydGhlc3RCbG9jayA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG5cbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudClcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGlmIChwLl9pc1NwZWNpYWxFbGVtZW50KGVsZW1lbnQpKVxuICAgICAgICAgICAgZnVydGhlc3RCbG9jayA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKCFmdXJ0aGVzdEJsb2NrKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsRWxlbWVudFBvcHBlZChmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVydGhlc3RCbG9jaztcbn1cblxuLy9TdGVwIDEzIG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhSW5uZXJMb29wKHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBudWxsLFxuICAgICAgICBsYXN0RWxlbWVudCA9IGZ1cnRoZXN0QmxvY2ssXG4gICAgICAgIG5leHRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZnVydGhlc3RCbG9jayk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFBX0lOTkVSX0xPT1BfSVRFUjsgaSsrKSB7XG4gICAgICAgIGVsZW1lbnQgPSBuZXh0RWxlbWVudDtcblxuICAgICAgICAvL05PVEU6IHN0b3JlIG5leHQgZWxlbWVudCBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24gKGl0IG1heSBiZSBkZWxldGVkIGZyb20gdGhlIHN0YWNrIGJ5IHN0ZXAgOS41KVxuICAgICAgICBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGVsZW1lbnQpO1xuXG4gICAgICAgIHZhciBlbGVtZW50RW50cnkgPSBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5nZXRFbGVtZW50RW50cnkoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCFlbGVtZW50RW50cnkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IGZvcm1hdHRpbmdFbGVtZW50KVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZWxlbWVudCA9IGFhUmVjcmVhdGVFbGVtZW50RnJvbUVudHJ5KHAsIGVsZW1lbnRFbnRyeSk7XG5cbiAgICAgICAgaWYgKGxhc3RFbGVtZW50ID09PSBmdXJ0aGVzdEJsb2NrKVxuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYm9va21hcmsgPSBlbGVtZW50RW50cnk7XG5cbiAgICAgICAgcC50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGxhc3RFbGVtZW50KTtcbiAgICAgICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChlbGVtZW50LCBsYXN0RWxlbWVudCk7XG4gICAgICAgIGxhc3RFbGVtZW50ID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdEVsZW1lbnQ7XG59XG5cbi8vU3RlcCAxMy43IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhUmVjcmVhdGVFbGVtZW50RnJvbUVudHJ5KHAsIGVsZW1lbnRFbnRyeSkge1xuICAgIHZhciBucyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnRFbnRyeS5lbGVtZW50KSxcbiAgICAgICAgbmV3RWxlbWVudCA9IHAudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudChlbGVtZW50RW50cnkudG9rZW4udGFnTmFtZSwgbnMsIGVsZW1lbnRFbnRyeS50b2tlbi5hdHRycyk7XG5cbiAgICBwLm9wZW5FbGVtZW50cy5yZXBsYWNlKGVsZW1lbnRFbnRyeS5lbGVtZW50LCBuZXdFbGVtZW50KTtcbiAgICBlbGVtZW50RW50cnkuZWxlbWVudCA9IG5ld0VsZW1lbnQ7XG5cbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxuLy9TdGVwIDE0IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhSW5zZXJ0TGFzdE5vZGVJbkNvbW1vbkFuY2VzdG9yKHAsIGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCkge1xuICAgIGlmIChwLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcoY29tbW9uQW5jZXN0b3IpKVxuICAgICAgICBwLl9mb3N0ZXJQYXJlbnRFbGVtZW50KGxhc3RFbGVtZW50KTtcblxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgdG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoY29tbW9uQW5jZXN0b3IpLFxuICAgICAgICAgICAgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjb21tb25BbmNlc3Rvcik7XG5cbiAgICAgICAgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MKVxuICAgICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBwLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMoY29tbW9uQW5jZXN0b3IpWzBdO1xuXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoY29tbW9uQW5jZXN0b3IsIGxhc3RFbGVtZW50KTtcbiAgICB9XG59XG5cbi8vU3RlcHMgMTUtMTkgb2YgdGhlIGFsZ29yaXRobVxuZnVuY3Rpb24gYWFSZXBsYWNlRm9ybWF0dGluZ0VsZW1lbnQocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSkge1xuICAgIHZhciBucyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCksXG4gICAgICAgIHRva2VuID0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS50b2tlbixcbiAgICAgICAgbmV3RWxlbWVudCA9IHAudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBucywgdG9rZW4uYXR0cnMpO1xuXG4gICAgcC5fYWRvcHROb2RlcyhmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcbiAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGZ1cnRoZXN0QmxvY2ssIG5ld0VsZW1lbnQpO1xuXG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0RWxlbWVudEFmdGVyQm9va21hcmsobmV3RWxlbWVudCwgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS50b2tlbik7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG5cbiAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICBwLm9wZW5FbGVtZW50cy5pbnNlcnRBZnRlcihmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcbn1cblxuLy9BbGdvcml0aG0gZW50cnkgcG9pbnRcbmZ1bmN0aW9uIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQUFfT1VURVJfTE9PUF9JVEVSOyBpKyspIHtcbiAgICAgICAgdmFyIGZvcm1hdHRpbmdFbGVtZW50RW50cnkgPSBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4sIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuXG4gICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSlcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIHZhciBmdXJ0aGVzdEJsb2NrID0gYWFPYnRhaW5GdXJ0aGVzdEJsb2NrKHAsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuXG4gICAgICAgIGlmICghZnVydGhlc3RCbG9jaylcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeTtcblxuICAgICAgICB2YXIgbGFzdEVsZW1lbnQgPSBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpLFxuICAgICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3Rvcihmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XG4gICAgICAgIGFhSW5zZXJ0TGFzdE5vZGVJbkNvbW1vbkFuY2VzdG9yKHAsIGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XG4gICAgICAgIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuICAgIH1cbn1cblxuXG4vL0dlbmVyaWMgdG9rZW4gaGFuZGxlcnNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBpZ25vcmVUb2tlbihwLCB0b2tlbikge1xuICAgIC8vTk9URTogZG8gbm90aGluZyA9KVxufVxuXG5mdW5jdGlvbiBhcHBlbmRDb21tZW50KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudCB8fCBwLm9wZW5FbGVtZW50cy5jdXJyZW50KVxufVxuXG5mdW5jdGlvbiBhcHBlbmRDb21tZW50VG9Sb290SHRtbEVsZW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5vcGVuRWxlbWVudHMuaXRlbXNbMF0pO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRDb21tZW50VG9Eb2N1bWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLmRvY3VtZW50KTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0Q2hhcmFjdGVycyhwLCB0b2tlbikge1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xufVxuXG5mdW5jdGlvbiBzdG9wUGFyc2luZyhwLCB0b2tlbikge1xuICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cbi8vMTIuMi41LjQuMSBUaGUgXCJpbml0aWFsXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBkb2N0eXBlSW5Jbml0aWFsTW9kZShwLCB0b2tlbikge1xuICAgIHAuX3NldERvY3VtZW50VHlwZSh0b2tlbik7XG5cbiAgICBpZiAodG9rZW4uZm9yY2VRdWlya3MgfHwgRG9jdHlwZS5pc1F1aXJrcyh0b2tlbi5uYW1lLCB0b2tlbi5wdWJsaWNJZCwgdG9rZW4uc3lzdGVtSWQpKVxuICAgICAgICBwLnRyZWVBZGFwdGVyLnNldFF1aXJrc01vZGUocC5kb2N1bWVudCk7XG5cbiAgICBwLmluc2VydGlvbk1vZGUgPSBCRUZPUkVfSFRNTF9NT0RFO1xufVxuXG5mdW5jdGlvbiB0b2tlbkluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLnRyZWVBZGFwdGVyLnNldFF1aXJrc01vZGUocC5kb2N1bWVudCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hUTUxfTU9ERTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuMiBUaGUgXCJiZWZvcmUgaHRtbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdCZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTCkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hFQURfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuQmVmb3JlSHRtbChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0JlZm9yZUh0bWwocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkJSKVxuICAgICAgICB0b2tlbkJlZm9yZUh0bWwocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiB0b2tlbkJlZm9yZUh0bWwocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBCRUZPUkVfSEVBRF9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC4zIFRoZSBcImJlZm9yZSBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0JlZm9yZUhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkhFQUQpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaGVhZEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9IRUFEX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkJlZm9yZUhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IRUFEIHx8IHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkhFQUQpO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC40IFRoZSBcImluIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CQVNFIHx8IHRuID09PSAkLkJBU0VGT05UIHx8IHRuID09PSAkLkJHU09VTkQgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5DT01NQU5EIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSkge1xuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5USVRMRSlcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkNEQVRBKTtcblxuICAgIC8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCB3ZSBhbHdheXMgYWN0IGFzIGFuIGludGVyYWN0aXZlIHVzZXIgYWdlbnQgd2l0aCBlbmFibGVkIHNjcmlwdGluZywgc28gd2UgcGFyc2VcbiAgICAvLzxub3NjcmlwdD4gYXMgYSByYXd0ZXh0LlxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PU0NSSVBUIHx8IHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLlNUWUxFKVxuICAgICAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBUb2tlbml6ZXIuTU9ERS5SQVdURVhUKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVClcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuU0NSSVBUX0RBVEEpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpIHtcbiAgICAgICAgcC5faW5zZXJ0VGVtcGxhdGUodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RFTVBMQVRFX01PREU7XG4gICAgICAgIHAuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZShJTl9URU1QTEFURV9NT0RFKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5IRUFEKVxuICAgICAgICB0b2tlbkluSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSEVBRCkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfSEVBRF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuQlIgfHwgdG4gPT09ICQuSFRNTClcbiAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGVtcGxhdGVQb3BwZWQoKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgcC5fcG9wVG1wbEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbkluSGVhZChwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuSEVBRCk7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjYgVGhlIFwiYWZ0ZXIgaGVhZFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkJPRFkpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUVTRVQpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0ZSQU1FU0VUX01PREU7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSB8fFxuICAgICAgICAgICAgIHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLlNDUklQVCB8fCB0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5URU1QTEFURSB8fCB0biA9PT0gJC5USVRMRSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wdXNoKHAuaGVhZEVsZW1lbnQpO1xuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShwLmhlYWRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5IRUFEKVxuICAgICAgICB0b2tlbkFmdGVySGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0FmdGVySGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQk9EWSB8fCB0biA9PT0gJC5IVE1MIHx8IHRuID09PSAkLkJSKVxuICAgICAgICB0b2tlbkFmdGVySGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pIHtcbiAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuQk9EWSk7XG4gICAgcC5mcmFtZXNldE9rID0gdHJ1ZTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuNyBUaGUgXCJpbiBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVySW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaHRtbFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMClcbiAgICAgICAgcC50cmVlQWRhcHRlci5hZG9wdEF0dHJpYnV0ZXMocC5vcGVuRWxlbWVudHMuaXRlbXNbMF0sIHRva2VuLmF0dHJzKTtcbn1cblxuZnVuY3Rpb24gYm9keVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKTtcblxuICAgIGlmIChib2R5RWxlbWVudCAmJiBwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApIHtcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKGJvZHlFbGVtZW50LCB0b2tlbi5hdHRycyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmcmFtZXNldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKTtcblxuICAgIGlmIChwLmZyYW1lc2V0T2sgJiYgYm9keUVsZW1lbnQpIHtcbiAgICAgICAgcC50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGJvZHlFbGVtZW50KTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wQWxsVXBUb0h0bWxFbGVtZW50KCk7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9GUkFNRVNFVF9NT0RFO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIG51bWJlcmVkSGVhZGVyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICB2YXIgdG4gPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gcHJlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxuICAgIC8vb24gdG8gdGhlIG5leHQgb25lLiAoTmV3bGluZXMgYXQgdGhlIHN0YXJ0IG9mIHByZSBibG9ja3MgYXJlIGlnbm9yZWQgYXMgYW4gYXV0aG9yaW5nIGNvbnZlbmllbmNlLilcbiAgICBwLnNraXBOZXh0TmV3TGluZSA9IHRydWU7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZvcm1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMDtcblxuICAgIGlmICghcC5mb3JtRWxlbWVudCB8fCBpblRlbXBsYXRlKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG5cbiAgICAgICAgaWYgKCFpblRlbXBsYXRlKVxuICAgICAgICAgICAgcC5mb3JtRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsaXN0SXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbaV0sXG4gICAgICAgICAgICB0biA9IHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KTtcblxuICAgICAgICBpZiAoKHRva2VuLnRhZ05hbWUgPT09ICQuTEkgJiYgdG4gPT09ICQuTEkpIHx8XG4gICAgICAgICAgICAoKHRva2VuLnRhZ05hbWUgPT09ICQuREQgfHwgdG9rZW4udGFnTmFtZSA9PT0gJC5EVCkgJiYgKHRuID09PSAkLkREIHx8IHRuID09ICQuRFQpKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcodG4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG4gIT09ICQuQUREUkVTUyAmJiB0biAhPT0gJC5ESVYgJiYgdG4gIT09ICQuUCAmJiBwLl9pc1NwZWNpYWxFbGVtZW50KGVsZW1lbnQpKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIHBsYWludGV4dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5QTEFJTlRFWFQ7XG59XG5cbmZ1bmN0aW9uIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CVVRUT04pKSB7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQlVUVE9OKTtcbiAgICAgICAgYnV0dG9uU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lKCQuQSk7XG5cbiAgICBpZiAoYWN0aXZlRWxlbWVudEVudHJ5KSB7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQSk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShhY3RpdmVFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGFjdGl2ZUVsZW1lbnRFbnRyeSk7XG4gICAgfVxuXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBub2JyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5OT0JSKSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLk5PQlIpO1xuICAgICAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIH1cblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiB0YWJsZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLnRyZWVBZGFwdGVyLmlzUXVpcmtzTW9kZShwLmRvY3VtZW50KSAmJiBwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XG59XG5cbmZ1bmN0aW9uIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlucHV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgdmFyIGlucHV0VHlwZSA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xuXG4gICAgaWYgKCFpbnB1dFR5cGUgfHwgaW5wdXRUeXBlLnRvTG93ZXJDYXNlKCkgIT09IEhJRERFTl9JTlBVVF9UWVBFKVxuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcblxufVxuXG5mdW5jdGlvbiBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIGhyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHRva2VuLnRhZ05hbWUgPSAkLklNRztcbiAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBpc2luZGV4U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgfHwgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnV2l0aEF0dHJzKCQuRk9STSwgZ2V0U2VhcmNoYWJsZUluZGV4Rm9ybUF0dHJzKHRva2VuKSk7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5IUik7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5MQUJFTCk7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCBnZXRTZWFyY2hhYmxlSW5kZXhMYWJlbFRleHQodG9rZW4pKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycygkLklOUFVULCBnZXRTZWFyY2hhYmxlSW5kZXhJbnB1dEF0dHJzKHRva2VuKSk7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuTEFCRUwpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuSFIpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkZPUk0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGV4dGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIC8vTk9URTogSWYgdGhlIG5leHQgdG9rZW4gaXMgYSBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyIHRva2VuLCB0aGVuIGlnbm9yZSB0aGF0IHRva2VuIGFuZCBtb3ZlXG4gICAgLy9vbiB0byB0aGUgbmV4dCBvbmUuIChOZXdsaW5lcyBhdCB0aGUgc3RhcnQgb2YgdGV4dGFyZWEgZWxlbWVudHMgYXJlIGlnbm9yZWQgYXMgYW4gYXV0aG9yaW5nIGNvbnZlbmllbmNlLilcbiAgICBwLnNraXBOZXh0TmV3TGluZSA9IHRydWU7XG4gICAgcC50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQ0RBVEE7XG4gICAgcC5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBwLmluc2VydGlvbk1vZGU7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gVEVYVF9NT0RFO1xufVxuXG5mdW5jdGlvbiB4bXBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG59XG5cbmZ1bmN0aW9uIGlmcmFtZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG59XG5cbi8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCB3ZSBhbHdheXMgYWN0IGFzIGFuIHVzZXIgYWdlbnQgd2l0aCBlbmFibGVkIHBsdWdpbnMsIHNvIHdlIHBhcnNlXG4vLzxub2VtYmVkPiBhcyBhIHJhd3RleHQuXG5mdW5jdGlvbiBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBUb2tlbml6ZXIuTU9ERS5SQVdURVhUKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuXG4gICAgaWYgKHAuaW5zZXJ0aW9uTW9kZSA9PT0gSU5fVEFCTEVfTU9ERSB8fCBwLmluc2VydGlvbk1vZGUgPT09IElOX0NBUFRJT05fTU9ERSB8fFxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX1RBQkxFX0JPRFlfTU9ERSB8fCBwLmluc2VydGlvbk1vZGUgPT09IElOX1JPV19NT0RFIHx8XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSU5fQ0VMTF9NT0RFKSB7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9JTl9UQUJMRV9NT0RFO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX01PREU7XG59XG5cbmZ1bmN0aW9uIG9wdGdyb3VwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLk9QVElPTik7XG5cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBycFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5SVUJZKSlcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIG1lbnVpdGVtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gbWF0aFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5NQVRITUwpO1xuICAgIGVsc2VcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcbn1cblxuZnVuY3Rpb24gc3ZnU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuXG4gICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XG4gICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5YTUxBdHRycyh0b2tlbik7XG5cbiAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLlNWRyk7XG4gICAgZWxzZVxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5TVkcpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG4vL09QVElNSVpBVElPTjogSW50ZWdlciBjb21wYXJpc29ucyBhcmUgbG93LWNvc3QsIHNvIHdlIGNhbiB1c2UgdmVyeSBmYXN0IHRhZyBuYW1lIGxlbmd0aCBmaWx0ZXJzIGhlcmUuXG4vL0l0J3MgZmFzdGVyIHRoYW4gdXNpbmcgZGljdGlvbmFyeS5cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5JIHx8IHRuID09PSAkLlMgfHwgdG4gPT09ICQuQiB8fCB0biA9PT0gJC5VKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlApXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQSlcbiAgICAgICAgICAgICAgICBhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkRMIHx8IHRuID09PSAkLk9MIHx8IHRuID09PSAkLlVMKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxuICAgICAgICAgICAgICAgIG51bWJlcmVkSGVhZGVyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5MSSB8fCB0biA9PT0gJC5ERCB8fCB0biA9PT0gJC5EVClcbiAgICAgICAgICAgICAgICBsaXN0SXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU0gfHwgdG4gPT09ICQuVFQpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQlIpXG4gICAgICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSFIpXG4gICAgICAgICAgICAgICAgaHJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlJQIHx8IHRuID09PSAkLlJUKVxuICAgICAgICAgICAgICAgIHJwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biAhPT0gJC5USCAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5UUilcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRElWIHx8IHRuID09PSAkLkRJUiB8fCB0biA9PT0gJC5OQVYpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuUFJFKVxuICAgICAgICAgICAgICAgIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQklHKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklNRyB8fCB0biA9PT0gJC5XQlIpXG4gICAgICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuWE1QKVxuICAgICAgICAgICAgICAgIHhtcFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU1ZHKVxuICAgICAgICAgICAgICAgIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ09MKVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICAgICAgICAgIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuTElOSyB8fCB0biA9PT0gJC5NRVRBKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQk9EWSlcbiAgICAgICAgICAgICAgICBib2R5U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRk9STSlcbiAgICAgICAgICAgICAgICBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DT0RFIHx8IHRuID09PSAkLkZPTlQpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTk9CUilcbiAgICAgICAgICAgICAgICBub2JyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUkVBKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BVEgpXG4gICAgICAgICAgICAgICAgbWF0aFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVElUTEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BU0lERSlcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TTUFMTClcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSlcbiAgICAgICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU1CRUQpXG4gICAgICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSU5QVVQpXG4gICAgICAgICAgICAgICAgaW5wdXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlBBUkFNIHx8IHRuID09PSAkLlRSQUNLKVxuICAgICAgICAgICAgICAgIHBhcmFtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTUFHRSlcbiAgICAgICAgICAgICAgICBpbWFnZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuRlJBTUUgJiYgdG4gIT09ICQuVEJPRFkgJiYgdG4gIT09ICQuVEZPT1QgJiYgdG4gIT09ICQuVEhFQUQpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNDUklQVClcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkNFTlRFUiB8fCB0biA9PT0gJC5GSUdVUkUgfHwgdG4gPT09ICQuRk9PVEVSIHx8IHRuID09PSAkLkhFQURFUiB8fCB0biA9PT0gJC5IR1JPVVApXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQlVUVE9OKVxuICAgICAgICAgICAgICAgIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU1RSSUtFIHx8IHRuID09PSAkLlNUUk9ORylcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKVxuICAgICAgICAgICAgICAgIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuS0VZR0VOKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNPVVJDRSlcbiAgICAgICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSUZSQU1FKVxuICAgICAgICAgICAgICAgIGlmcmFtZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUKVxuICAgICAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgICAgIG9wdGdyb3VwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJHU09VTkQgfHwgdG4gPT09ICQuQ09NTUFORClcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRFVEFJTFMgfHwgdG4gPT09ICQuQUREUkVTUyB8fCB0biA9PT0gJC5BUlRJQ0xFIHx8IHRuID09PSAkLlNFQ1RJT04gfHwgdG4gPT09ICQuU1VNTUFSWSlcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5MSVNUSU5HKVxuICAgICAgICAgICAgICAgIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFSUVVFRSlcbiAgICAgICAgICAgICAgICBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklTSU5ERVgpXG4gICAgICAgICAgICAgICAgaXNpbmRleFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTk9FTUJFRClcbiAgICAgICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biAhPT0gJC5DQVBUSU9OKVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5NRU5VSVRFTSlcbiAgICAgICAgICAgICAgICBtZW51aXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUVTRVQpXG4gICAgICAgICAgICAgICAgZnJhbWVzZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZJRUxEU0VUKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFWFRBUkVBKVxuICAgICAgICAgICAgICAgIHRleHRhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PU0NSSVBUKVxuICAgICAgICAgICAgICAgIG5vZW1iZWRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVEdST1VQKVxuICAgICAgICAgICAgICAgIG9wdGdyb3VwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biAhPT0gJC5DT0xHUk9VUClcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICAgICAgICAgIHBsYWludGV4dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkxPQ0tRVU9URSB8fCB0biA9PT0gJC5GSUdDQVBUSU9OKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJPRFkpKVxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9CT0RZX01PREU7XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBodG1sRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQk9EWSk7XG5cbiAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5mdW5jdGlvbiBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRuKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmb3JtRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIGluVGVtcGxhdGUgPSBwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPiAwLFxuICAgICAgICBmb3JtRWxlbWVudCA9IHAuZm9ybUVsZW1lbnQ7XG5cbiAgICBpZiAoIWluVGVtcGxhdGUpXG4gICAgICAgIHAuZm9ybUVsZW1lbnQgPSBudWxsO1xuXG4gICAgaWYgKChmb3JtRWxlbWVudCB8fCBpblRlbXBsYXRlKSAmJiBwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuRk9STSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuXG4gICAgICAgIGlmIChpblRlbXBsYXRlKVxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuRk9STSk7XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGZvcm1FbGVtZW50KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuUCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlApO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuUCk7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsaUVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkxpc3RJdGVtU2NvcGUoJC5MSSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oJC5MSSk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkxJKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRkRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRuKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0bik7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBudW1iZXJlZEhlYWRlckVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNOdW1iZXJlZEhlYWRlckluU2NvcGUoKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsTnVtYmVyZWRIZWFkZXJQb3BwZWQoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFwcGxldEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYnJFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuQlIpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGZvciAodmFyIGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09IHRuKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0bik7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwLl9pc1NwZWNpYWxFbGVtZW50KGVsZW1lbnQpKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufVxuXG4vL09QVElNSVpBVElPTjogSW50ZWdlciBjb21wYXJpc29ucyBhcmUgbG93LWNvc3QsIHNvIHdlIGNhbiB1c2UgdmVyeSBmYXN0IHRhZyBuYW1lIGxlbmd0aCBmaWx0ZXJzIGhlcmUuXG4vL0l0J3MgZmFzdGVyIHRoYW4gdXNpbmcgZGljdGlvbmFyeS5cbmZ1bmN0aW9uIGVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQSB8fCB0biA9PT0gJC5CIHx8IHRuID09PSAkLkkgfHwgdG4gPT09ICQuUyB8fCB0biA9PSAkLlUpXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuUClcbiAgICAgICAgICAgICAgICBwRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBpZiAodG4gPT0gJC5ETCB8fCB0biA9PT0gJC5VTCB8fCB0biA9PT0gJC5PTClcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTEkpXG4gICAgICAgICAgICAgICAgbGlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5ERCB8fCB0biA9PT0gJC5EVClcbiAgICAgICAgICAgICAgICBkZEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxuICAgICAgICAgICAgICAgIG51bWJlcmVkSGVhZGVyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQlIpXG4gICAgICAgICAgICAgICAgYnJFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5FTSB8fCB0biA9PT0gJC5UVClcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CSUcpXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRElSIHx8IHRuID09PSAkLkRJViB8fCB0biA9PT0gJC5OQVYpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJPRFkpXG4gICAgICAgICAgICAgICAgYm9keUVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhUTUwpXG4gICAgICAgICAgICAgICAgaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZPUk0pXG4gICAgICAgICAgICAgICAgZm9ybUVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkNPREUgfHwgdG4gPT09ICQuRk9OVCB8fCB0biA9PT0gJC5OT0JSKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BSU4gfHwgdG4gPT09ICQuTUVOVSlcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQVNJREUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNNQUxMKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkNFTlRFUiB8fCB0biA9PT0gJC5GSUdVUkUgfHwgdG4gPT09ICQuRk9PVEVSIHx8IHRuID09PSAkLkhFQURFUiB8fCB0biA9PT0gJC5IR1JPVVApXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkFQUExFVCB8fCB0biA9PT0gJC5PQkpFQ1QpXG4gICAgICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT0gJC5TVFJJS0UgfHwgdG4gPT09ICQuU1RST05HKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkFERFJFU1MgfHwgdG4gPT09ICQuQVJUSUNMRSB8fCB0biA9PT0gJC5ERVRBSUxTIHx8IHRuID09PSAkLlNFQ1RJT04gfHwgdG4gPT09ICQuU1VNTUFSWSlcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFSUVVFRSlcbiAgICAgICAgICAgICAgICBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5GSUVMRFNFVClcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJMT0NLUVVPVEUgfHwgdG4gPT09ICQuRklHQ0FQVElPTilcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0IDpcbiAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW9mSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCA+IC0xKVxuICAgICAgICBlb2ZJblRlbXBsYXRlKHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgcC5zdG9wcGVkID0gdHJ1ZTtcbn1cblxuLy8xMi4yLjUuNC44IFRoZSBcInRleHRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGVuZFRhZ0luVGV4dChwLCB0b2tlbikge1xuICAgIGlmICghcC5mcmFnbWVudENvbnRleHQgJiYgcC5zY3JpcHRIYW5kbGVyICYmIHRva2VuLnRhZ05hbWUgPT09ICQuU0NSSVBUKVxuICAgICAgICBwLnNjcmlwdEhhbmRsZXIocC5kb2N1bWVudCwgcC5vcGVuRWxlbWVudHMuY3VycmVudCk7XG5cbiAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZTtcbn1cblxuXG5mdW5jdGlvbiBlb2ZJblRleHQocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuOSBUaGUgXCJpbiB0YWJsZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2hhcmFjdGVySW5UYWJsZShwLCB0b2tlbikge1xuICAgIHZhciBjdXJUbiA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lO1xuXG4gICAgaWYgKGN1clRuID09PSAkLlRBQkxFIHx8IGN1clRuID09PSAkLlRCT0RZIHx8IGN1clRuID09PSAkLlRGT09UIHx8IGN1clRuID09PSAkLlRIRUFEIHx8IGN1clRuID09PSAkLlRSKSB7XG4gICAgICAgIHAucGVuZGluZ0NoYXJhY3RlclRva2VucyA9IFtdO1xuICAgICAgICBwLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgcC5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBwLmluc2VydGlvbk1vZGU7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX1RFWFRfTU9ERTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0NBUFRJT05fTU9ERTtcbn1cblxuZnVuY3Rpb24gY29sZ3JvdXBTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xufVxuXG5mdW5jdGlvbiBjb2xTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuQ09MR1JPVVApO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRib2R5U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9CT0RZX01PREU7XG59XG5cbmZ1bmN0aW9uIHRkU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLlRCT0RZKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5mdW5jdGlvbiB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRBQkxFKTtcblxuICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gaW5wdXRTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgaW5wdXRUeXBlID0gVG9rZW5pemVyLmdldFRva2VuQXR0cih0b2tlbiwgQVRUUlMuVFlQRSk7XG5cbiAgICBpZiAoaW5wdXRUeXBlICYmIGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpID09PSBISURERU5fSU5QVVRfVFlQRSlcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGZvcm1TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmZvcm1FbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIIHx8IHRuID09PSAkLlRSKVxuICAgICAgICAgICAgICAgIHRkU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DT0wpXG4gICAgICAgICAgICAgICAgY29sU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5GT1JNKVxuICAgICAgICAgICAgICAgIGZvcm1TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlRBQkxFKVxuICAgICAgICAgICAgICAgIHRhYmxlU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU1RZTEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRClcbiAgICAgICAgICAgICAgICB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklOUFVUKVxuICAgICAgICAgICAgICAgIGlucHV0U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkNBUFRJT04pXG4gICAgICAgICAgICAgICAgY2FwdGlvblN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQ09MR1JPVVApXG4gICAgICAgICAgICAgICAgY29sZ3JvdXBTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcbiAgICB9XG5cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRBQkxFKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuVEFCTEUpO1xuICAgICAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ0FQVElPTiAmJiB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuQ09MR1JPVVAgJiYgdG4gIT09ICQuSFRNTCAmJlxuICAgICAgICAgICAgIHRuICE9PSAkLlRCT0RZICYmIHRuICE9PSAkLlREICYmIHRuICE9PSAkLlRGT09UICYmIHRuICE9PSAkLlRIICYmIHRuICE9PSAkLlRIRUFEICYmIHRuICE9PSAkLlRSKSB7XG4gICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbkluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgc2F2ZWRGb3N0ZXJQYXJlbnRpbmdTdGF0ZSA9IHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZDtcblxuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHRydWU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuSW5Cb2R5TW9kZSh0b2tlbik7XG4gICAgcC5mb3N0ZXJQYXJlbnRpbmdFbmFibGVkID0gc2F2ZWRGb3N0ZXJQYXJlbnRpbmdTdGF0ZTtcbn1cblxuXG4vLzEyLjIuNS40LjEwIFRoZSBcImluIHRhYmxlIHRleHRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbikge1xuICAgIHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5wdXNoKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdG9rZW5JblRhYmxlVGV4dChwLCB0b2tlbikge1xuICAgIGlmIChwLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0b2tlbkluVGFibGUocCwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zW2ldKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjExIFRoZSBcImluIGNhcHRpb25cIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5DYXB0aW9uKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5DQVBUSU9OIHx8IHRuID09PSAkLkNPTCB8fCB0biA9PT0gJC5DT0xHUk9VUCB8fCB0biA9PT0gJC5UQk9EWSB8fFxuICAgICAgICB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xuICAgICAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5DQVBUSU9OKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5DYXB0aW9uKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5DQVBUSU9OKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5DQVBUSU9OKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuQ0FQVElPTik7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkNBUFRJT04pO1xuXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEJPRFkgJiZcbiAgICAgICAgICAgICB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5URk9PVCAmJiB0biAhPT0gJC5USCAmJiB0biAhPT0gJC5USEVBRCAmJiB0biAhPT0gJC5UUikge1xuICAgICAgICBlbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuXG4vLzEyLjIuNS40LjEyIFRoZSBcImluIGNvbHVtbiBncm91cFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5DT0wpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ09MR1JPVVApIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkNPTEdST1VQKVxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XG5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkNPTClcbiAgICAgICAgdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XG4gICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQ09MR1JPVVApO1xuXG4gICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cbiAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjEzIFRoZSBcImluIHRhYmxlIGJvZHlcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRSKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fUk9XX01PREU7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEQpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLlRSKTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5DQVBUSU9OIHx8IHRuID09PSAkLkNPTCB8fCB0biA9PT0gJC5DT0xHUk9VUCB8fFxuICAgICAgICAgICAgIHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKSB7XG5cbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUoKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZyhwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJblRhYmxlQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUoKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZyhwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCB8fFxuICAgICAgICAgICAgIHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEggJiYgdG4gIT09ICQuVFIpIHtcbiAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxufVxuXG4vLzEyLjIuNS40LjE0IFRoZSBcImluIHJvd1wiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblJvdyhwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEQpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0NFTExfTU9ERTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xuICAgICAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UUik7XG5cbiAgICAgICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cbiAgICAgICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJblJvdyhwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVFIpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRSKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfQk9EWV9NT0RFO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVFIpO1xuXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRSKTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQIHx8XG4gICAgICAgICAgICAgdG4gIT09ICQuSFRNTCAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5USCkge1xuICAgICAgICBlbmRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICB9XG59XG5cblxuLy8xMi4yLjUuNC4xNSBUaGUgXCJpbiBjZWxsXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luQ2VsbChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcbiAgICAgICAgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcblxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVEQpIHx8IHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRIKSkge1xuICAgICAgICAgICAgcC5fY2xvc2VUYWJsZUNlbGwoKTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5DZWxsKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9ST1dfTU9ERTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLl9jbG9zZVRhYmxlQ2VsbCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ0FQVElPTiAmJiB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuQ09MR1JPVVAgJiYgdG4gIT09ICQuSFRNTClcbiAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4xNiBUaGUgXCJpbiBzZWxlY3RcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5TZWxlY3QocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVEdST1VQKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRJT04pXG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLk9QVElPTik7XG5cbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVEdST1VQKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRHUk9VUCk7XG5cbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUKVxuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlNFTEVDVCk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5JTlBVVCB8fCB0biA9PT0gJC5LRVlHRU4gfHwgdG4gPT09ICQuVEVYVEFSRUEpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2VsZWN0U2NvcGUoJC5TRUxFQ1QpKSB7XG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlNFTEVDVCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUIHx8IHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5PUFRHUk9VUCkge1xuICAgICAgICB2YXIgcHJldk9wZW5FbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbcC5vcGVuRWxlbWVudHMuc3RhY2tUb3AgLSAxXSxcbiAgICAgICAgICAgIHByZXZPcGVuRWxlbWVudFRuID0gcHJldk9wZW5FbGVtZW50ICYmIHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwcmV2T3BlbkVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRJT04gJiYgcHJldk9wZW5FbGVtZW50VG4gPT09ICQuT1BUR1JPVVApXG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLk9QVElPTik7XG5cbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVEdST1VQKVxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuT1BUSU9OKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRJT04pXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TRUxFQ1QgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TZWxlY3RTY29wZSgkLlNFTEVDVCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuU0VMRUNUKTtcbiAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMTcgVGhlIFwiaW4gc2VsZWN0IGluIHRhYmxlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0SW5UYWJsZShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUiB8fCB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlNFTEVDVCk7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5TZWxlY3RJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5DQVBUSU9OIHx8IHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8XG4gICAgICAgIHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSIHx8IHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlNFTEVDVCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBlbmRUYWdJblNlbGVjdChwLCB0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMTggVGhlIFwiaW4gdGVtcGxhdGVcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSB8fFxuICAgICAgICB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TQ1JJUFQgfHwgdG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuVElUTEUpIHtcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgbmV3SW5zZXJ0aW9uTW9kZSA9IFRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbdG5dIHx8IElOX0JPRFlfTU9ERTtcblxuICAgICAgICBwLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9wdXNoVG1wbEluc2VydGlvbk1vZGUobmV3SW5zZXJ0aW9uTW9kZSk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IG5ld0luc2VydGlvbk1vZGU7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlbmRUYWdJblRlbXBsYXRlKHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVvZkluVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkKCk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAuX3BvcFRtcGxJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgcC5zdG9wcGVkID0gdHJ1ZTtcbn1cblxuXG4vLzEyLjIuNS40LjE5IFRoZSBcImFmdGVyIGJvZHlcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0FmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpIHtcbiAgICAgICAgaWYgKCFwLmZyYWdtZW50Q29udGV4dClcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0FGVEVSX0JPRFlfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4yMCBUaGUgXCJpbiBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5GUkFNRVNFVClcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5GUkFNRSlcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5OT0ZSQU1FUylcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJbkZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuRlJBTUVTRVQgJiYgIXAub3BlbkVsZW1lbnRzLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCgpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQgJiYgcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgIT09ICQuRlJBTUVTRVQpXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9GUkFNRVNFVF9NT0RFO1xuICAgIH1cbn1cblxuLy8xMi4yLjUuNC4yMSBUaGUgXCJhZnRlciBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5OT0ZSQU1FUylcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTClcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERTtcbn1cblxuLy8xMi4yLjUuNC4yMiBUaGUgXCJhZnRlciBhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkFmdGVyQWZ0ZXJCb2R5KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0JPRFlfTU9ERTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjIzIFRoZSBcImFmdGVyIGFmdGVyIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS41IFRoZSBydWxlcyBmb3IgcGFyc2luZyB0b2tlbnMgaW4gZm9yZWlnbiBjb250ZW50XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gbnVsbENoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICB0b2tlbi5jaGFycyA9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xufVxuXG5mdW5jdGlvbiBjaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIGlmIChGb3JlaWduQ29udGVudC5jYXVzZXNFeGl0KHRva2VuKSAmJiAhcC5mcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgd2hpbGUgKHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpICE9PSBOUy5IVE1MICYmXG4gICAgICAgICAgICAgICAoIXAuX2lzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCkpICYmXG4gICAgICAgICAgICAgICAoIXAuX2lzSHRtbEludGVncmF0aW9uUG9pbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCkpKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gcC5fZ2V0QWRqdXN0ZWRDdXJyZW50RWxlbWVudCgpLFxuICAgICAgICAgICAgY3VycmVudE5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY3VycmVudCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnROcyA9PT0gTlMuTUFUSE1MKVxuICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyh0b2tlbik7XG5cbiAgICAgICAgZWxzZSBpZiAoY3VycmVudE5zID09PSBOUy5TVkcpIHtcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHVGFnTmFtZSh0b2tlbik7XG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR0F0dHJzKHRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuXG4gICAgICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZylcbiAgICAgICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIGN1cnJlbnROcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGN1cnJlbnROcyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG5cbiAgICAgICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpID09PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLnRvTG93ZXJDYXNlKCkgPT09IHRva2VuLnRhZ05hbWUpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsRWxlbWVudFBvcHBlZChlbGVtZW50KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyohXG4gKiBAb3ZlcnZpZXcgZXM2LXByb21pc2UgLSBhIHRpbnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNCBZZWh1ZGEgS2F0eiwgVG9tIERhbGUsIFN0ZWZhbiBQZW5uZXIgYW5kIGNvbnRyaWJ1dG9ycyAoQ29udmVyc2lvbiB0byBFUzYgQVBJIGJ5IEpha2UgQXJjaGliYWxkKVxuICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZVxuICogICAgICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2pha2VhcmNoaWJhbGQvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMi4yLjBcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRvYmplY3RPckZ1bmN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc01heWJlVGhlbmFibGUoeCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5O1xuICAgIGlmICghQXJyYXkuaXNBcnJheSkge1xuICAgICAgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0FycmF5ID0gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheTtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbiA9IDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0O1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkY3VzdG9tU2NoZWR1bGVyRm47XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcChjYWxsYmFjaywgYXJnKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbl0gPSBjYWxsYmFjaztcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuICsgMV0gPSBhcmc7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuICs9IDI7XG4gICAgICBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbiA9PT0gMikge1xuICAgICAgICAvLyBJZiBsZW4gaXMgMiwgdGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gc2NoZWR1bGUgYW4gYXN5bmMgZmx1c2guXG4gICAgICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVkLCB0aGV5XG4gICAgICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICAgICAgaWYgKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRjdXN0b21TY2hlZHVsZXJGbikge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRjdXN0b21TY2hlZHVsZXJGbihsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcDtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRjdXN0b21TY2hlZHVsZXJGbiA9IHNjaGVkdWxlRm47XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyV2luZG93ID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSA/IHdpbmRvdyA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJHbG9iYWwgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyB8fCB7fTtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJHbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3Nlckdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNOb2RlID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHt9LnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJztcblxuICAgIC8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEwXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRpc1dvcmtlciA9IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuICAgIC8vIG5vZGVcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlTmV4dFRpY2soKSB7XG4gICAgICB2YXIgbmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgLy8gbm9kZSB2ZXJzaW9uIDAuMTAueCBkaXNwbGF5cyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hlbiBuZXh0VGljayBpcyB1c2VkIHJlY3Vyc2l2ZWx5XG4gICAgICAvLyBzZXRJbW1lZGlhdGUgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBpbnN0ZWFkXG4gICAgICB2YXIgdmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5tYXRjaCgvXig/OihcXGQrKVxcLik/KD86KFxcZCspXFwuKT8oXFwqfFxcZCspJC8pO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmVyc2lvbikgJiYgdmVyc2lvblsxXSA9PT0gJzAnICYmIHZlcnNpb25bMl0gPT09ICcxMCcpIHtcbiAgICAgICAgbmV4dFRpY2sgPSBzZXRJbW1lZGlhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIG5leHRUaWNrKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHZlcnR4XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVZlcnR4VGltZXIoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR2ZXJ0eE5leHQobGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgbGliJGVzNiRwcm9taXNlJGFzYXAkJEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIG5vZGUuZGF0YSA9IChpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHdlYiB3b3JrZXJcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2g7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlU2V0VGltZW91dCgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgc2V0VGltZW91dChsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gsIDEpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbjsgaSs9Mikge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbaV07XG4gICAgICAgIHZhciBhcmcgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbaSsxXTtcblxuICAgICAgICBjYWxsYmFjayhhcmcpO1xuXG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2krMV0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gPSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhdHRlbXB0VmVydGV4KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHIgPSByZXF1aXJlO1xuICAgICAgICB2YXIgdmVydHggPSByKCd2ZXJ0eCcpO1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0ID0gdmVydHgucnVuT25Mb29wIHx8IHZlcnR4LnJ1bk9uQ29udGV4dDtcbiAgICAgICAgcmV0dXJuIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VWZXJ0eFRpbWVyKCk7XG4gICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgcmV0dXJuIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VTZXRUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoO1xuICAgIC8vIERlY2lkZSB3aGF0IGFzeW5jIG1ldGhvZCB0byB1c2UgdG8gdHJpZ2dlcmluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlZCBjYWxsYmFja3M6XG4gICAgaWYgKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRpc05vZGUpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU5leHRUaWNrKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU11dGF0aW9uT2JzZXJ2ZXIoKTtcbiAgICB9IGVsc2UgaWYgKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRpc1dvcmtlcikge1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2ggPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlTWVzc2FnZUNoYW5uZWwoKTtcbiAgICB9IGVsc2UgaWYgKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGF0dGVtcHRWZXJ0ZXgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2ggPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlU2V0VGltZW91dCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3AoKSB7fVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgICA9IHZvaWQgMDtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEID0gMTtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQgID0gMjtcblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUiA9IG5ldyBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRFcnJvck9iamVjdCgpO1xuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkc2VsZkZ1bGxmaWxsbWVudCgpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRjYW5ub3RSZXR1cm5Pd24oKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGdldFRoZW4ocHJvbWlzZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbjtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1IuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRkZWZhdWx0KGZ1bmN0aW9uKHByb21pc2UpIHtcbiAgICAgICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlUaGVuKHRoZW4sIHRoZW5hYmxlLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIGlmIChzZWFsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhlbmFibGUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgICBpZiAoc2VhbGVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICAgICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTtcblxuICAgICAgICBpZiAoIXNlYWxlZCAmJiBlcnJvcikge1xuICAgICAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSwgcHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUpIHtcbiAgICAgIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICAgICAgfSBlbHNlIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlKSB7XG4gICAgICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB0aGVuID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZ2V0VGhlbihtYXliZVRoZW5hYmxlKTtcblxuICAgICAgICBpZiAodGhlbiA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0Z1bmN0aW9uKHRoZW4pKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlRm9yZWlnblRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKSB7XG4gICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHNlbGZGdWxsZmlsbG1lbnQoKSk7XG4gICAgICB9IGVsc2UgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkb2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgICAgIGlmIChwcm9taXNlLl9vbmVycm9yKSB7XG4gICAgICAgIHByb21pc2UuX29uZXJyb3IocHJvbWlzZS5fcmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaChwcm9taXNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gICAgICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcpIHsgcmV0dXJuOyB9XG5cbiAgICAgIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fc3RhdGUgPSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQ7XG5cbiAgICAgIGlmIChwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGRlZmF1bHQobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaCwgcHJvbWlzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7IHJldHVybjsgfVxuICAgICAgcHJvbWlzZS5fc3RhdGUgPSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRDtcbiAgICAgIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjtcblxuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGRlZmF1bHQobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKSB7XG4gICAgICB2YXIgc3Vic2NyaWJlcnMgPSBwYXJlbnQuX3N1YnNjcmliZXJzO1xuICAgICAgdmFyIGxlbmd0aCA9IHN1YnNjcmliZXJzLmxlbmd0aDtcblxuICAgICAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gICAgICBzdWJzY3JpYmVyc1tsZW5ndGggKyBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRF0gID0gb25SZWplY3Rpb247XG5cbiAgICAgIGlmIChsZW5ndGggPT09IDAgJiYgcGFyZW50Ll9zdGF0ZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkZGVmYXVsdChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoLCBwYXJlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gocHJvbWlzZSkge1xuICAgICAgdmFyIHN1YnNjcmliZXJzID0gcHJvbWlzZS5fc3Vic2NyaWJlcnM7XG4gICAgICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gICAgICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuXG4gICAgICB2YXIgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwgPSBwcm9taXNlLl9yZXN1bHQ7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Vic2NyaWJlcnMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICAgICAgY2FsbGJhY2sgPSBzdWJzY3JpYmVyc1tpICsgc2V0dGxlZF07XG5cbiAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKGRldGFpbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRFcnJvck9iamVjdCgpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IgPSBuZXcgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKTtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHRyeUNhdGNoKGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhkZXRhaWwpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFRSWV9DQVRDSF9FUlJPUi5lcnJvciA9IGU7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICAgICAgdmFyIGhhc0NhbGxiYWNrID0gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgICAgICB2YWx1ZSwgZXJyb3IsIHN1Y2NlZWRlZCwgZmFpbGVkO1xuXG4gICAgICBpZiAoaGFzQ2FsbGJhY2spIHtcbiAgICAgICAgdmFsdWUgPSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgICAgICBpZiAodmFsdWUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFRSWV9DQVRDSF9FUlJPUikge1xuICAgICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRjYW5ub3RSZXR1cm5Pd24oKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZGV0YWlsO1xuICAgICAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcpIHtcbiAgICAgICAgLy8gbm9vcFxuICAgICAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGZhaWxlZCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgZXJyb3IpO1xuICAgICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKXtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yKENvbnN0cnVjdG9yLCBpbnB1dCkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gICAgICBlbnVtZXJhdG9yLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gICAgICBlbnVtZXJhdG9yLnByb21pc2UgPSBuZXcgQ29uc3RydWN0b3IobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkbm9vcCk7XG5cbiAgICAgIGlmIChlbnVtZXJhdG9yLl92YWxpZGF0ZUlucHV0KGlucHV0KSkge1xuICAgICAgICBlbnVtZXJhdG9yLl9pbnB1dCAgICAgPSBpbnB1dDtcbiAgICAgICAgZW51bWVyYXRvci5sZW5ndGggICAgID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBlbnVtZXJhdG9yLl9yZW1haW5pbmcgPSBpbnB1dC5sZW5ndGg7XG5cbiAgICAgICAgZW51bWVyYXRvci5faW5pdCgpO1xuXG4gICAgICAgIGlmIChlbnVtZXJhdG9yLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwoZW51bWVyYXRvci5wcm9taXNlLCBlbnVtZXJhdG9yLl9yZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudW1lcmF0b3IubGVuZ3RoID0gZW51bWVyYXRvci5sZW5ndGggfHwgMDtcbiAgICAgICAgICBlbnVtZXJhdG9yLl9lbnVtZXJhdGUoKTtcbiAgICAgICAgICBpZiAoZW51bWVyYXRvci5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKGVudW1lcmF0b3IucHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChlbnVtZXJhdG9yLnByb21pc2UsIGVudW1lcmF0b3IuX3ZhbGlkYXRpb25FcnJvcigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXQgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgcmV0dXJuIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNBcnJheShpbnB1dCk7XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXknKTtcbiAgICB9O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl9yZXN1bHQgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpO1xuICAgIH07XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvcjtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fZW51bWVyYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgICAgIHZhciBsZW5ndGggID0gZW51bWVyYXRvci5sZW5ndGg7XG4gICAgICB2YXIgcHJvbWlzZSA9IGVudW1lcmF0b3IucHJvbWlzZTtcbiAgICAgIHZhciBpbnB1dCAgID0gZW51bWVyYXRvci5faW5wdXQ7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBwcm9taXNlLl9zdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZW51bWVyYXRvci5fZWFjaEVudHJ5KGlucHV0W2ldLCBpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl9lYWNoRW50cnkgPSBmdW5jdGlvbihlbnRyeSwgaSkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuICAgICAgdmFyIGMgPSBlbnVtZXJhdG9yLl9pbnN0YW5jZUNvbnN0cnVjdG9yO1xuXG4gICAgICBpZiAobGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc01heWJlVGhlbmFibGUoZW50cnkpKSB7XG4gICAgICAgIGlmIChlbnRyeS5jb25zdHJ1Y3RvciA9PT0gYyAmJiBlbnRyeS5fc3RhdGUgIT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcpIHtcbiAgICAgICAgICBlbnRyeS5fb25lcnJvciA9IG51bGw7XG4gICAgICAgICAgZW51bWVyYXRvci5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW51bWVyYXRvci5fd2lsbFNldHRsZUF0KGMucmVzb2x2ZShlbnRyeSksIGkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnVtZXJhdG9yLl9yZW1haW5pbmctLTtcbiAgICAgICAgZW51bWVyYXRvci5fcmVzdWx0W2ldID0gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24oc3RhdGUsIGksIHZhbHVlKSB7XG4gICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG4gICAgICB2YXIgcHJvbWlzZSA9IGVudW1lcmF0b3IucHJvbWlzZTtcblxuICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX3JlbWFpbmluZy0tO1xuXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudW1lcmF0b3IuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnVtZXJhdG9yLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCBlbnVtZXJhdG9yLl9yZXN1bHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3dpbGxTZXR0bGVBdCA9IGZ1bmN0aW9uKHByb21pc2UsIGkpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcblxuICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgZW51bWVyYXRvci5fc2V0dGxlZEF0KGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCwgaSwgdmFsdWUpO1xuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCwgaSwgcmVhc29uKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkYWxsJCRhbGwoZW50cmllcykge1xuICAgICAgcmV0dXJuIG5ldyBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkZGVmYXVsdCh0aGlzLCBlbnRyaWVzKS5wcm9taXNlO1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkYWxsJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkYWxsJCRhbGw7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkcmFjZShlbnRyaWVzKSB7XG4gICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICAgICAgdmFyIHByb21pc2UgPSBuZXcgQ29uc3RydWN0b3IobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkbm9vcCk7XG5cbiAgICAgIGlmICghbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuJykpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxlbmd0aCA9IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgICBmdW5jdGlvbiBvbkZ1bGZpbGxtZW50KHZhbHVlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBvblJlamVjdGlvbihyZWFzb24pIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBwcm9taXNlLl9zdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkc3Vic2NyaWJlKENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSksIHVuZGVmaW5lZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJhY2UkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyYWNlJCRyYWNlO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlc29sdmUkJHJlc29sdmUob2JqZWN0KSB7XG4gICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICAgICAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZXNvbHZlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkcmVzb2x2ZTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZWplY3QkJHJlamVjdChyZWFzb24pIHtcbiAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuICAgICAgdmFyIHByb21pc2UgPSBuZXcgQ29uc3RydWN0b3IobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkbm9vcCk7XG4gICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVqZWN0JCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVqZWN0JCRyZWplY3Q7XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJGNvdW50ZXIgPSAwO1xuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJG5lZWRzUmVzb2x2ZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJG5lZWRzTmV3KCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZTtcbiAgICAvKipcbiAgICAgIFByb21pc2Ugb2JqZWN0cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJlc3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiBUaGVcbiAgICAgIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsIHdoaWNoXG4gICAgICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgICAgIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gICAgICBUZXJtaW5vbG9neVxuICAgICAgLS0tLS0tLS0tLS1cblxuICAgICAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgICAgIC0gYHRoZW5hYmxlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIGEgYHRoZW5gIG1ldGhvZC5cbiAgICAgIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgICAgIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LlxuICAgICAgLSBgcmVhc29uYCBpcyBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoeSBhIHByb21pc2Ugd2FzIHJlamVjdGVkLlxuICAgICAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgICAgIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC5cblxuICAgICAgUHJvbWlzZXMgdGhhdCBhcmUgZnVsZmlsbGVkIGhhdmUgYSBmdWxmaWxsbWVudCB2YWx1ZSBhbmQgYXJlIGluIHRoZSBmdWxmaWxsZWRcbiAgICAgIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgICAgIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLlxuXG4gICAgICBQcm9taXNlcyBjYW4gYWxzbyBiZSBzYWlkIHRvICpyZXNvbHZlKiBhIHZhbHVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBhbHNvIGFcbiAgICAgIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgICAgIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbFxuICAgICAgaXRzZWxmIHJlamVjdCwgYW5kIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgd2lsbFxuICAgICAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICAgICAgQmFzaWMgVXNhZ2U6XG4gICAgICAtLS0tLS0tLS0tLS1cblxuICAgICAgYGBganNcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIC8vIG9uIHN1Y2Nlc3NcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gb24gZmFpbHVyZVxuICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgIH0pO1xuXG4gICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAvLyBvbiByZWplY3Rpb25cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIEFkdmFuY2VkIFVzYWdlOlxuICAgICAgLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAgIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgICAgIGBYTUxIdHRwUmVxdWVzdGBzLlxuXG4gICAgICBgYGBqc1xuICAgICAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdqc29uJztcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgICB4aHIuc2VuZCgpO1xuXG4gICAgICAgICAgZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikge1xuICAgICAgICAvLyBvbiBmdWxmaWxsbWVudFxuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIC8vIG9uIHJlamVjdGlvblxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy5cblxuICAgICAgYGBganNcbiAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgZ2V0SlNPTignL3Bvc3RzJyksXG4gICAgICAgIGdldEpTT04oJy9jb21tZW50cycpXG4gICAgICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT05cbiAgICAgICAgdmFsdWVzWzFdIC8vID0+IGNvbW1lbnRzSlNPTlxuXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBAY2xhc3MgUHJvbWlzZVxuICAgICAgQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXJcbiAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICAgIEBjb25zdHJ1Y3RvclxuICAgICovXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UocmVzb2x2ZXIpIHtcbiAgICAgIHRoaXMuX2lkID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJGNvdW50ZXIrKztcbiAgICAgIHRoaXMuX3N0YXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICAgICAgaWYgKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3AgIT09IHJlc29sdmVyKSB7XG4gICAgICAgIGlmICghbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0Z1bmN0aW9uKHJlc29sdmVyKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc1Jlc29sdmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UpKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJG5lZWRzTmV3KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbml0aWFsaXplUHJvbWlzZSh0aGlzLCByZXNvbHZlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuYWxsID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkYWxsJCRkZWZhdWx0O1xuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLnJhY2UgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyYWNlJCRkZWZhdWx0O1xuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLnJlc29sdmUgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZXNvbHZlJCRkZWZhdWx0O1xuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLnJlamVjdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5fc2V0U2NoZWR1bGVyID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHNldFNjaGVkdWxlcjtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5fYXNhcCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRkZWZhdWx0O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UucHJvdG90eXBlID0ge1xuICAgICAgY29uc3RydWN0b3I6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLFxuXG4gICAgLyoqXG4gICAgICBUaGUgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCxcbiAgICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24odXNlcil7XG4gICAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyB1c2VyIGlzIHVuYXZhaWxhYmxlLCBhbmQgeW91IGFyZSBnaXZlbiB0aGUgcmVhc29uIHdoeVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQ2hhaW5pbmdcbiAgICAgIC0tLS0tLS0tXG5cbiAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgYHRoZW5gIGlzIGl0c2VsZiBhIHByb21pc2UuICBUaGlzIHNlY29uZCwgJ2Rvd25zdHJlYW0nXG4gICAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICByZXR1cm4gJ2RlZmF1bHQgbmFtZSc7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAgIC8vIHdpbGwgYmUgYCdkZWZhdWx0IG5hbWUnYFxuICAgICAgfSk7XG5cbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIHJlamVjdGVkLCBgcmVhc29uYCB3aWxsIGJlICdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jy5cbiAgICAgIH0pO1xuICAgICAgYGBgXG4gICAgICBJZiB0aGUgZG93bnN0cmVhbSBwcm9taXNlIGRvZXMgbm90IHNwZWNpZnkgYSByZWplY3Rpb24gaGFuZGxlciwgcmVqZWN0aW9uIHJlYXNvbnMgd2lsbCBiZSBwcm9wYWdhdGVkIGZ1cnRoZXIgZG93bnN0cmVhbS5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBBc3NpbWlsYXRpb25cbiAgICAgIC0tLS0tLS0tLS0tLVxuXG4gICAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgICAgcmV0cmlldmVkIGFzeW5jaHJvbm91c2x5LiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSByZXR1cm5pbmcgYSBwcm9taXNlIGluIHRoZVxuICAgICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIFRoZSB1c2VyJ3MgY29tbWVudHMgYXJlIG5vdyBhdmFpbGFibGVcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgZnVsZmlsbHMsIHdlJ2xsIGhhdmUgdGhlIHZhbHVlIGhlcmVcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgU2ltcGxlIEV4YW1wbGVcbiAgICAgIC0tLS0tLS0tLS0tLS0tXG5cbiAgICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZFJlc3VsdCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgICAgLS0tLS0tLS0tLS0tLS1cblxuICAgICAgU3luY2hyb25vdXMgRXhhbXBsZVxuXG4gICAgICBgYGBqYXZhc2NyaXB0XG4gICAgICB2YXIgYXV0aG9yLCBib29rcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgICBib29rcyAgPSBmaW5kQm9va3NCeUF1dGhvcihhdXRob3IpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG5cbiAgICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcblxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuXG4gICAgICB9XG5cbiAgICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgZmFpbHVyZShyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZEF1dGhvcigpLlxuICAgICAgICB0aGVuKGZpbmRCb29rc0J5QXV0aG9yKS5cbiAgICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBAbWV0aG9kIHRoZW5cbiAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAgICovXG4gICAgICB0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCAmJiAhb25GdWxmaWxsbWVudCB8fCBzdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQgJiYgIW9uUmVqZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHBhcmVudC5fcmVzdWx0O1xuXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1tzdGF0ZSAtIDFdO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRkZWZhdWx0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCByZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9LFxuXG4gICAgLyoqXG4gICAgICBgY2F0Y2hgIGlzIHNpbXBseSBzdWdhciBmb3IgYHRoZW4odW5kZWZpbmVkLCBvblJlamVjdGlvbilgIHdoaWNoIG1ha2VzIGl0IHRoZSBzYW1lXG4gICAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuXG4gICAgICBgYGBqc1xuICAgICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkbid0IGZpbmQgdGhhdCBhdXRob3InKTtcbiAgICAgIH1cblxuICAgICAgLy8gc3luY2hyb25vdXNcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbmRBdXRob3IoKTtcbiAgICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9XG5cbiAgICAgIC8vIGFzeW5jIHdpdGggcHJvbWlzZXNcbiAgICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQG1ldGhvZCBjYXRjaFxuICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICAgKi9cbiAgICAgICdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRwb2x5ZmlsbCgpIHtcbiAgICAgIHZhciBsb2NhbDtcblxuICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGxvY2FsID0gc2VsZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbG9jYWwgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgICAgaWYgKFAgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKSA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2NhbC5Qcm9taXNlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJGRlZmF1bHQ7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJHBvbHlmaWxsO1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2UgPSB7XG4gICAgICAnUHJvbWlzZSc6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0LFxuICAgICAgJ3BvbHlmaWxsJzogbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0XG4gICAgfTtcblxuICAgIC8qIGdsb2JhbCBkZWZpbmU6dHJ1ZSBtb2R1bGU6dHJ1ZSB3aW5kb3c6IHRydWUgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKSB7XG4gICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7IHJldHVybiBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlOyB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZVsnZXhwb3J0cyddKSB7XG4gICAgICBtb2R1bGVbJ2V4cG9ydHMnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNbJ0VTNlByb21pc2UnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0KCk7XG59KS5jYWxsKHRoaXMpO1xuXG4iLCIvKlxuQ29weXJpZ2h0IChDKSAyMDE1IEZyZWQgSy4gU2Nob3R0IDxma3NjaG90dEBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTMgVGhhZGRlZSBUeWwgPHRoYWRkZWUudHlsQGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPlxuQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEyIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG5Db3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtlc3RlaWpuIDxqb29zdC13aW1AYm9la2VzdGVpam4ubmw+XG5Db3B5cmlnaHQgKEMpIDIwMTIgS3JpcyBLb3dhbCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTIgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEyIEFycGFkIEJvcnNvcyA8YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDExIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4qIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbkFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbkRJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbk9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcblRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuLyplc2xpbnQgbm8tdW5kZWZpbmVkOjAsIG5vLXVzZS1iZWZvcmUtZGVmaW5lOiAwKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzeW50YXggPSByZXF1aXJlKFwiLi9saWIvc3ludGF4XCIpLFxuICAgIHRva2VuSW5mbyA9IHJlcXVpcmUoXCIuL2xpYi90b2tlbi1pbmZvXCIpLFxuICAgIGFzdE5vZGVUeXBlcyA9IHJlcXVpcmUoXCIuL2xpYi9hc3Qtbm9kZS10eXBlc1wiKSxcbiAgICBhc3ROb2RlRmFjdG9yeSA9IHJlcXVpcmUoXCIuL2xpYi9hc3Qtbm9kZS1mYWN0b3J5XCIpLFxuICAgIGRlZmF1bHRGZWF0dXJlcyA9IHJlcXVpcmUoXCIuL2xpYi9mZWF0dXJlc1wiKSxcbiAgICBNZXNzYWdlcyA9IHJlcXVpcmUoXCIuL2xpYi9tZXNzYWdlc1wiKSxcbiAgICBYSFRNTEVudGl0aWVzID0gcmVxdWlyZShcIi4vbGliL3hodG1sLWVudGl0aWVzXCIpLFxuICAgIFN0cmluZ01hcCA9IHJlcXVpcmUoXCIuL2xpYi9zdHJpbmctbWFwXCIpLFxuICAgIGNvbW1lbnRBdHRhY2htZW50ID0gcmVxdWlyZShcIi4vbGliL2NvbW1lbnQtYXR0YWNobWVudFwiKTtcblxudmFyIFRva2VuID0gdG9rZW5JbmZvLlRva2VuLFxuICAgIFRva2VuTmFtZSA9IHRva2VuSW5mby5Ub2tlbk5hbWUsXG4gICAgRm5FeHByVG9rZW5zID0gdG9rZW5JbmZvLkZuRXhwclRva2VucyxcbiAgICBSZWdleCA9IHN5bnRheC5SZWdleCxcbiAgICBQcm9wZXJ0eUtpbmQsXG4gICAgc291cmNlLFxuICAgIHN0cmljdCxcbiAgICBpbmRleCxcbiAgICBsaW5lTnVtYmVyLFxuICAgIGxpbmVTdGFydCxcbiAgICBsZW5ndGgsXG4gICAgbG9va2FoZWFkLFxuICAgIHN0YXRlLFxuICAgIGV4dHJhO1xuXG5Qcm9wZXJ0eUtpbmQgPSB7XG4gICAgRGF0YTogMSxcbiAgICBHZXQ6IDIsXG4gICAgU2V0OiA0XG59O1xuXG5cbi8vIEVuc3VyZSB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90aGVyd2lzZSB0aHJvdyBhbiBlcnJvci5cbi8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRyYWN0IHNlbWFudGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldFxuLy8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4gVGhlIGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2UuXG4vLyBEbyBOT1QgdXNlIHRoaXMgdG8gZW5mb3JjZSBhIGNlcnRhaW4gY29uZGl0aW9uIG9uIGFueSB1c2VyIGlucHV0LlxuXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQVNTRVJUOiBcIiArIG1lc3NhZ2UpO1xuICAgIH1cbn1cblxuLy8gNy40IENvbW1lbnRzXG5cbmZ1bmN0aW9uIGFkZENvbW1lbnQodHlwZSwgdmFsdWUsIHN0YXJ0LCBlbmQsIGxvYykge1xuICAgIHZhciBjb21tZW50O1xuXG4gICAgYXNzZXJ0KHR5cGVvZiBzdGFydCA9PT0gXCJudW1iZXJcIiwgXCJDb21tZW50IG11c3QgaGF2ZSB2YWxpZCBwb3NpdGlvblwiKTtcblxuICAgIC8vIEJlY2F1c2UgdGhlIHdheSB0aGUgYWN0dWFsIHRva2VuIGlzIHNjYW5uZWQsIG9mdGVuIHRoZSBjb21tZW50c1xuICAgIC8vIChpZiBhbnkpIGFyZSBza2lwcGVkIHR3aWNlIGR1cmluZyB0aGUgbGV4aWNhbCBhbmFseXNpcy5cbiAgICAvLyBUaHVzLCB3ZSBuZWVkIHRvIHNraXAgYWRkaW5nIGEgY29tbWVudCBpZiB0aGUgY29tbWVudCBhcnJheSBhbHJlYWR5XG4gICAgLy8gaGFuZGxlZCBpdC5cbiAgICBpZiAoc3RhdGUubGFzdENvbW1lbnRTdGFydCA+PSBzdGFydCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPSBzdGFydDtcblxuICAgIGNvbW1lbnQgPSB7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH07XG4gICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgIGNvbW1lbnQucmFuZ2UgPSBbc3RhcnQsIGVuZF07XG4gICAgfVxuICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgY29tbWVudC5sb2MgPSBsb2M7XG4gICAgfVxuICAgIGV4dHJhLmNvbW1lbnRzLnB1c2goY29tbWVudCk7XG5cbiAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkge1xuICAgICAgICBjb21tZW50QXR0YWNobWVudC5hZGRDb21tZW50KGNvbW1lbnQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2tpcFNpbmdsZUxpbmVDb21tZW50KG9mZnNldCkge1xuICAgIHZhciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDtcblxuICAgIHN0YXJ0ID0gaW5kZXggLSBvZmZzZXQ7XG4gICAgbG9jID0ge1xuICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSBvZmZzZXRcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgbG9jLmVuZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoXCJMaW5lXCIsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCAtIDEsIGxvYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2ggPT09IDEzICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXgpO1xuICAgICAgICBsb2MuZW5kID0ge1xuICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgfTtcbiAgICAgICAgYWRkQ29tbWVudChcIkxpbmVcIiwgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2tpcE11bHRpTGluZUNvbW1lbnQoKSB7XG4gICAgdmFyIHN0YXJ0LCBsb2MsIGNoLCBjb21tZW50O1xuXG4gICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7XG4gICAgICAgIHN0YXJ0ID0gaW5kZXggLSAyO1xuICAgICAgICBsb2MgPSB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkge1xuICAgICAgICAgICAgLy8gQmxvY2sgY29tbWVudCBlbmRzIHdpdGggXCIqL1wiLlxuICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MkYpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAyLCBpbmRleCAtIDIpO1xuICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ29tbWVudChcIkJsb2NrXCIsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbn1cblxuZnVuY3Rpb24gc2tpcENvbW1lbnQoKSB7XG4gICAgdmFyIGNoLCBzdGFydDtcblxuICAgIHN0YXJ0ID0gKGluZGV4ID09PSAwKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAgICAgaWYgKHN5bnRheC5pc1doaXRlU3BhY2UoY2gpKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9IGVsc2UgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MEEpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICBzdGFydCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkYpIHsgLy8gVSswMDJGIGlzIFwiL1wiXG4gICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4MkYpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDIpO1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsgIC8vIFUrMDAyQSBpcyBcIipcIlxuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICBza2lwTXVsdGlMaW5lQ29tbWVudCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGFydCAmJiBjaCA9PT0gMHgyRCkgeyAvLyBVKzAwMkQgaXMgXCItXCJcbiAgICAgICAgICAgIC8vIFUrMDAzRSBpcyBcIj5cIlxuICAgICAgICAgICAgaWYgKChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDJEKSAmJiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAyKSA9PT0gMHgzRSkpIHtcbiAgICAgICAgICAgICAgICAvLyBcIi0tPlwiIGlzIGEgc2luZ2xlLWxpbmUgY29tbWVudFxuICAgICAgICAgICAgICAgIGluZGV4ICs9IDM7XG4gICAgICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzQykgeyAvLyBVKzAwM0MgaXMgXCI8XCJcbiAgICAgICAgICAgIGlmIChzb3VyY2Uuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDQpID09PSBcIiEtLVwiKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYDxgXG4gICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYCFgXG4gICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gXG4gICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gXG4gICAgICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkge1xuICAgIHZhciBpLCBsZW4sIGNoLCBjb2RlID0gMDtcblxuICAgIGxlbiA9IChwcmVmaXggPT09IFwidVwiKSA/IDQgOiAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgc3ludGF4LmlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArIFwiMDEyMzQ1Njc4OWFiY2RlZlwiLmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbn1cblxuLyoqXG4gKiBTY2FucyBhbiBleHRlbmRlZCB1bmljb2RlIGNvZGUgcG9pbnQgZXNjYXBlIHNlcXVlbmNlIGZyb20gc291cmNlLiBUaHJvd3MgYW5cbiAqIGVycm9yIGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSBvciBpZiB0aGUgY29kZSBwb2ludCB2YWx1ZSBpcyB0b28gbGFyZ2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nIGNyZWF0ZWQgYnkgdGhlIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKSB7XG4gICAgdmFyIGNoLCBjb2RlLCBjdTEsIGN1MjtcblxuICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICBjb2RlID0gMDtcblxuICAgIC8vIEF0IGxlYXN0IG9uZSBoZXggZGlnaXQgaXMgcmVxdWlyZWQuXG4gICAgaWYgKGNoID09PSBcIn1cIikge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIGlmICghc3ludGF4LmlzSGV4RGlnaXQoY2gpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgXCIwMTIzNDU2Nzg5YWJjZGVmXCIuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBpZiAoY29kZSA+IDB4MTBGRkZGIHx8IGNoICE9PSBcIn1cIikge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICAvLyBVVEYtMTYgRW5jb2RpbmdcbiAgICBpZiAoY29kZSA8PSAweEZGRkYpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgfVxuICAgIGN1MSA9ICgoY29kZSAtIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMDtcbiAgICBjdTIgPSAoKGNvZGUgLSAweDEwMDAwKSAmIDEwMjMpICsgMHhEQzAwO1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGN1MSwgY3UyKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSB7XG4gICAgdmFyIGNoLCBpZDtcblxuICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgrKyk7XG4gICAgaWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgIC8vIFwiXFx1XCIgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgIGlmIChjaCA9PT0gMHg1Qykge1xuICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgfVxuICAgICAgICArK2luZGV4O1xuICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoXCJ1XCIpO1xuICAgICAgICBpZiAoIWNoIHx8IGNoID09PSBcIlxcXFxcIiB8fCAhc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZCA9IGNoO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKCFzeW50YXguaXNJZGVudGlmaWVyUGFydChjaCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIGlkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gICAgICAgIC8vIFwiXFx1XCIgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHtcbiAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZShcInVcIik7XG4gICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09PSBcIlxcXFxcIiB8fCAhc3ludGF4LmlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkge1xuICAgIHZhciBzdGFydCwgY2g7XG5cbiAgICBzdGFydCA9IGluZGV4Kys7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHtcbiAgICAgICAgICAgIC8vIEJsYWNrc2xhc2ggKFUrMDA1QykgbWFya3MgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICBpbmRleCA9IHN0YXJ0O1xuICAgICAgICAgICAgcmV0dXJuIGdldEVzY2FwZWRJZGVudGlmaWVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJQYXJ0KGNoKSkge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpO1xufVxuXG5mdW5jdGlvbiBzY2FuSWRlbnRpZmllcigpIHtcbiAgICB2YXIgc3RhcnQsIGlkLCB0eXBlO1xuXG4gICAgc3RhcnQgPSBpbmRleDtcblxuICAgIC8vIEJhY2tzbGFzaCAoVSswMDVDKSBzdGFydHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgaWQgPSAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDVDKSA/IGdldEVzY2FwZWRJZGVudGlmaWVyKCkgOiBnZXRJZGVudGlmaWVyKCk7XG5cbiAgICAvLyBUaGVyZSBpcyBubyBrZXl3b3JkIG9yIGxpdGVyYWwgd2l0aCBvbmx5IG9uZSBjaGFyYWN0ZXIuXG4gICAgLy8gVGh1cywgaXQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLlxuICAgIGlmIChpZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7XG4gICAgfSBlbHNlIGlmIChzeW50YXguaXNLZXl3b3JkKGlkLCBzdHJpY3QsIGV4dHJhLmVjbWFGZWF0dXJlcykpIHtcbiAgICAgICAgdHlwZSA9IFRva2VuLktleXdvcmQ7XG4gICAgfSBlbHNlIGlmIChpZCA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgdHlwZSA9IFRva2VuLk51bGxMaXRlcmFsO1xuICAgIH0gZWxzZSBpZiAoaWQgPT09IFwidHJ1ZVwiIHx8IGlkID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgdHlwZSA9IFRva2VuLkJvb2xlYW5MaXRlcmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHZhbHVlOiBpZCxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cblxuLy8gNy43IFB1bmN0dWF0b3JzXG5cbmZ1bmN0aW9uIHNjYW5QdW5jdHVhdG9yKCkge1xuICAgIHZhciBzdGFydCA9IGluZGV4LFxuICAgICAgICBjb2RlID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpLFxuICAgICAgICBjb2RlMixcbiAgICAgICAgY2gxID0gc291cmNlW2luZGV4XSxcbiAgICAgICAgY2gyLFxuICAgICAgICBjaDMsXG4gICAgICAgIGNoNDtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAvLyBDaGVjayBmb3IgbW9zdCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy5cbiAgICAgICAgY2FzZSA0MDogICAvLyAoIG9wZW4gYnJhY2tldFxuICAgICAgICBjYXNlIDQxOiAgIC8vICkgY2xvc2UgYnJhY2tldFxuICAgICAgICBjYXNlIDU5OiAgIC8vIDsgc2VtaWNvbG9uXG4gICAgICAgIGNhc2UgNDQ6ICAgLy8gLCBjb21tYVxuICAgICAgICBjYXNlIDkxOiAgIC8vIFtcbiAgICAgICAgY2FzZSA5MzogICAvLyBdXG4gICAgICAgIGNhc2UgNTg6ICAgLy8gOlxuICAgICAgICBjYXNlIDYzOiAgIC8vID9cbiAgICAgICAgY2FzZSAxMjY6ICAvLyB+XG4gICAgICAgICAgICArK2luZGV4O1xuXG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUgJiYgY29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgICAgICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9IGV4dHJhLnRva2Vucy5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSxcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcblxuICAgICAgICBjYXNlIDEyMzogIC8vIHsgb3BlbiBjdXJseSBicmFjZVxuICAgICAgICBjYXNlIDEyNTogIC8vIH0gY2xvc2UgY3VybHkgYnJhY2VcbiAgICAgICAgICAgICsraW5kZXg7XG5cbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjb2RlID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IGV4dHJhLnRva2Vucy5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvb2thaGVhZDIgZnVuY3Rpb24gY2FuIGNhdXNlIHRva2VucyB0byBiZSBzY2FubmVkIHR3aWNlIGFuZCBpbiBkb2luZyBzb1xuICAgICAgICAgICAgLy8gd291bGQgd3JlY2sgdGhlIGN1cmx5IHN0YWNrIGJ5IHB1c2hpbmcgdGhlIHNhbWUgdG9rZW4gb250byB0aGUgc3RhY2sgdHdpY2UuXG4gICAgICAgICAgICAvLyBjdXJseUxhc3RJbmRleCBlbnN1cmVzIGVhY2ggdG9rZW4gaXMgcHVzaGVkIG9yIHBvcHBlZCBleGFjdGx5IG9uY2VcbiAgICAgICAgICAgIGlmIChpbmRleCA+IHN0YXRlLmN1cmx5TGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuY3VybHlMYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gMTIzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucHVzaChcIntcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSxcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29kZTIgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpO1xuXG4gICAgICAgICAgICAvLyBcIj1cIiAoY2hhciAjNjEpIG1hcmtzIGFuIGFzc2lnbm1lbnQgb3IgY29tcGFyaXNvbiBvcGVyYXRvci5cbiAgICAgICAgICAgIGlmIChjb2RlMiA9PT0gNjEpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzNzogIC8vICVcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzODogIC8vICZcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MjogIC8vICo6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDM6ICAvLyArXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDU6ICAvLyAtXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDc6ICAvLyAvXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjA6ICAvLyA8XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjI6ICAvLyA+XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgOTQ6ICAvLyBeXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTI0OiAvLyB8XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpICsgU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzMzogLy8gIVxuICAgICAgICAgICAgICAgICAgICBjYXNlIDYxOiAvLyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAhPT0gYW5kID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gNjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFBlZWsgbW9yZSBjaGFyYWN0ZXJzLlxuXG4gICAgY2gyID0gc291cmNlW2luZGV4ICsgMV07XG4gICAgY2gzID0gc291cmNlW2luZGV4ICsgMl07XG4gICAgY2g0ID0gc291cmNlW2luZGV4ICsgM107XG5cbiAgICAvLyA0LWNoYXJhY3RlciBwdW5jdHVhdG9yOiA+Pj49XG5cbiAgICBpZiAoY2gxID09PSBcIj5cIiAmJiBjaDIgPT09IFwiPlwiICYmIGNoMyA9PT0gXCI+XCIpIHtcbiAgICAgICAgaWYgKGNoNCA9PT0gXCI9XCIpIHtcbiAgICAgICAgICAgIGluZGV4ICs9IDQ7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiPj4+PVwiLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6ID09PSAhPT0gPj4+IDw8PSA+Pj1cblxuICAgIGlmIChjaDEgPT09IFwiPlwiICYmIGNoMiA9PT0gXCI+XCIgJiYgY2gzID09PSBcIj5cIikge1xuICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBcIj4+PlwiLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGNoMSA9PT0gXCI8XCIgJiYgY2gyID09PSBcIjxcIiAmJiBjaDMgPT09IFwiPVwiKSB7XG4gICAgICAgIGluZGV4ICs9IDM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IFwiPDw9XCIsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2gxID09PSBcIj5cIiAmJiBjaDIgPT09IFwiPlwiICYmIGNoMyA9PT0gXCI9XCIpIHtcbiAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogXCI+Pj1cIixcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFRoZSAuLi4gb3BlcmF0b3IgKHNwcmVhZCwgcmVzdFBhcmFtcywgSlNYLCBldGMuKVxuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMuc3ByZWFkIHx8XG4gICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlcy5yZXN0UGFyYW1zIHx8XG4gICAgICAgIChleHRyYS5lY21hRmVhdHVyZXMuanN4ICYmIHN0YXRlLmluSlNYU3ByZWFkQXR0cmlidXRlKVxuICAgICkge1xuICAgICAgICBpZiAoY2gxID09PSBcIi5cIiAmJiBjaDIgPT09IFwiLlwiICYmIGNoMyA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgIGluZGV4ICs9IDM7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiLi4uXCIsXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPdGhlciAyLWNoYXJhY3RlciBwdW5jdHVhdG9yczogKysgLS0gPDwgPj4gJiYgfHxcbiAgICBpZiAoY2gxID09PSBjaDIgJiYgKFwiKy08PiZ8XCIuaW5kZXhPZihjaDEpID49IDApKSB7XG4gICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IGNoMSArIGNoMixcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIHRoZSA9PiBmb3IgYXJyb3cgZnVuY3Rpb25zXG4gICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5hcnJvd0Z1bmN0aW9ucykge1xuICAgICAgICBpZiAoY2gxID09PSBcIj1cIiAmJiBjaDIgPT09IFwiPlwiKSB7XG4gICAgICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBcIj0+XCIsXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXCI8Pj0hKy0qJSZ8Xi9cIi5pbmRleE9mKGNoMSkgPj0gMCkge1xuICAgICAgICArK2luZGV4O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBjaDEsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2gxID09PSBcIi5cIikge1xuICAgICAgICArK2luZGV4O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBjaDEsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbn1cblxuLy8gNy44LjMgTnVtZXJpYyBMaXRlcmFsc1xuXG5mdW5jdGlvbiBzY2FuSGV4TGl0ZXJhbChzdGFydCkge1xuICAgIHZhciBudW1iZXIgPSBcIlwiO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmICghc3ludGF4LmlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogcGFyc2VJbnQoXCIweFwiICsgbnVtYmVyLCAxNiksXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuQmluYXJ5TGl0ZXJhbChzdGFydCkge1xuICAgIHZhciBjaCwgbnVtYmVyID0gXCJcIjtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmIChjaCAhPT0gXCIwXCIgJiYgY2ggIT09IFwiMVwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgIH1cblxuICAgIGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIG9ubHkgMGIgb3IgMEJcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG5cbiAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoY2gpIHx8IHN5bnRheC5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDIpLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2Nhbk9jdGFsTGl0ZXJhbChwcmVmaXgsIHN0YXJ0KSB7XG4gICAgdmFyIG51bWJlciwgb2N0YWw7XG5cbiAgICBpZiAoc3ludGF4LmlzT2N0YWxEaWdpdChwcmVmaXgpKSB7XG4gICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgbnVtYmVyID0gXCIwXCIgKyBzb3VyY2VbaW5kZXgrK107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2N0YWwgPSBmYWxzZTtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgbnVtYmVyID0gXCJcIjtcbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKCFzeW50YXguaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgIH1cblxuICAgIGlmICghb2N0YWwgJiYgbnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBvbmx5IDBvIG9yIDBPXG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSB8fCBzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgOCksXG4gICAgICAgIG9jdGFsOiBvY3RhbCxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5OdW1lcmljTGl0ZXJhbCgpIHtcbiAgICB2YXIgbnVtYmVyLCBzdGFydCwgY2g7XG5cbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgYXNzZXJ0KHN5bnRheC5pc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSB8fCAoY2ggPT09IFwiLlwiKSxcbiAgICAgICAgXCJOdW1lcmljIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgZGVjaW1hbCBkaWdpdCBvciBhIGRlY2ltYWwgcG9pbnRcIik7XG5cbiAgICBzdGFydCA9IGluZGV4O1xuICAgIG51bWJlciA9IFwiXCI7XG4gICAgaWYgKGNoICE9PSBcIi5cIikge1xuICAgICAgICBudW1iZXIgPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcblxuICAgICAgICAvLyBIZXggbnVtYmVyIHN0YXJ0cyB3aXRoIFwiMHhcIi5cbiAgICAgICAgLy8gT2N0YWwgbnVtYmVyIHN0YXJ0cyB3aXRoIFwiMFwiLlxuICAgICAgICBpZiAobnVtYmVyID09PSBcIjBcIikge1xuICAgICAgICAgICAgaWYgKGNoID09PSBcInhcIiB8fCBjaCA9PT0gXCJYXCIpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuSGV4TGl0ZXJhbChzdGFydCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJpbmFyeSBudW1iZXIgaW4gRVM2IHN0YXJ0cyB3aXRoICcwYidcbiAgICAgICAgICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMuYmluYXJ5TGl0ZXJhbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IFwiYlwiIHx8IGNoID09PSBcIkJcIikge1xuICAgICAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkJpbmFyeUxpdGVyYWwoc3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKChleHRyYS5lY21hRmVhdHVyZXMub2N0YWxMaXRlcmFscyAmJiAoY2ggPT09IFwib1wiIHx8IGNoID09PSBcIk9cIikpIHx8IHN5bnRheC5pc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZGVjaW1hbCBudW1iZXIgc3RhcnRzIHdpdGggXCIwXCIgc3VjaCBhcyBcIjA5XCIgaXMgaWxsZWdhbC5cbiAgICAgICAgICAgIGlmIChjaCAmJiBzeW50YXguaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgfVxuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSBcIi5cIikge1xuICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB3aGlsZSAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIH1cbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gXCJlXCIgfHwgY2ggPT09IFwiRVwiKSB7XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09IFwiK1wiIHx8IGNoID09PSBcIi1cIikge1xuICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgIHdoaWxlIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKSxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbi8qKlxuICogU2NhbiBhIHN0cmluZyBlc2NhcGUgc2VxdWVuY2UgYW5kIHJldHVybiBpdHMgc3BlY2lhbCBjaGFyYWN0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2ggVGhlIHN0YXJ0aW5nIGNoYXJhY3RlciBvZiB0aGUgZ2l2ZW4gc2VxdWVuY2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY2hhcmFjdGVyIGFuZCBhIGZsYWdcbiAqIGlmIHRoZSBlc2NhcGUgc2VxdWVuY2Ugd2FzIGFuIG9jdGFsLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2NhbkVzY2FwZVNlcXVlbmNlKGNoKSB7XG4gICAgdmFyIGNvZGUsXG4gICAgICAgIHVuZXNjYXBlZCxcbiAgICAgICAgcmVzdG9yZSxcbiAgICAgICAgZXNjYXBlZENoLFxuICAgICAgICBvY3RhbCA9IGZhbHNlO1xuXG4gICAgLy8gQW4gZXNjYXBlIHNlcXVlbmNlIGNhbm5vdCBiZSBlbXB0eVxuICAgIGlmICghY2gpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgaWYgKGNoID09PSBcIlxcclwiICYmIHNvdXJjZVtpbmRleF0gPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ1XCIgJiYgc291cmNlW2luZGV4XSA9PT0gXCJ7XCIpIHtcbiAgICAgICAgLy8gSGFuZGxlIEVTNiBleHRlbmRlZCB1bmljb2RlIGNvZGUgcG9pbnQgZXNjYXBlIHNlcXVlbmNlcy5cbiAgICAgICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy51bmljb2RlQ29kZVBvaW50RXNjYXBlcykge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGVzY2FwZWRDaCA9IHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwidVwiIHx8IGNoID09PSBcInhcIikge1xuICAgICAgICAvLyBIYW5kbGUgb3RoZXIgdW5pY29kZSBhbmQgaGV4IGNvZGVzIG5vcm1hbGx5XG4gICAgICAgIHJlc3RvcmUgPSBpbmRleDtcbiAgICAgICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7XG4gICAgICAgIGlmICh1bmVzY2FwZWQpIHtcbiAgICAgICAgICAgIGVzY2FwZWRDaCA9IHVuZXNjYXBlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTtcbiAgICAgICAgICAgIGVzY2FwZWRDaCA9IGNoO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJuXCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXG5cIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInJcIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcclwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwidFwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFx0XCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJiXCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXGJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcImZcIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcZlwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwidlwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFx2XCI7XG4gICAgfSBlbHNlIGlmIChzeW50YXguaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgICBjb2RlID0gXCIwMTIzNDU2N1wiLmluZGV4T2YoY2gpO1xuXG4gICAgICAgIC8vIFxcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlXG4gICAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgICAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgc3ludGF4LmlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgb2N0YWwgPSB0cnVlO1xuICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgXCIwMTIzNDU2N1wiLmluZGV4T2Yoc291cmNlW2luZGV4KytdKTtcblxuICAgICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmluZyBzdGFydHMgd2l0aCAwLCAxLCAyLCAzXG4gICAgICAgICAgICBpZiAoXCIwMTIzXCIuaW5kZXhPZihjaCkgPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBzeW50YXguaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgXCIwMTIzNDU2N1wiLmluZGV4T2Yoc291cmNlW2luZGV4KytdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlc2NhcGVkQ2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IGNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGNoOiBlc2NhcGVkQ2gsXG4gICAgICAgIG9jdGFsOiBvY3RhbFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5TdHJpbmdMaXRlcmFsKCkge1xuICAgIHZhciBzdHIgPSBcIlwiLFxuICAgICAgICBjaCxcbiAgICAgICAgZXNjYXBlZFNlcXVlbmNlLFxuICAgICAgICBvY3RhbCA9IGZhbHNlLFxuICAgICAgICBzdGFydCA9IGluZGV4LFxuICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyLFxuICAgICAgICBzdGFydExpbmVTdGFydCA9IGxpbmVTdGFydCxcbiAgICAgICAgcXVvdGUgPSBzb3VyY2VbaW5kZXhdO1xuXG4gICAgYXNzZXJ0KChxdW90ZSA9PT0gXCInXCIgfHwgcXVvdGUgPT09IFwiXFxcIlwiKSxcbiAgICAgICAgXCJTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGVcIik7XG5cbiAgICArK2luZGV4O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuXG4gICAgICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IHF1b3RlKSB7XG4gICAgICAgICAgICBxdW90ZSA9IFwiXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgZXNjYXBlZFNlcXVlbmNlID0gc2NhbkVzY2FwZVNlcXVlbmNlKGNoKTtcbiAgICAgICAgICAgIHN0ciArPSBlc2NhcGVkU2VxdWVuY2UuY2g7XG4gICAgICAgICAgICBvY3RhbCA9IGVzY2FwZWRTZXF1ZW5jZS5vY3RhbCB8fCBvY3RhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChxdW90ZSAhPT0gXCJcIikge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5TdHJpbmdMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogc3RyLFxuICAgICAgICBvY3RhbDogb2N0YWwsXG4gICAgICAgIHN0YXJ0TGluZU51bWJlcjogc3RhcnRMaW5lTnVtYmVyLFxuICAgICAgICBzdGFydExpbmVTdGFydDogc3RhcnRMaW5lU3RhcnQsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG4vKipcbiAqIFNjYW4gYSB0ZW1wbGF0ZSBzdHJpbmcgYW5kIHJldHVybiBhIHRva2VuLiBUaGlzIHNjYW5zIGJvdGggdGhlIGZpcnN0IGFuZFxuICogc3Vic2VxdWVudCBwaWVjZXMgb2YgYSB0ZW1wbGF0ZSBzdHJpbmcgYW5kIGFzc3VtZXMgdGhhdCB0aGUgZmlyc3QgYmFja3RpY2tcbiAqIG9yIHRoZSBjbG9zaW5nIH0gaGF2ZSBhbHJlYWR5IGJlZW4gc2Nhbm5lZC5cbiAqIEByZXR1cm5zIHtUb2tlbn0gVGhlIHRlbXBsYXRlIHN0cmluZyB0b2tlbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNjYW5UZW1wbGF0ZSgpIHtcbiAgICB2YXIgY29va2VkID0gXCJcIixcbiAgICAgICAgY2gsXG4gICAgICAgIGVzY2FwZWRTZXF1ZW5jZSxcbiAgICAgICAgc3RhcnQgPSBpbmRleCxcbiAgICAgICAgdGVybWluYXRlZCA9IGZhbHNlLFxuICAgICAgICB0YWlsID0gZmFsc2UsXG4gICAgICAgIGhlYWQgPSAoc291cmNlW2luZGV4XSA9PT0gXCJgXCIpO1xuXG4gICAgKytpbmRleDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgICAgICBpZiAoY2ggPT09IFwiYFwiKSB7XG4gICAgICAgICAgICB0YWlsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiJFwiKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29va2VkICs9IGNoO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBlc2NhcGVkU2VxdWVuY2UgPSBzY2FuRXNjYXBlU2VxdWVuY2UoY2gpO1xuXG4gICAgICAgICAgICBpZiAoZXNjYXBlZFNlcXVlbmNlLm9jdGFsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb29rZWQgKz0gZXNjYXBlZFNlcXVlbmNlLmNoO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICsrbGluZU51bWJlcjtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJcXHJcIiAmJiBzb3VyY2VbaW5kZXhdID09PSBcIlxcblwiKSB7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgY29va2VkICs9IFwiXFxuXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb29rZWQgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRlcm1pbmF0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID4gc3RhdGUuY3VybHlMYXN0SW5kZXgpIHtcbiAgICAgICAgc3RhdGUuY3VybHlMYXN0SW5kZXggPSBpbmRleDtcblxuICAgICAgICBpZiAoIXRhaWwpIHtcbiAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucHVzaChcInRlbXBsYXRlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoZWFkKSB7XG4gICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uVGVtcGxhdGUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBjb29rZWQ6IGNvb2tlZCxcbiAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHN0YXJ0ICsgMSwgaW5kZXggLSAoKHRhaWwpID8gMSA6IDIpKVxuICAgICAgICB9LFxuICAgICAgICBoZWFkOiBoZWFkLFxuICAgICAgICB0YWlsOiB0YWlsLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gdGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFncykge1xuICAgIHZhciB0bXAgPSBwYXR0ZXJuLFxuICAgICAgICB2YWxpZEZsYWdzID0gXCJnbXNpXCI7XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLnJlZ2V4WUZsYWcpIHtcbiAgICAgICAgdmFsaWRGbGFncyArPSBcInlcIjtcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLnJlZ2V4VUZsYWcpIHtcbiAgICAgICAgdmFsaWRGbGFncyArPSBcInVcIjtcbiAgICB9XG5cbiAgICBpZiAoIVJlZ0V4cChcIl5bXCIgKyB2YWxpZEZsYWdzICsgXCJdKiRcIikudGVzdChmbGFncykpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cEZsYWcpO1xuICAgIH1cblxuXG4gICAgaWYgKGZsYWdzLmluZGV4T2YoXCJ1XCIpID49IDApIHtcbiAgICAgICAgLy8gUmVwbGFjZSBlYWNoIGFzdHJhbCBzeW1ib2wgYW5kIGV2ZXJ5IFVuaWNvZGUgY29kZSBwb2ludFxuICAgICAgICAvLyBlc2NhcGUgc2VxdWVuY2Ugd2l0aCBhIHNpbmdsZSBBU0NJSSBzeW1ib2wgdG8gYXZvaWQgdGhyb3dpbmcgb25cbiAgICAgICAgLy8gcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGFyZSBvbmx5IHZhbGlkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlXG4gICAgICAgIC8vIGAvdWAgZmxhZy5cbiAgICAgICAgLy8gTm90ZTogcmVwbGFjaW5nIHdpdGggdGhlIEFTQ0lJIHN5bWJvbCBgeGAgbWlnaHQgY2F1c2UgZmFsc2VcbiAgICAgICAgLy8gbmVnYXRpdmVzIGluIHVubGlrZWx5IHNjZW5hcmlvcy4gRm9yIGV4YW1wbGUsIGBbXFx1ezYxfS1iXWAgaXMgYVxuICAgICAgICAvLyBwZXJmZWN0bHkgdmFsaWQgcGF0dGVybiB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gYFthLWJdYCwgYnV0IGl0XG4gICAgICAgIC8vIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IGBbeC1iXWAgd2hpY2ggdGhyb3dzIGFuIGVycm9yLlxuICAgICAgICB0bXAgPSB0bXBcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcdVxceyhbMC05YS1mQS1GXSspXFx9L2csIGZ1bmN0aW9uICgkMCwgJDEpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoJDEsIDE2KSA8PSAweDEwRkZGRikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ4XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRSZWdFeHApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2csIFwieFwiKTtcbiAgICB9XG5cbiAgICAvLyBGaXJzdCwgZGV0ZWN0IGludmFsaWQgcmVndWxhciBleHByZXNzaW9ucy5cbiAgICB0cnkge1xuICAgICAgICBSZWdFeHAodG1wKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRSZWdFeHApO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIHRoaXMgcGF0dGVybi1mbGFnIHBhaXIsIG9yXG4gICAgLy8gYG51bGxgIGluIGNhc2UgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBmbGFncyBpdFxuICAgIC8vIHVzZXMuXG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNjYW5SZWdFeHBCb2R5KCkge1xuICAgIHZhciBjaCwgc3RyLCBjbGFzc01hcmtlciwgdGVybWluYXRlZCwgYm9keTtcblxuICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICBhc3NlcnQoY2ggPT09IFwiL1wiLCBcIlJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoXCIpO1xuICAgIHN0ciA9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgIGNsYXNzTWFya2VyID0gZmFsc2U7XG4gICAgdGVybWluYXRlZCA9IGZhbHNlO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICBpZiAoY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIC8vIEVDTUEtMjYyIDcuOC41XG4gICAgICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICB9IGVsc2UgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApO1xuICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTWFya2VyKSB7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwiXVwiKSB7XG4gICAgICAgICAgICAgICAgY2xhc3NNYXJrZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiW1wiKSB7XG4gICAgICAgICAgICAgICAgY2xhc3NNYXJrZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0ZXJtaW5hdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7XG4gICAgfVxuXG4gICAgLy8gRXhjbHVkZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaC5cbiAgICBib2R5ID0gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGJvZHksXG4gICAgICAgIGxpdGVyYWw6IHN0clxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5SZWdFeHBGbGFncygpIHtcbiAgICB2YXIgY2gsIHN0ciwgZmxhZ3MsIHJlc3RvcmU7XG5cbiAgICBzdHIgPSBcIlwiO1xuICAgIGZsYWdzID0gXCJcIjtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICBpZiAoIXN5bnRheC5pc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIGlmIChjaCA9PT0gXCJcXFxcXCIgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJ1XCIpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDtcbiAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoXCJ1XCIpO1xuICAgICAgICAgICAgICAgIGlmIChjaCkge1xuICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChzdHIgKz0gXCJcXFxcdVwiOyByZXN0b3JlIDwgaW5kZXg7ICsrcmVzdG9yZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHNvdXJjZVtyZXN0b3JlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gXCJ1XCI7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBcIlxcXFx1XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSBcIlxcXFxcIjtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmxhZ3MgKz0gY2g7XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogZmxhZ3MsXG4gICAgICAgIGxpdGVyYWw6IHN0clxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5SZWdFeHAoKSB7XG4gICAgdmFyIHN0YXJ0LCBib2R5LCBmbGFncywgdmFsdWU7XG5cbiAgICBsb29rYWhlYWQgPSBudWxsO1xuICAgIHNraXBDb21tZW50KCk7XG4gICAgc3RhcnQgPSBpbmRleDtcblxuICAgIGJvZHkgPSBzY2FuUmVnRXhwQm9keSgpO1xuICAgIGZsYWdzID0gc2NhblJlZ0V4cEZsYWdzKCk7XG4gICAgdmFsdWUgPSB0ZXN0UmVnRXhwKGJvZHkudmFsdWUsIGZsYWdzLnZhbHVlKTtcblxuICAgIGlmIChleHRyYS50b2tlbml6ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUmVndWxhckV4cHJlc3Npb24sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICByZWdleDoge1xuICAgICAgICAgICAgICAgIHBhdHRlcm46IGJvZHkudmFsdWUsXG4gICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGl0ZXJhbDogYm9keS5saXRlcmFsICsgZmxhZ3MubGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICByZWdleDoge1xuICAgICAgICAgICAgcGF0dGVybjogYm9keS52YWx1ZSxcbiAgICAgICAgICAgIGZsYWdzOiBmbGFncy52YWx1ZVxuICAgICAgICB9LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0UmVnZXgoKSB7XG4gICAgdmFyIHBvcywgbG9jLCByZWdleCwgdG9rZW47XG5cbiAgICBza2lwQ29tbWVudCgpO1xuXG4gICAgcG9zID0gaW5kZXg7XG4gICAgbG9jID0ge1xuICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZWdleCA9IHNjYW5SZWdFeHAoKTtcbiAgICBsb2MuZW5kID0ge1xuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCFleHRyYS50b2tlbml6ZSkge1xuICAgICAgICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2VuLCB3aGljaCBpcyBsaWtlbHkgXCIvXCIgb3IgXCIvPVwiXG4gICAgICAgIGlmIChleHRyYS50b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHRva2VuLnJhbmdlWzBdID09PSBwb3MgJiYgdG9rZW4udHlwZSA9PT0gXCJQdW5jdHVhdG9yXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09IFwiL1wiIHx8IHRva2VuLnZhbHVlID09PSBcIi89XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IFwiUmVndWxhckV4cHJlc3Npb25cIixcbiAgICAgICAgICAgIHZhbHVlOiByZWdleC5saXRlcmFsLFxuICAgICAgICAgICAgcmVnZXg6IHJlZ2V4LnJlZ2V4LFxuICAgICAgICAgICAgcmFuZ2U6IFtwb3MsIGluZGV4XSxcbiAgICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZWdleDtcbn1cblxuZnVuY3Rpb24gaXNJZGVudGlmaWVyTmFtZSh0b2tlbikge1xuICAgIHJldHVybiB0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyIHx8XG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQgfHxcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwgfHxcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWw7XG59XG5cbmZ1bmN0aW9uIGFkdmFuY2VTbGFzaCgpIHtcbiAgICB2YXIgcHJldlRva2VuLFxuICAgICAgICBjaGVja1Rva2VuO1xuICAgIC8vIFVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3ZWV0LmpzL3dpa2kvZGVzaWduXG4gICAgcHJldlRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIXByZXZUb2tlbikge1xuICAgICAgICAvLyBOb3RoaW5nIGJlZm9yZSB0aGF0OiBpdCBjYW5ub3QgYmUgYSBkaXZpc2lvbi5cbiAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgIH1cbiAgICBpZiAocHJldlRva2VuLnR5cGUgPT09IFwiUHVuY3R1YXRvclwiKSB7XG4gICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09IFwiXVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSBcIilcIikge1xuICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuUGFyZW5Ub2tlbiAtIDFdO1xuICAgICAgICAgICAgaWYgKGNoZWNrVG9rZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi50eXBlID09PSBcIktleXdvcmRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAoY2hlY2tUb2tlbi52YWx1ZSA9PT0gXCJpZlwiIHx8XG4gICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSBcIndoaWxlXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09IFwiZm9yXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09IFwid2l0aFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09IFwifVwiKSB7XG4gICAgICAgICAgICAvLyBEaXZpZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRsZSBzZW5zZSxcbiAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0LlxuICAgICAgICAgICAgaWYgKGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNdICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNdLnR5cGUgPT09IFwiS2V5d29yZFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gQW5vbnltb3VzIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XTtcbiAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XSAmJlxuICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XS50eXBlID09PSBcIktleXdvcmRcIikge1xuICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA1XTtcbiAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVja1Rva2VuIGRldGVybWluZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gaXNcbiAgICAgICAgICAgIC8vIGEgZGVjbGFyYXRpb24gb3IgYW4gZXhwcmVzc2lvbi5cbiAgICAgICAgICAgIGlmIChGbkV4cHJUb2tlbnMuaW5kZXhPZihjaGVja1Rva2VuLnZhbHVlKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gZXhwcmVzc2lvbi5cbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uXG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgIH1cbiAgICBpZiAocHJldlRva2VuLnR5cGUgPT09IFwiS2V5d29yZFwiKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG59XG5cbmZ1bmN0aW9uIGFkdmFuY2UoKSB7XG4gICAgdmFyIGNoLFxuICAgICAgICBhbGxvd0pTWCA9IGV4dHJhLmVjbWFGZWF0dXJlcy5qc3gsXG4gICAgICAgIGFsbG93VGVtcGxhdGVTdHJpbmdzID0gZXh0cmEuZWNtYUZlYXR1cmVzLnRlbXBsYXRlU3RyaW5ncztcblxuICAgIC8qXG4gICAgICogSWYgSlNYIGlzbid0IGFsbG93ZWQgb3IgSlNYIGlzIGFsbG93ZWQgYW5kIHdlJ3JlIG5vdCBpbnNpZGUgYW4gSlNYIGNoaWxkLFxuICAgICAqIHRoZW4gc2tpcCBhbnkgY29tbWVudHMuXG4gICAgICovXG4gICAgaWYgKCFhbGxvd0pTWCB8fCAhc3RhdGUuaW5KU1hDaGlsZCkge1xuICAgICAgICBza2lwQ29tbWVudCgpO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLkVPRixcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbaW5kZXgsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGlmIGluc2lkZSBhbiBKU1ggY2hpbGQsIHRoZW4gYWJvcnQgcmVndWxhciB0b2tlbml6YXRpb25cbiAgICBpZiAoYWxsb3dKU1ggJiYgc3RhdGUuaW5KU1hDaGlsZCkge1xuICAgICAgICByZXR1cm4gYWR2YW5jZUpTWENoaWxkKCk7XG4gICAgfVxuXG4gICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAvLyBWZXJ5IGNvbW1vbjogKCBhbmQgKSBhbmQgO1xuICAgIGlmIChjaCA9PT0gMHgyOCB8fCBjaCA9PT0gMHgyOSB8fCBjaCA9PT0gMHgzQikge1xuICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICB9XG5cbiAgICAvLyBTdHJpbmcgbGl0ZXJhbCBzdGFydHMgd2l0aCBzaW5nbGUgcXVvdGUgKFUrMDAyNykgb3IgZG91YmxlIHF1b3RlIChVKzAwMjIpLlxuICAgIGlmIChjaCA9PT0gMHgyNyB8fCBjaCA9PT0gMHgyMikge1xuICAgICAgICBpZiAoYWxsb3dKU1ggJiYgc3RhdGUuaW5KU1hUYWcpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuSlNYU3RyaW5nTGl0ZXJhbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNjYW5TdHJpbmdMaXRlcmFsKCk7XG4gICAgfVxuXG4gICAgaWYgKGFsbG93SlNYICYmIHN0YXRlLmluSlNYVGFnICYmIHN5bnRheC5pc0pTWElkZW50aWZpZXJTdGFydChjaCkpIHtcbiAgICAgICAgcmV0dXJuIHNjYW5KU1hJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgLy8gVGVtcGxhdGUgc3RyaW5ncyBzdGFydCB3aXRoIGJhY2t0aWNrIChVKzAwOTYpIG9yIGNsb3NpbmcgY3VybHkgYnJhY2UgKDEyNSkgYW5kIGJhY2t0aWNrLlxuICAgIGlmIChhbGxvd1RlbXBsYXRlU3RyaW5ncykge1xuXG4gICAgICAgIC8vIHRlbXBsYXRlIHN0cmluZ3Mgc3RhcnQgd2l0aCBiYWNrdGljayAoOTYpIG9yIG9wZW4gY3VybHkgKDEyNSkgYnV0IG9ubHkgaWYgdGhlIG9wZW5cbiAgICAgICAgLy8gY3VybHkgY2xvc2VzIGEgcHJldmlvdXNseSBvcGVuZWQgY3VybHkgZnJvbSBhIHRlbXBsYXRlLlxuICAgICAgICBpZiAoY2ggPT09IDk2IHx8IChjaCA9PT0gMTI1ICYmIHN0YXRlLmN1cmx5U3RhY2tbc3RhdGUuY3VybHlTdGFjay5sZW5ndGggLSAxXSA9PT0gXCJ0ZW1wbGF0ZVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5UZW1wbGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChjaCkpIHtcbiAgICAgICAgcmV0dXJuIHNjYW5JZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgLy8gRG90ICguKSBVKzAwMkUgY2FuIGFsc28gc3RhcnQgYSBmbG9hdGluZy1wb2ludCBudW1iZXIsIGhlbmNlIHRoZSBuZWVkXG4gICAgLy8gdG8gY2hlY2sgdGhlIG5leHQgY2hhcmFjdGVyLlxuICAgIGlmIChjaCA9PT0gMHgyRSkge1xuICAgICAgICBpZiAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpO1xuICAgIH1cblxuICAgIC8vIFNsYXNoICgvKSBVKzAwMkYgY2FuIGFsc28gc3RhcnQgYSByZWdleC5cbiAgICBpZiAoZXh0cmEudG9rZW5pemUgJiYgY2ggPT09IDB4MkYpIHtcbiAgICAgICAgcmV0dXJuIGFkdmFuY2VTbGFzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0VG9rZW4oKSB7XG4gICAgdmFyIGxvYywgdG9rZW4sIHJhbmdlLCB2YWx1ZSwgZW50cnksXG4gICAgICAgIGFsbG93SlNYID0gZXh0cmEuZWNtYUZlYXR1cmVzLmpzeDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFhbGxvd0pTWCB8fCAhc3RhdGUuaW5KU1hDaGlsZCkge1xuICAgICAgICBza2lwQ29tbWVudCgpO1xuICAgIH1cblxuICAgIGxvYyA9IHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdG9rZW4gPSBhZHZhbmNlKCk7XG4gICAgbG9jLmVuZCA9IHtcbiAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgIH07XG5cbiAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHJhbmdlID0gW3Rva2VuLnJhbmdlWzBdLCB0b2tlbi5yYW5nZVsxXV07XG4gICAgICAgIHZhbHVlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdLCB0b2tlbi5yYW5nZVsxXSk7XG4gICAgICAgIGVudHJ5ID0ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5OYW1lW3Rva2VuLnR5cGVdLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLFxuICAgICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRva2VuLnJlZ2V4KSB7XG4gICAgICAgICAgICBlbnRyeS5yZWdleCA9IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiB0b2tlbi5yZWdleC5wYXR0ZXJuLFxuICAgICAgICAgICAgICAgIGZsYWdzOiB0b2tlbi5yZWdleC5mbGFnc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBleHRyYS50b2tlbnMucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xufVxuXG5mdW5jdGlvbiBsZXgoKSB7XG4gICAgdmFyIHRva2VuO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgaW5kZXggPSB0b2tlbi5yYW5nZVsxXTtcbiAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7XG5cbiAgICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gXCJ1bmRlZmluZWRcIikgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTtcblxuICAgIGluZGV4ID0gdG9rZW4ucmFuZ2VbMV07XG4gICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7XG4gICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0O1xuXG4gICAgcmV0dXJuIHRva2VuO1xufVxuXG5mdW5jdGlvbiBwZWVrKCkge1xuICAgIHZhciBwb3MsXG4gICAgICAgIGxpbmUsXG4gICAgICAgIHN0YXJ0O1xuXG4gICAgcG9zID0gaW5kZXg7XG4gICAgbGluZSA9IGxpbmVOdW1iZXI7XG4gICAgc3RhcnQgPSBsaW5lU3RhcnQ7XG5cbiAgICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gXCJ1bmRlZmluZWRcIikgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTtcblxuICAgIGluZGV4ID0gcG9zO1xuICAgIGxpbmVOdW1iZXIgPSBsaW5lO1xuICAgIGxpbmVTdGFydCA9IHN0YXJ0O1xufVxuXG5mdW5jdGlvbiBsb29rYWhlYWQyKCkge1xuICAgIHZhciBhZHYsIHBvcywgbGluZSwgc3RhcnQsIHJlc3VsdDtcblxuICAgIC8vIElmIHdlIGFyZSBjb2xsZWN0aW5nIHRoZSB0b2tlbnMsIGRvbid0IGdyYWIgdGhlIG5leHQgb25lIHlldC5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGFkdiA9ICh0eXBlb2YgZXh0cmEuYWR2YW5jZSA9PT0gXCJmdW5jdGlvblwiKSA/IGV4dHJhLmFkdmFuY2UgOiBhZHZhbmNlO1xuXG4gICAgcG9zID0gaW5kZXg7XG4gICAgbGluZSA9IGxpbmVOdW1iZXI7XG4gICAgc3RhcnQgPSBsaW5lU3RhcnQ7XG5cbiAgICAvLyBTY2FuIGZvciB0aGUgbmV4dCBpbW1lZGlhdGUgdG9rZW4uXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGxvb2thaGVhZCA9PT0gbnVsbCkge1xuICAgICAgICBsb29rYWhlYWQgPSBhZHYoKTtcbiAgICB9XG4gICAgaW5kZXggPSBsb29rYWhlYWQucmFuZ2VbMV07XG4gICAgbGluZU51bWJlciA9IGxvb2thaGVhZC5saW5lTnVtYmVyO1xuICAgIGxpbmVTdGFydCA9IGxvb2thaGVhZC5saW5lU3RhcnQ7XG5cbiAgICAvLyBHcmFiIHRoZSB0b2tlbiByaWdodCBhZnRlci5cbiAgICByZXN1bHQgPSBhZHYoKTtcbiAgICBpbmRleCA9IHBvcztcbiAgICBsaW5lTnVtYmVyID0gbGluZTtcbiAgICBsaW5lU3RhcnQgPSBzdGFydDtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEpTWFxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0UXVhbGlmaWVkSlNYTmFtZShvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5KU1hJZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QubmFtZTtcbiAgICB9XG4gICAgaWYgKG9iamVjdC50eXBlID09PSBhc3ROb2RlVHlwZXMuSlNYTmFtZXNwYWNlZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdC5uYW1lc3BhY2UubmFtZSArIFwiOlwiICsgb2JqZWN0Lm5hbWUubmFtZTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAob2JqZWN0LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5KU1hNZW1iZXJFeHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBnZXRRdWFsaWZpZWRKU1hOYW1lKG9iamVjdC5vYmplY3QpICsgXCIuXCIgK1xuICAgICAgICAgICAgZ2V0UXVhbGlmaWVkSlNYTmFtZShvYmplY3QucHJvcGVydHkpXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhyb3dVbmV4cGVjdGVkKG9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIHNjYW5KU1hJZGVudGlmaWVyKCkge1xuICAgIHZhciBjaCwgc3RhcnQsIHZhbHVlID0gXCJcIjtcblxuICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoIXN5bnRheC5pc0pTWElkZW50aWZpZXJQYXJ0KGNoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgKz0gc291cmNlW2luZGV4KytdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLkpTWElkZW50aWZpZXIsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5KU1hFbnRpdHkoKSB7XG4gICAgdmFyIGNoLCBzdHIgPSBcIlwiLCBzdGFydCA9IGluZGV4LCBjb3VudCA9IDAsIGNvZGU7XG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGFzc2VydChjaCA9PT0gXCImXCIsIFwiRW50aXR5IG11c3Qgc3RhcnQgd2l0aCBhbiBhbXBlcnNhbmRcIik7XG4gICAgaW5kZXgrKztcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgY291bnQrKyA8IDEwKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICBpZiAoY2ggPT09IFwiO1wiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gY2g7XG4gICAgfVxuXG4gICAgLy8gV2VsbC1mb3JtZWQgZW50aXR5IChlbmRpbmcgd2FzIGZvdW5kKS5cbiAgICBpZiAoY2ggPT09IFwiO1wiKSB7XG4gICAgICAgIC8vIE51bWVyaWMgZW50aXR5LlxuICAgICAgICBpZiAoc3RyWzBdID09PSBcIiNcIikge1xuICAgICAgICAgICAgaWYgKHN0clsxXSA9PT0gXCJ4XCIpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gKyhcIjBcIiArIHN0ci5zdWJzdHIoMSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyBsZWFkaW5nIHplcm9zIGluIG9yZGVyIHRvIGF2b2lkIHRyZWF0aW5nIGFzIG9jdGFsIGluIG9sZCBicm93c2Vycy5cbiAgICAgICAgICAgICAgICBjb2RlID0gK3N0ci5zdWJzdHIoMSkucmVwbGFjZShSZWdleC5MZWFkaW5nWmVyb3MsIFwiXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGNvZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIH0gZWxzZSBpZiAoWEhUTUxFbnRpdGllc1tzdHJdKSB7XG4gICAgICAgICAgICByZXR1cm4gWEhUTUxFbnRpdGllc1tzdHJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJlYXQgbm9uLWVudGl0eSBzZXF1ZW5jZXMgYXMgcmVndWxhciB0ZXh0LlxuICAgIGluZGV4ID0gc3RhcnQgKyAxO1xuICAgIHJldHVybiBcIiZcIjtcbn1cblxuZnVuY3Rpb24gc2NhbkpTWFRleHQoc3RvcENoYXJzKSB7XG4gICAgdmFyIGNoLCBzdHIgPSBcIlwiLCBzdGFydDtcbiAgICBzdGFydCA9IGluZGV4O1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmIChzdG9wQ2hhcnMuaW5kZXhPZihjaCkgIT09IC0xKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09IFwiJlwiKSB7XG4gICAgICAgICAgICBzdHIgKz0gc2NhbkpTWEVudGl0eSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJcXHJcIiAmJiBzb3VyY2VbaW5kZXhdID09PSBcIlxcblwiKSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLkpTWFRleHQsXG4gICAgICAgIHZhbHVlOiBzdHIsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuSlNYU3RyaW5nTGl0ZXJhbCgpIHtcbiAgICB2YXIgaW5uZXJUb2tlbiwgcXVvdGUsIHN0YXJ0O1xuXG4gICAgcXVvdGUgPSBzb3VyY2VbaW5kZXhdO1xuICAgIGFzc2VydCgocXVvdGUgPT09IFwiXFxcIlwiIHx8IHF1b3RlID09PSBcIidcIiksXG4gICAgICAgIFwiU3RyaW5nIGxpdGVyYWwgbXVzdCBzdGFydHMgd2l0aCBhIHF1b3RlXCIpO1xuXG4gICAgc3RhcnQgPSBpbmRleDtcbiAgICArK2luZGV4O1xuXG4gICAgaW5uZXJUb2tlbiA9IHNjYW5KU1hUZXh0KFtxdW90ZV0pO1xuXG4gICAgaWYgKHF1b3RlICE9PSBzb3VyY2VbaW5kZXhdKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgICsraW5kZXg7XG5cbiAgICBpbm5lclRva2VuLnJhbmdlID0gW3N0YXJ0LCBpbmRleF07XG5cbiAgICByZXR1cm4gaW5uZXJUb2tlbjtcbn1cblxuLypcbiAqIEJldHdlZW4gSlNYIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFncyAoZS5nLiA8Zm9vPkhFUkU8L2Zvbz4pLCBhbnl0aGluZyB0aGF0XG4gKiBpcyBub3QgYW5vdGhlciBKU1ggdGFnIGFuZCBpcyBub3QgYW4gZXhwcmVzc2lvbiB3cmFwcGVkIGJ5IHt9IGlzIHRleHQuXG4gKi9cbmZ1bmN0aW9uIGFkdmFuY2VKU1hDaGlsZCgpIHtcbiAgICB2YXIgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAvLyB7ICgxMjMpIGFuZCA8ICg2MClcbiAgICBpZiAoY2ggIT09IDEyMyAmJiBjaCAhPT0gNjApIHtcbiAgICAgICAgcmV0dXJuIHNjYW5KU1hUZXh0KFtcIjxcIiwgXCJ7XCJdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hJZGVudGlmaWVyKCkge1xuICAgIHZhciB0b2tlbiwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkpTWElkZW50aWZpZXIpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgfVxuXG4gICAgdG9rZW4gPSBsZXgoKTtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hJZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYTmFtZXNwYWNlZE5hbWUoKSB7XG4gICAgdmFyIG5hbWVzcGFjZSwgbmFtZSwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBuYW1lc3BhY2UgPSBwYXJzZUpTWElkZW50aWZpZXIoKTtcbiAgICBleHBlY3QoXCI6XCIpO1xuICAgIG5hbWUgPSBwYXJzZUpTWElkZW50aWZpZXIoKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWE5hbWVzcGFjZWROYW1lKG5hbWVzcGFjZSwgbmFtZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWE1lbWJlckV4cHJlc3Npb24oKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBleHByID0gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG5cbiAgICB3aGlsZSAobWF0Y2goXCIuXCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hNZW1iZXJFeHByZXNzaW9uKGV4cHIsIHBhcnNlSlNYSWRlbnRpZmllcigpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYRWxlbWVudE5hbWUoKSB7XG4gICAgaWYgKGxvb2thaGVhZDIoKS52YWx1ZSA9PT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYTmFtZXNwYWNlZE5hbWUoKTtcbiAgICB9XG4gICAgaWYgKGxvb2thaGVhZDIoKS52YWx1ZSA9PT0gXCIuXCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYTWVtYmVyRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZUpTWElkZW50aWZpZXIoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hBdHRyaWJ1dGVOYW1lKCkge1xuICAgIGlmIChsb29rYWhlYWQyKCkudmFsdWUgPT09IFwiOlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUpTWE5hbWVzcGFjZWROYW1lKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlSlNYSWRlbnRpZmllcigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEF0dHJpYnV0ZVZhbHVlKCkge1xuICAgIHZhciB2YWx1ZSwgbWFya2VyO1xuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIoKTtcbiAgICAgICAgaWYgKHZhbHVlLmV4cHJlc3Npb24udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkpTWEVtcHR5RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBcIkpTWCBhdHRyaWJ1dGVzIG11c3Qgb25seSBiZSBhc3NpZ25lZCBhIG5vbi1lbXB0eSBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiZXhwcmVzc2lvblwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIjxcIikpIHtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUpTWEVsZW1lbnQoKTtcbiAgICB9IGVsc2UgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5KU1hUZXh0KSB7XG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICB2YWx1ZSA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UobGV4KCksIHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRKU1hBdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hFbXB0eUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZVByZXNlcnZlV2hpdGVzcGFjZSgpO1xuICAgIHdoaWxlIChzb3VyY2UuY2hhckF0KGluZGV4KSAhPT0gXCJ9XCIpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYRW1wdHlFeHByZXNzaW9uKCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIoKSB7XG4gICAgdmFyIGV4cHJlc3Npb24sIG9yaWdJbkpTWENoaWxkLCBvcmlnSW5KU1hUYWcsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgb3JpZ0luSlNYQ2hpbGQgPSBzdGF0ZS5pbkpTWENoaWxkO1xuICAgIG9yaWdJbkpTWFRhZyA9IHN0YXRlLmluSlNYVGFnO1xuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBmYWxzZTtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IGZhbHNlO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcblxuICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlSlNYRW1wdHlFeHByZXNzaW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBvcmlnSW5KU1hDaGlsZDtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IG9yaWdJbkpTWFRhZztcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hFeHByZXNzaW9uQ29udGFpbmVyKGV4cHJlc3Npb24pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKSB7XG4gICAgdmFyIGV4cHJlc3Npb24sIG9yaWdJbkpTWENoaWxkLCBvcmlnSW5KU1hUYWcsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgb3JpZ0luSlNYQ2hpbGQgPSBzdGF0ZS5pbkpTWENoaWxkO1xuICAgIG9yaWdJbkpTWFRhZyA9IHN0YXRlLmluSlNYVGFnO1xuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBmYWxzZTtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYU3ByZWFkQXR0cmlidXRlID0gdHJ1ZTtcblxuICAgIGV4cGVjdChcIntcIik7XG4gICAgZXhwZWN0KFwiLi4uXCIpO1xuXG4gICAgc3RhdGUuaW5KU1hTcHJlYWRBdHRyaWJ1dGUgPSBmYWxzZTtcblxuICAgIGV4cHJlc3Npb24gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gb3JpZ0luSlNYQ2hpbGQ7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG5cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYU3ByZWFkQXR0cmlidXRlKGV4cHJlc3Npb24pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hBdHRyaWJ1dGUoKSB7XG4gICAgdmFyIG5hbWUsIG1hcmtlcjtcblxuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYU3ByZWFkQXR0cmlidXRlKCk7XG4gICAgfVxuXG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBuYW1lID0gcGFyc2VKU1hBdHRyaWJ1dGVOYW1lKCk7XG5cbiAgICAvLyBIVE1MIGVtcHR5IGF0dHJpYnV0ZVxuICAgIGlmIChtYXRjaChcIj1cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEF0dHJpYnV0ZShuYW1lLCBwYXJzZUpTWEF0dHJpYnV0ZVZhbHVlKCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hBdHRyaWJ1dGUobmFtZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWENoaWxkKCkge1xuICAgIHZhciB0b2tlbiwgbWFya2VyO1xuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgdG9rZW4gPSBwYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIoKTtcbiAgICB9IGVsc2UgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5KU1hUZXh0KSB7XG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZVByZXNlcnZlV2hpdGVzcGFjZSgpO1xuICAgICAgICB0b2tlbiA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UobGV4KCksIHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRva2VuID0gcGFyc2VKU1hFbGVtZW50KCk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hDbG9zaW5nRWxlbWVudCgpIHtcbiAgICB2YXIgbmFtZSwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgb3JpZ0luSlNYQ2hpbGQgPSBzdGF0ZS5pbkpTWENoaWxkO1xuICAgIG9yaWdJbkpTWFRhZyA9IHN0YXRlLmluSlNYVGFnO1xuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBmYWxzZTtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IHRydWU7XG4gICAgZXhwZWN0KFwiPFwiKTtcbiAgICBleHBlY3QoXCIvXCIpO1xuICAgIG5hbWUgPSBwYXJzZUpTWEVsZW1lbnROYW1lKCk7XG4gICAgLy8gQmVjYXVzZSBhZHZhbmNlKCkgKGNhbGxlZCBieSBsZXgoKSBjYWxsZWQgYnkgZXhwZWN0KCkpIGV4cGVjdHMgdGhlcmVcbiAgICAvLyB0byBiZSBhIHZhbGlkIHRva2VuIGFmdGVyID4sIGl0IG5lZWRzIHRvIGtub3cgd2hldGhlciB0byBsb29rIGZvciBhXG4gICAgLy8gc3RhbmRhcmQgSlMgdG9rZW4gb3IgYW4gSlNYIHRleHQgbm9kZVxuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBvcmlnSW5KU1hDaGlsZDtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IG9yaWdJbkpTWFRhZztcbiAgICBleHBlY3QoXCI+XCIpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWENsb3NpbmdFbGVtZW50KG5hbWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hPcGVuaW5nRWxlbWVudCgpIHtcbiAgICB2YXIgbmFtZSwgYXR0cmlidXRlcyA9IFtdLCBzZWxmQ2xvc2luZyA9IGZhbHNlLCBvcmlnSW5KU1hDaGlsZCxcbiAgICAgICAgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG9yaWdJbkpTWENoaWxkID0gc3RhdGUuaW5KU1hDaGlsZDtcbiAgICBvcmlnSW5KU1hUYWcgPSBzdGF0ZS5pbkpTWFRhZztcbiAgICBzdGF0ZS5pbkpTWENoaWxkID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hUYWcgPSB0cnVlO1xuXG4gICAgZXhwZWN0KFwiPFwiKTtcblxuICAgIG5hbWUgPSBwYXJzZUpTWEVsZW1lbnROYW1lKCk7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiZcbiAgICAgICAgICAgIGxvb2thaGVhZC52YWx1ZSAhPT0gXCIvXCIgJiZcbiAgICAgICAgICAgIGxvb2thaGVhZC52YWx1ZSAhPT0gXCI+XCIpIHtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKHBhcnNlSlNYQXR0cmlidXRlKCkpO1xuICAgIH1cblxuICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuXG4gICAgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gXCIvXCIpIHtcbiAgICAgICAgZXhwZWN0KFwiL1wiKTtcbiAgICAgICAgLy8gQmVjYXVzZSBhZHZhbmNlKCkgKGNhbGxlZCBieSBsZXgoKSBjYWxsZWQgYnkgZXhwZWN0KCkpIGV4cGVjdHNcbiAgICAgICAgLy8gdGhlcmUgdG8gYmUgYSB2YWxpZCB0b2tlbiBhZnRlciA+LCBpdCBuZWVkcyB0byBrbm93IHdoZXRoZXIgdG9cbiAgICAgICAgLy8gbG9vayBmb3IgYSBzdGFuZGFyZCBKUyB0b2tlbiBvciBhbiBKU1ggdGV4dCBub2RlXG4gICAgICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBvcmlnSW5KU1hDaGlsZDtcbiAgICAgICAgZXhwZWN0KFwiPlwiKTtcbiAgICAgICAgc2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmluSlNYQ2hpbGQgPSB0cnVlO1xuICAgICAgICBleHBlY3QoXCI+XCIpO1xuICAgIH1cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hPcGVuaW5nRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEVsZW1lbnQoKSB7XG4gICAgdmFyIG9wZW5pbmdFbGVtZW50LCBjbG9zaW5nRWxlbWVudCA9IG51bGwsIGNoaWxkcmVuID0gW10sIG9yaWdJbkpTWENoaWxkLCBvcmlnSW5KU1hUYWcsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgb3JpZ0luSlNYQ2hpbGQgPSBzdGF0ZS5pbkpTWENoaWxkO1xuICAgIG9yaWdJbkpTWFRhZyA9IHN0YXRlLmluSlNYVGFnO1xuICAgIG9wZW5pbmdFbGVtZW50ID0gcGFyc2VKU1hPcGVuaW5nRWxlbWVudCgpO1xuXG4gICAgaWYgKCFvcGVuaW5nRWxlbWVudC5zZWxmQ2xvc2luZykge1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBmYWxzZTsgLy8gQ2FsbCBsb29rYWhlYWQyKCkgd2l0aCBpbkpTWENoaWxkID0gZmFsc2UgYmVjYXVzZSA8LyBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgaW4gdGhlIGNoaWxkXG4gICAgICAgICAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSBcIjxcIiAmJiBsb29rYWhlYWQyKCkudmFsdWUgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5pbkpTWENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gocGFyc2VKU1hDaGlsZCgpKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5pbkpTWENoaWxkID0gb3JpZ0luSlNYQ2hpbGQ7XG4gICAgICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuICAgICAgICBjbG9zaW5nRWxlbWVudCA9IHBhcnNlSlNYQ2xvc2luZ0VsZW1lbnQoKTtcbiAgICAgICAgaWYgKGdldFF1YWxpZmllZEpTWE5hbWUoY2xvc2luZ0VsZW1lbnQubmFtZSkgIT09IGdldFF1YWxpZmllZEpTWE5hbWUob3BlbmluZ0VsZW1lbnQubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkV4cGVjdGVkSlNYQ2xvc2luZ1RhZywgZ2V0UXVhbGlmaWVkSlNYTmFtZShvcGVuaW5nRWxlbWVudC5uYW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFdoZW4gKGVycm9uZW91c2x5KSB3cml0aW5nIHR3byBhZGphY2VudCB0YWdzIGxpa2VcbiAgICAgKlxuICAgICAqICAgICB2YXIgeCA9IDxkaXY+b25lPC9kaXY+PGRpdj50d288L2Rpdj47XG4gICAgICpcbiAgICAgKiB0aGUgZGVmYXVsdCBlcnJvciBtZXNzYWdlIGlzIGEgYml0IGluY29tcHJlaGVuc2libGUuIFNpbmNlIGl0XCJzXG4gICAgICogcmFyZWx5IChuZXZlcj8pIHVzZWZ1bCB0byB3cml0ZSBhIGxlc3MtdGhhbiBzaWduIGFmdGVyIGFuIEpTWFxuICAgICAqIGVsZW1lbnQsIHdlIGRpc2FsbG93IGl0IGhlcmUgaW4gdGhlIHBhcnNlciBpbiBvcmRlciB0byBwcm92aWRlIGFcbiAgICAgKiBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4gKEluIHRoZSByYXJlIGNhc2UgdGhhdCB0aGUgbGVzcy10aGFuIG9wZXJhdG9yXG4gICAgICogd2FzIGludGVuZGVkLCB0aGUgbGVmdCB0YWcgY2FuIGJlIHdyYXBwZWQgaW4gcGFyZW50aGVzZXMuKVxuICAgICAqL1xuICAgIGlmICghb3JpZ0luSlNYQ2hpbGQgJiYgbWF0Y2goXCI8XCIpKSB7XG4gICAgICAgIHRocm93RXJyb3IobG9va2FoZWFkLCBNZXNzYWdlcy5BZGphY2VudEpTWEVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hFbGVtZW50KG9wZW5pbmdFbGVtZW50LCBjbG9zaW5nRWxlbWVudCwgY2hpbGRyZW4pKTtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExvY2F0aW9uIG1hcmtlcnNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQXBwbGllcyBsb2NhdGlvbiBpbmZvcm1hdGlvbiB0byB0aGUgZ2l2ZW4gbm9kZSBieSB1c2luZyB0aGUgZ2l2ZW4gbWFya2VyLlxuICogVGhlIG1hcmtlciBpbmRpY2F0ZXMgdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBub2RlIGlzIHNhaWQgdG8gaGF2ZSB0byBiZWd1blxuICogaW4gdGhlIHNvdXJjZSBjb2RlLlxuICogQHBhcmFtIHtPYmplY3R9IG1hcmtlciBUaGUgbWFya2VyIHRvIHVzZSBmb3IgdGhlIG5vZGUuXG4gKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGFwcGx5IGxvY2F0aW9uIGluZm9ybWF0aW9uIHRvLlxuICogQHJldHVybnMge0FTVE5vZGV9IFRoZSBub2RlIHRoYXQgd2FzIHBhc3NlZCBpbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1hcmtlckFwcGx5KG1hcmtlciwgbm9kZSkge1xuXG4gICAgLy8gYWRkIHJhbmdlIGluZm9ybWF0aW9uIHRvIHRoZSBub2RlIGlmIHByZXNlbnRcbiAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgbm9kZS5yYW5nZSA9IFttYXJrZXIub2Zmc2V0LCBpbmRleF07XG4gICAgfVxuXG4gICAgLy8gYWRkIGxvY2F0aW9uIGluZm9ybWF0aW9uIHRoZSBub2RlIGlmIHByZXNlbnRcbiAgICBpZiAoZXh0cmEubG9jKSB7XG4gICAgICAgIG5vZGUubG9jID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBtYXJrZXIubGluZSxcbiAgICAgICAgICAgICAgICBjb2x1bW46IG1hcmtlci5jb2xcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gQXR0YWNoIGV4dHJhLnNvdXJjZSBpbmZvcm1hdGlvbiB0byB0aGUgbG9jYXRpb24sIGlmIHByZXNlbnRcbiAgICAgICAgaWYgKGV4dHJhLnNvdXJjZSkge1xuICAgICAgICAgICAgbm9kZS5sb2Muc291cmNlID0gZXh0cmEuc291cmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXR0YWNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbW1lbnRzIGlmIHJlcXVlc3RlZFxuICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7XG4gICAgICAgIGNvbW1lbnRBdHRhY2htZW50LnByb2Nlc3NDb21tZW50KG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsb2NhdGlvbiBtYXJrZXIgaW4gdGhlIHNvdXJjZSBjb2RlLiBMb2NhdGlvbiBtYXJrZXJzIGFyZSB1c2VkIGZvclxuICogdHJhY2tpbmcgd2hlcmUgdG9rZW5zIGFuZCBub2RlcyBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICogQHJldHVybnMge09iamVjdH0gQSBtYXJrZXIgb2JqZWN0IG9yIHVuZGVmaW5lZCBpZiB0aGUgcGFyc2VyIGRvZXNuJ3QgaGF2ZVxuICogICAgICBhbnkgbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYXJrZXJDcmVhdGUoKSB7XG5cbiAgICBpZiAoIWV4dHJhLmxvYyAmJiAhZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBza2lwQ29tbWVudCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgb2Zmc2V0OiBpbmRleCxcbiAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgY29sOiBpbmRleCAtIGxpbmVTdGFydFxuICAgIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxvY2F0aW9uIG1hcmtlciBpbiB0aGUgc291cmNlIGNvZGUuIExvY2F0aW9uIG1hcmtlcnMgYXJlIHVzZWQgZm9yXG4gKiB0cmFja2luZyB3aGVyZSB0b2tlbnMgYW5kIG5vZGVzIGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuIFRoaXMgbWV0aG9kXG4gKiBkb2Vzbid0IHNraXAgY29tbWVudHMgb3IgZXh0cmEgd2hpdGVzcGFjZSB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIEpTWC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IEEgbWFya2VyIG9iamVjdCBvciB1bmRlZmluZWQgaWYgdGhlIHBhcnNlciBkb2Vzbid0IGhhdmVcbiAqICAgICAgYW55IGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFya2VyQ3JlYXRlUHJlc2VydmVXaGl0ZXNwYWNlKCkge1xuXG4gICAgaWYgKCFleHRyYS5sb2MgJiYgIWV4dHJhLnJhbmdlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgb2Zmc2V0OiBpbmRleCxcbiAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgY29sOiBpbmRleCAtIGxpbmVTdGFydFxuICAgIH07XG59XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN5bnRheCBUcmVlIERlbGVnYXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGxpbmUgdGVybWluYXRvciBiZWZvcmUgdGhlIG5leHQgdG9rZW4uXG5cbmZ1bmN0aW9uIHBlZWtMaW5lVGVybWluYXRvcigpIHtcbiAgICB2YXIgcG9zLCBsaW5lLCBzdGFydCwgZm91bmQ7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsaW5lID0gbGluZU51bWJlcjtcbiAgICBzdGFydCA9IGxpbmVTdGFydDtcbiAgICBza2lwQ29tbWVudCgpO1xuICAgIGZvdW5kID0gbGluZU51bWJlciAhPT0gbGluZTtcbiAgICBpbmRleCA9IHBvcztcbiAgICBsaW5lTnVtYmVyID0gbGluZTtcbiAgICBsaW5lU3RhcnQgPSBzdGFydDtcblxuICAgIHJldHVybiBmb3VuZDtcbn1cblxuLy8gVGhyb3cgYW4gZXhjZXB0aW9uXG5cbmZ1bmN0aW9uIHRocm93RXJyb3IodG9rZW4sIG1lc3NhZ2VGb3JtYXQpIHtcblxuICAgIHZhciBlcnJvcixcbiAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgICAgIG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgIC8lKFxcZCkvZyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoaW5kZXggPCBhcmdzLmxlbmd0aCwgXCJNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgIGlmICh0eXBlb2YgdG9rZW4ubGluZU51bWJlciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIkxpbmUgXCIgKyB0b2tlbi5saW5lTnVtYmVyICsgXCI6IFwiICsgbXNnKTtcbiAgICAgICAgZXJyb3IuaW5kZXggPSB0b2tlbi5yYW5nZVswXTtcbiAgICAgICAgZXJyb3IubGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7XG4gICAgICAgIGVycm9yLmNvbHVtbiA9IHRva2VuLnJhbmdlWzBdIC0gbGluZVN0YXJ0ICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIkxpbmUgXCIgKyBsaW5lTnVtYmVyICsgXCI6IFwiICsgbXNnKTtcbiAgICAgICAgZXJyb3IuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZXJyb3IubGluZU51bWJlciA9IGxpbmVOdW1iZXI7XG4gICAgICAgIGVycm9yLmNvbHVtbiA9IGluZGV4IC0gbGluZVN0YXJ0ICsgMTtcbiAgICB9XG5cbiAgICBlcnJvci5kZXNjcmlwdGlvbiA9IG1zZztcbiAgICB0aHJvdyBlcnJvcjtcbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvclRvbGVyYW50KCkge1xuICAgIHRyeSB7XG4gICAgICAgIHRocm93RXJyb3IuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHtcbiAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG4vLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4uXG5cbmZ1bmN0aW9uIHRocm93VW5leHBlY3RlZCh0b2tlbikge1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkRU9TKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHtcbiAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW4uSlNYVGV4dCkge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkU3RyaW5nKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkSWRlbnRpZmllcik7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgaWYgKHN5bnRheC5pc0Z1dHVyZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRSZXNlcnZlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIHN5bnRheC5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUZW1wbGF0ZSwgdG9rZW4udmFsdWUucmF3KTtcbiAgICB9XG5cbiAgICAvLyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1bmN0dWF0b3IuXG4gICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7XG59XG5cbi8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG4vLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi5cblxuZnVuY3Rpb24gZXhwZWN0KHZhbHVlKSB7XG4gICAgdmFyIHRva2VuID0gbGV4KCk7XG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgfHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG4gICAgfVxufVxuXG4vLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBrZXl3b3JkLlxuLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cbmZ1bmN0aW9uIGV4cGVjdEtleXdvcmQoa2V5d29yZCkge1xuICAgIHZhciB0b2tlbiA9IGxleCgpO1xuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG4gICAgfVxufVxuXG4vLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci5cblxuZnVuY3Rpb24gbWF0Y2godmFsdWUpIHtcbiAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSB2YWx1ZTtcbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmRcblxuZnVuY3Rpb24gbWF0Y2hLZXl3b3JkKGtleXdvcmQpIHtcbiAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQgJiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkO1xufVxuXG4vLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgY29udGV4dHVhbCBrZXl3b3JkXG4vLyAod2hlcmUgYW4gaWRlbnRpZmllciBpcyBzb21ldGltZXMgYSBrZXl3b3JkIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dClcblxuZnVuY3Rpb24gbWF0Y2hDb250ZXh0dWFsS2V5d29yZChrZXl3b3JkKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDtcbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gaXMgYW4gYXNzaWdubWVudCBvcGVyYXRvclxuXG5mdW5jdGlvbiBtYXRjaEFzc2lnbigpIHtcbiAgICB2YXIgb3A7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvcCA9IGxvb2thaGVhZC52YWx1ZTtcbiAgICByZXR1cm4gb3AgPT09IFwiPVwiIHx8XG4gICAgICAgIG9wID09PSBcIio9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiLz1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIlPVwiIHx8XG4gICAgICAgIG9wID09PSBcIis9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiLT1cIiB8fFxuICAgICAgICBvcCA9PT0gXCI8PD1cIiB8fFxuICAgICAgICBvcCA9PT0gXCI+Pj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCI+Pj49XCIgfHxcbiAgICAgICAgb3AgPT09IFwiJj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCJePVwiIHx8XG4gICAgICAgIG9wID09PSBcInw9XCI7XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVTZW1pY29sb24oKSB7XG4gICAgdmFyIGxpbmU7XG5cbiAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24gKFUrMDAzQikuXG4gICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQiB8fCBtYXRjaChcIjtcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsaW5lID0gbGluZU51bWJlcjtcbiAgICBza2lwQ29tbWVudCgpO1xuICAgIGlmIChsaW5lTnVtYmVyICE9PSBsaW5lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRiAmJiAhbWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgIH1cbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgcHJvdmlkZWQgZXhwcmVzc2lvbiBpcyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uXG5cbmZ1bmN0aW9uIGlzTGVmdEhhbmRTaWRlKGV4cHIpIHtcbiAgICByZXR1cm4gZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllciB8fCBleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5NZW1iZXJFeHByZXNzaW9uO1xufVxuXG4vLyAxMS4xLjQgQXJyYXkgSW5pdGlhbGlzZXJcblxuZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpc2VyKCkge1xuICAgIHZhciBlbGVtZW50cyA9IFtdLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgdG1wO1xuXG4gICAgZXhwZWN0KFwiW1wiKTtcblxuICAgIHdoaWxlICghbWF0Y2goXCJdXCIpKSB7XG4gICAgICAgIGlmIChtYXRjaChcIixcIikpIHtcbiAgICAgICAgICAgIGxleCgpOyAvLyBvbmx5IGdldCBoZXJlIHdoZW4geW91IGhhdmUgW2EsLF0gb3Igc2ltaWxhclxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRtcCA9IHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgZWxlbWVudHMucHVzaCh0bXApO1xuICAgICAgICAgICAgaWYgKCEobWF0Y2goXCJdXCIpKSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChcIixcIik7IC8vIGhhbmRsZXMgdGhlIGNvbW1vbiBjYXNlIG9mIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIl1cIik7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVBcnJheUV4cHJlc3Npb24oZWxlbWVudHMpKTtcbn1cblxuLy8gMTEuMS41IE9iamVjdCBJbml0aWFsaXNlclxuXG5mdW5jdGlvbiBwYXJzZVByb3BlcnR5RnVuY3Rpb24ocGFyYW1JbmZvLCBvcHRpb25zKSB7XG4gICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0LFxuICAgICAgICBwcmV2aW91c1lpZWxkQWxsb3dlZCA9IHN0YXRlLnlpZWxkQWxsb3dlZCxcbiAgICAgICAgZ2VuZXJhdG9yID0gb3B0aW9ucyA/IG9wdGlvbnMuZ2VuZXJhdG9yIDogZmFsc2UsXG4gICAgICAgIGJvZHk7XG5cbiAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBnZW5lcmF0b3I7XG5cbiAgICAvKlxuICAgICAqIEVzcHJpbWEgdXNlcyBwYXJzZUNvbmNpc2VCb2R5KCkgaGVyZSwgd2hpY2ggaXMgaW5jb3JyZWN0LiBPYmplY3QgbGl0ZXJhbFxuICAgICAqIG1ldGhvZHMgbXVzdCBoYXZlIGJyYWNlcy5cbiAgICAgKi9cbiAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG5cbiAgICBpZiAoc3RyaWN0ICYmIHBhcmFtSW5mby5maXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHBhcmFtSW5mby5maXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0cmljdCAmJiBwYXJhbUluZm8uc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHBhcmFtSW5mby5zdHJpY3RlZCwgcGFyYW1JbmZvLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG9wdGlvbnMubWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oXG4gICAgICAgIG51bGwsXG4gICAgICAgIHBhcmFtSW5mby5wYXJhbXMsXG4gICAgICAgIGJvZHksXG4gICAgICAgIGdlbmVyYXRvcixcbiAgICAgICAgYm9keS50eXBlICE9PSBhc3ROb2RlVHlwZXMuQmxvY2tTdGF0ZW1lbnRcbiAgICApKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3QsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIG1ldGhvZDtcblxuICAgIHN0cmljdCA9IHRydWU7XG5cbiAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcygpO1xuXG4gICAgaWYgKHBhcmFtcy5zdHJpY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQocGFyYW1zLnN0cmljdGVkLCBwYXJhbXMubWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbWV0aG9kID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFtcywge1xuICAgICAgICBnZW5lcmF0b3I6IG9wdGlvbnMgPyBvcHRpb25zLmdlbmVyYXRvciA6IGZhbHNlLFxuICAgICAgICBtYXJrZXI6IG1hcmtlclxuICAgIH0pO1xuXG4gICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG5cbiAgICByZXR1cm4gbWV0aG9kO1xufVxuXG5mdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCkge1xuICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgdG9rZW4gPSBsZXgoKSxcbiAgICAgICAgYWxsb3dPYmplY3RMaXRlcmFsQ29tcHV0ZWQgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllcyxcbiAgICAgICAgZXhwcixcbiAgICAgICAgcmVzdWx0O1xuXG4gICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBhcnNlT2JqZWN0UHJvcGVydHkoKSwgd2hlcmVcbiAgICAvLyBFT0YgYW5kIFB1bmN0dWF0b3IgdG9rZW5zIGFyZSBhbHJlYWR5IGZpbHRlcmVkIG91dC5cblxuICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICBjYXNlIFRva2VuLlN0cmluZ0xpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVtZXJpY0xpdGVyYWw6XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIHRva2VuLm9jdGFsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UodG9rZW4sIHNvdXJjZSkpO1xuXG4gICAgICAgIGNhc2UgVG9rZW4uSWRlbnRpZmllcjpcbiAgICAgICAgY2FzZSBUb2tlbi5Cb29sZWFuTGl0ZXJhbDpcbiAgICAgICAgY2FzZSBUb2tlbi5OdWxsTGl0ZXJhbDpcbiAgICAgICAgY2FzZSBUb2tlbi5LZXl3b3JkOlxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xuXG4gICAgICAgIGNhc2UgVG9rZW4uUHVuY3R1YXRvcjpcbiAgICAgICAgICAgIGlmICgoIXN0YXRlLmluT2JqZWN0TGl0ZXJhbCB8fCBhbGxvd09iamVjdExpdGVyYWxDb21wdXRlZCkgJiZcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4udmFsdWUgPT09IFwiW1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIGNvbXB1dGVkIHByb3BlcnRpZXMgd2Ugc2hvdWxkIHNraXAgdGhlIFsgYW5kIF0sIGFuZFxuICAgICAgICAgICAgICAgIC8vIGNhcHR1cmUgaW4gbWFya2VyIG9ubHkgdGhlIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBpdHNlbGYuXG4gICAgICAgICAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChcIl1cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAvLyBubyBkZWZhdWx0XG4gICAgfVxuXG4gICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gbG9va2FoZWFkUHJvcGVydHlOYW1lKCkge1xuICAgIHN3aXRjaCAobG9va2FoZWFkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUb2tlbi5JZGVudGlmaWVyOlxuICAgICAgICBjYXNlIFRva2VuLlN0cmluZ0xpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVsbExpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVtZXJpY0xpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlIFRva2VuLlB1bmN0dWF0b3I6XG4gICAgICAgICAgICByZXR1cm4gbG9va2FoZWFkLnZhbHVlID09PSBcIltcIjtcbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgdG8gdHJ5IHRvIHBhcnNlIGEgTWV0aG9kRGVmaW5pdGlvbiBhcyBkZWZpbmVkIGluIDE0LjMuIEJ1dCBpbiB0aGUgY2FzZSBvZiBvYmplY3QgbGl0ZXJhbHMsXG4vLyBpdCBtaWdodCBiZSBjYWxsZWQgYXQgYSBwb3NpdGlvbiB3aGVyZSB0aGVyZSBpcyBpbiBmYWN0IGEgc2hvcnQgaGFuZCBpZGVudGlmaWVyIHBhdHRlcm4gb3IgYSBkYXRhIHByb3BlcnR5LlxuLy8gVGhpcyBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGFmdGVyIHdlIGNvbnN1bWVkIHVwIHRvIHRoZSBsZWZ0IHBhcmVudGhlc2VzLlxuLy8gSW4gb3JkZXIgdG8gYXZvaWQgYmFjayB0cmFja2luZywgaXQgcmV0dXJucyBgbnVsbGAgaWYgdGhlIHBvc2l0aW9uIGlzIG5vdCBhIE1ldGhvZERlZmluaXRpb24gYW5kIHRoZSBjYWxsZXJcbi8vIGlzIHJlc3BvbnNpYmxlIHRvIHZpc2l0IG90aGVyIG9wdGlvbnMuXG5mdW5jdGlvbiB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG1hcmtlcikge1xuICAgIHZhciB2YWx1ZSwgb3B0aW9ucywgbWV0aG9kTWFya2VyO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGBnZXRgIGFuZCBgc2V0YDtcblxuICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09IFwiZ2V0XCIgJiYgbG9va2FoZWFkUHJvcGVydHlOYW1lKCkpIHtcblxuICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaChcIltcIik7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgICAgICAgICBtZXRob2RNYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgICAgIGV4cGVjdChcIihcIik7XG4gICAgICAgICAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbih7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG1hcmtlcjogbWV0aG9kTWFya2VyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXCJnZXRcIiwga2V5LCB2YWx1ZSwgZmFsc2UsIGZhbHNlLCBjb21wdXRlZCkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodG9rZW4udmFsdWUgPT09IFwic2V0XCIgJiYgbG9va2FoZWFkUHJvcGVydHlOYW1lKCkpIHtcbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgbWV0aG9kTWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgZGVmYXVsdENvdW50OiAwLFxuICAgICAgICAgICAgICAgIHN0cmljdGVkOiBudWxsLFxuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXJhbVNldDogbmV3IFN0cmluZ01hcCgpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VQYXJhbShvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cGVjdChcIilcIik7XG5cbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG9wdGlvbnMsIHsgbWFya2VyOiBtZXRob2RNYXJrZXIgfSk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcInNldFwiLCBrZXksIHZhbHVlLCBmYWxzZSwgZmFsc2UsIGNvbXB1dGVkKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFwiaW5pdFwiLCBrZXksIHZhbHVlLCB0cnVlLCBmYWxzZSwgY29tcHV0ZWQpKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYSBNZXRob2REZWZpbml0aW9uLlxuICAgIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlcyBHZW5lcmF0b3IgUHJvcGVydGllc1xuICogQHBhcmFtIHtBU1ROb2RlfSBrZXkgVGhlIHByb3BlcnR5IGtleSAodXN1YWxseSBhbiBpZGVudGlmaWVyKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXJrZXIgVGhlIG1hcmtlciB0byB1c2UgZm9yIHRoZSBub2RlLlxuICogQHJldHVybnMge0FTVE5vZGV9IFRoZSBnZW5lcmF0b3IgcHJvcGVydHkgbm9kZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VHZW5lcmF0b3JQcm9wZXJ0eShrZXksIG1hcmtlcikge1xuXG4gICAgdmFyIGNvbXB1dGVkID0gKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJbXCIpO1xuXG4gICAgaWYgKCFtYXRjaChcIihcIikpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbih7IGdlbmVyYXRvcjogdHJ1ZSB9KSxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGNvbXB1dGVkXG4gICAgICAgIClcbiAgICApO1xufVxuXG4vLyBUT0RPKG56YWthcyk6IFVwZGF0ZSB0byBtYXRjaCBFc3ByaW1hXG5mdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5KCkge1xuICAgIHZhciB0b2tlbiwga2V5LCBpZCwgY29tcHV0ZWQsIG1ldGhvZE1hcmtlciwgb3B0aW9ucztcbiAgICB2YXIgYWxsb3dDb21wdXRlZCA9IGV4dHJhLmVjbWFGZWF0dXJlcy5vYmplY3RMaXRlcmFsQ29tcHV0ZWRQcm9wZXJ0aWVzLFxuICAgICAgICBhbGxvd01ldGhvZCA9IGV4dHJhLmVjbWFGZWF0dXJlcy5vYmplY3RMaXRlcmFsU2hvcnRoYW5kTWV0aG9kcyxcbiAgICAgICAgYWxsb3dTaG9ydGhhbmQgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbFNob3J0aGFuZFByb3BlcnRpZXMsXG4gICAgICAgIGFsbG93R2VuZXJhdG9ycyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzLFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICBjb21wdXRlZCA9ICh0b2tlbi52YWx1ZSA9PT0gXCJbXCIgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcik7XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciB8fCAoYWxsb3dDb21wdXRlZCAmJiBjb21wdXRlZCkpIHtcblxuICAgICAgICBpZCA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBDaGVjayBmb3IgZ2V0dGVycyBhbmQgc2V0dGVycy4gQmUgY2FyZWZ1bCEgXCJnZXRcIiBhbmQgXCJzZXRcIiBhcmUgbGVnYWxcbiAgICAgICAgICogbWV0aG9kIG5hbWVzLiBJdCdzIG9ubHkgYSBnZXR0ZXIgb3Igc2V0dGVyIGlmIGZvbGxvd2VkIGJ5IGEgc3BhY2UuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09IFwiZ2V0XCIgJiZcbiAgICAgICAgICAgICAgICAhKG1hdGNoKFwiOlwiKSB8fCBtYXRjaChcIihcIikgfHwgbWF0Y2goXCIsXCIpIHx8IG1hdGNoKFwifVwiKSkpIHtcbiAgICAgICAgICAgIGNvbXB1dGVkID0gKGxvb2thaGVhZC52YWx1ZSA9PT0gXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgbWV0aG9kTWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBleHBlY3QoXCIoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5RnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXI6IG1ldGhvZE1hcmtlclxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjb21wdXRlZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09IFwic2V0XCIgJiZcbiAgICAgICAgICAgICAgICAhKG1hdGNoKFwiOlwiKSB8fCBtYXRjaChcIihcIikgfHwgbWF0Y2goXCIsXCIpIHx8IG1hdGNoKFwifVwiKSkpIHtcbiAgICAgICAgICAgIGNvbXB1dGVkID0gKGxvb2thaGVhZC52YWx1ZSA9PT0gXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgbWV0aG9kTWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgZGVmYXVsdENvdW50OiAwLFxuICAgICAgICAgICAgICAgIHN0cmljdGVkOiBudWxsLFxuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXJhbVNldDogbmV3IFN0cmluZ01hcCgpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAobWF0Y2goXCIpXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGxvb2thaGVhZCwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBsb29rYWhlYWQudmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJzZVBhcmFtKG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBcInNldFwiLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlUHJvcGVydHlGdW5jdGlvbihvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXI6IG1ldGhvZE1hcmtlclxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjb21wdXRlZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub3JtYWwgcHJvcGVydHkgKGtleTp2YWx1ZSlcbiAgICAgICAgaWYgKG1hdGNoKFwiOlwiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjb21wdXRlZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtZXRob2Qgc2hvcnRoYW5kIChrZXkoKXsuLi59KVxuICAgICAgICBpZiAoYWxsb3dNZXRob2QgJiYgbWF0Y2goXCIoXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbih7IGdlbmVyYXRvcjogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjb21wdXRlZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZXN0cnVjdHVyaW5nIGRlZmF1bHRzIChzaG9ydGhhbmQgc3ludGF4KVxuICAgICAgICBpZiAoYWxsb3dEZXN0cnVjdHVyaW5nICYmIG1hdGNoKFwiPVwiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICB2YXIgcHJvcCA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXNzaWdubWVudEV4cHJlc3Npb24oXCI9XCIsIGlkLCB2YWx1ZSkpO1xuICAgICAgICAgICAgcHJvcC50eXBlID0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgICAgICAgICAgdmFyIGZ1bGxQcm9wZXJ0eSA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFwiaW5pdFwiLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gc2hvcnRoYW5kXG4gICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBmdWxsUHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICogT25seSBvdGhlciBwb3NzaWJpbGl0eSBpcyB0aGF0IHRoaXMgaXMgYSBzaG9ydGhhbmQgcHJvcGVydHkuIENvbXB1dGVkXG4gICAgICAgICAqIHByb3BlcnRpZXMgY2Fubm90IHVzZSBzaG9ydGhhbmQgbm90YXRpb24sIHNvIHRoYXQncyBhIHN5bnRheCBlcnJvci5cbiAgICAgICAgICogSWYgc2hvcnRoYW5kIHByb3BlcnRpZXMgYXJlbid0IGFsbG93LCB0aGVuIHRoaXMgaXMgYW4gYXV0b21hdGljXG4gICAgICAgICAqIHN5bnRheCBlcnJvci4gRGVzdHJ1Y3R1cmluZyBpcyBhbm90aGVyIGNhc2Ugd2l0aCBhIHNpbWlsYXIgc2hvcnRoYW5kIHN5bnRheC5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChjb21wdXRlZCB8fCAoIWFsbG93U2hvcnRoYW5kICYmICFhbGxvd0Rlc3RydWN0dXJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNob3J0aGFuZCBwcm9wZXJ0eVxuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gb25seSBwb3NzaWJpbGl0eSBpbiB0aGlzIGJyYW5jaCBpcyBhIHNob3J0aGFuZCBnZW5lcmF0b3JcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GIHx8IHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHtcbiAgICAgICAgaWYgKCFhbGxvd0dlbmVyYXRvcnMgfHwgIW1hdGNoKFwiKlwiKSB8fCAhYWxsb3dNZXRob2QpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZCA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblxuICAgICAgICByZXR1cm4gcGFyc2VHZW5lcmF0b3JQcm9wZXJ0eShpZCwgbWFya2VyKTtcblxuICAgIH1cblxuICAgIC8qXG4gICAgICogSWYgd2UndmUgbWFkZSBpdCBoZXJlLCB0aGVuIHRoYXQgbWVhbnMgdGhlIHByb3BlcnR5IG5hbWUgaXMgcmVwcmVzZW50ZWRcbiAgICAgKiBieSBhIHN0cmluZyAoaS5lLCB7IFwiZm9vXCI6IDJ9KS4gVGhlIG9ubHkgb3B0aW9ucyBoZXJlIGFyZSBub3JtYWxcbiAgICAgKiBwcm9wZXJ0eSB3aXRoIGEgY29sb24gb3IgYSBtZXRob2QuXG4gICAgICovXG4gICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuXG4gICAgLy8gY2hlY2sgZm9yIHByb3BlcnR5IHZhbHVlXG4gICAgaWYgKG1hdGNoKFwiOlwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciBtZXRob2RcbiAgICBpZiAoYWxsb3dNZXRob2QgJiYgbWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFwiaW5pdFwiLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gbm8gb3RoZXIgb3B0aW9ucywgdGhpcyBpcyBiYWRcbiAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xufVxuXG5mdW5jdGlvbiBnZXRGaWVsZE5hbWUoa2V5KSB7XG4gICAgdmFyIHRvU3RyaW5nID0gU3RyaW5nO1xuICAgIGlmIChrZXkudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGtleS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gdG9TdHJpbmcoa2V5LnZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGFsbG93RHVwbGljYXRlcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5vYmplY3RMaXRlcmFsRHVwbGljYXRlUHJvcGVydGllcyxcbiAgICAgICAgcHJvcGVydGllcyA9IFtdLFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcHJvcGVydHlGbixcbiAgICAgICAga2luZCxcbiAgICAgICAgc3RvcmVkS2luZCxcbiAgICAgICAgcHJldmlvdXNJbk9iamVjdExpdGVyYWwgPSBzdGF0ZS5pbk9iamVjdExpdGVyYWwsXG4gICAgICAgIGtpbmRNYXAgPSBuZXcgU3RyaW5nTWFwKCk7XG5cbiAgICBzdGF0ZS5pbk9iamVjdExpdGVyYWwgPSB0cnVlO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcblxuICAgIHdoaWxlICghbWF0Y2goXCJ9XCIpKSB7XG5cbiAgICAgICAgcHJvcGVydHkgPSBwYXJzZU9iamVjdFByb3BlcnR5KCk7XG5cbiAgICAgICAgaWYgKCFwcm9wZXJ0eS5jb21wdXRlZCkge1xuXG4gICAgICAgICAgICBuYW1lID0gZ2V0RmllbGROYW1lKHByb3BlcnR5LmtleSk7XG4gICAgICAgICAgICBwcm9wZXJ0eUZuID0gKHByb3BlcnR5LmtpbmQgPT09IFwiZ2V0XCIpID8gUHJvcGVydHlLaW5kLkdldCA6IFByb3BlcnR5S2luZC5TZXQ7XG4gICAgICAgICAgICBraW5kID0gKHByb3BlcnR5LmtpbmQgPT09IFwiaW5pdFwiKSA/IFByb3BlcnR5S2luZC5EYXRhIDogcHJvcGVydHlGbjtcblxuICAgICAgICAgICAgaWYgKGtpbmRNYXAuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3RvcmVkS2luZCA9IGtpbmRNYXAuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdG9yZWRLaW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEgJiYgbmFtZSA9PT0gXCJfX3Byb3RvX19cIiAmJiBhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1cGxpY2F0ZSAnX19wcm90b19fJyBsaXRlcmFsIHByb3BlcnRpZXMgYXJlIGZvcmJpZGRlbiBpbiBFUyA2XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkR1cGxpY2F0ZVByb3RvdHlwZVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYga2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEgJiYgIWFsbG93RHVwbGljYXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHVwbGljYXRlIGxpdGVyYWwgcHJvcGVydGllcyBhcmUgb25seSBmb3JiaWRkZW4gaW4gRVMgNSBzdHJpY3QgbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3REdXBsaWNhdGVQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCAhPT0gUHJvcGVydHlLaW5kLkRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9yZWRLaW5kICYga2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckdldFNldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAga2luZE1hcC5zZXQobmFtZSwgc3RvcmVkS2luZCB8IGtpbmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBraW5kTWFwLnNldChuYW1lLCBraW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGV4cGVjdChcIixcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgc3RhdGUuaW5PYmplY3RMaXRlcmFsID0gcHJldmlvdXNJbk9iamVjdExpdGVyYWw7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHRlbXBsYXRlIHN0cmluZyBlbGVtZW50IGFuZCByZXR1cm4gaXRzIEFTVE5vZGUgcmVwcmVzZW50YXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb24gUGFyc2luZyAmIHNjYW5uaW5nIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb24uaGVhZCBUcnVlIGlmIHRoaXMgZWxlbWVudCBpcyB0aGUgZmlyc3QgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgdGVtcGxhdGUgZWxlbWVudCBub2RlIHdpdGggbWFya2VyIGluZm8gYXBwbGllZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUVsZW1lbnQob3B0aW9uKSB7XG4gICAgdmFyIG1hcmtlciwgdG9rZW47XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlRlbXBsYXRlIHx8IChvcHRpb24uaGVhZCAmJiAhbG9va2FoZWFkLmhlYWQpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGVtcGxhdGVFbGVtZW50KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJhdzogdG9rZW4udmFsdWUucmF3LFxuICAgICAgICAgICAgICAgIGNvb2tlZDogdG9rZW4udmFsdWUuY29va2VkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9rZW4udGFpbFxuICAgICAgICApXG4gICAgKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHRlbXBsYXRlIHN0cmluZyBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIEFTVE5vZGUgcmVwcmVzZW50YXRpb25cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgdGVtcGxhdGUgbGl0ZXJhbCBub2RlIHdpdGggbWFya2VyIGluZm8gYXBwbGllZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSB7XG4gICAgdmFyIHF1YXNpLCBxdWFzaXMsIGV4cHJlc3Npb25zLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUVsZW1lbnQoeyBoZWFkOiB0cnVlIH0pO1xuICAgIHF1YXNpcyA9IFsgcXVhc2kgXTtcbiAgICBleHByZXNzaW9ucyA9IFtdO1xuXG4gICAgd2hpbGUgKCFxdWFzaS50YWlsKSB7XG4gICAgICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVFbGVtZW50KHsgaGVhZDogZmFsc2UgfSk7XG4gICAgICAgIHF1YXNpcy5wdXNoKHF1YXNpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVUZW1wbGF0ZUxpdGVyYWwocXVhc2lzLCBleHByZXNzaW9ucykpO1xufVxuXG4vLyAxMS4xLjYgVGhlIEdyb3VwaW5nIE9wZXJhdG9yXG5cbmZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICsrc3RhdGUucGFyZW50aGVzaXNDb3VudDtcblxuICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuXG4vLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnNcblxuZnVuY3Rpb24gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdHlwZSwgdG9rZW4sIGV4cHIsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgYWxsb3dKU1ggPSBleHRyYS5lY21hRmVhdHVyZXMuanN4LFxuICAgICAgICBhbGxvd0NsYXNzZXMgPSBleHRyYS5lY21hRmVhdHVyZXMuY2xhc3NlcyxcbiAgICAgICAgYWxsb3dTdXBlciA9IGFsbG93Q2xhc3NlcyB8fCBleHRyYS5lY21hRmVhdHVyZXMuc3VwZXJJbkZ1bmN0aW9ucztcblxuICAgIGlmIChtYXRjaChcIihcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0pTWCAmJiBtYXRjaChcIjxcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHR5cGUgPSBsb29rYWhlYWQudHlwZTtcbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKGxleCgpLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHtcbiAgICAgICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0YWwpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGxleCgpLCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsbG93U3VwZXIgJiYgbWF0Y2hLZXl3b3JkKFwic3VwZXJcIikgJiYgc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTdXBlcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJ0aGlzXCIpKSB7XG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGhpc0V4cHJlc3Npb24oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxsb3dDbGFzc2VzICYmIG1hdGNoS2V5d29yZChcImNsYXNzXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0V4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCkge1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9PT0gXCJ0cnVlXCIpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UodG9rZW4sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbCkge1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZSh0b2tlbiwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiL1wiKSB8fCBtYXRjaChcIi89XCIpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UoY29sbGVjdFJlZ2V4KCksIHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2Uoc2NhblJlZ0V4cCgpLCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHBlZWsoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbn1cblxuLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9uc1xuXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBhcmc7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgYXJnID0gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIHJldHVybiBhcmdzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKSB7XG4gICAgaWYgKG1hdGNoKFwiLi4uXCIpKSB7XG4gICAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVNwcmVhZEVsZW1lbnQocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHtcbiAgICB2YXIgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsZXgoKTtcblxuICAgIGlmICghaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSB7XG4gICAgZXhwZWN0KFwiLlwiKTtcblxuICAgIHJldHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb21wdXRlZE1lbWJlcigpIHtcbiAgICB2YXIgZXhwcjtcblxuICAgIGV4cGVjdChcIltcIik7XG5cbiAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCJdXCIpO1xuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgY2FsbGVlLCBhcmdzLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJuZXdcIik7XG4gICAgY2FsbGVlID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCk7XG4gICAgYXJncyA9IG1hdGNoKFwiKFwiKSA/IHBhcnNlQXJndW1lbnRzKCkgOiBbXTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpIHtcbiAgICB2YXIgZXhwciwgYXJncyxcbiAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbixcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcbiAgICBleHByID0gbWF0Y2hLZXl3b3JkKFwibmV3XCIpID8gcGFyc2VOZXdFeHByZXNzaW9uKCkgOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7XG4gICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcblxuICAgIC8vIG9ubHkgc3RhcnQgcGFyc2luZyB0ZW1wbGF0ZSBsaXRlcmFsIGlmIHRoZSBsb29rYWhlYWQgaXMgYSBoZWFkIChiZWdpbm5pbmcgd2l0aCBgKVxuICAgIHdoaWxlIChtYXRjaChcIi5cIikgfHwgbWF0Y2goXCJbXCIpIHx8IG1hdGNoKFwiKFwiKSB8fCAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlICYmIGxvb2thaGVhZC5oZWFkKSkge1xuICAgICAgICBpZiAobWF0Y2goXCIoXCIpKSB7XG4gICAgICAgICAgICBhcmdzID0gcGFyc2VBcmd1bWVudHMoKTtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNhbGxFeHByZXNzaW9uKGV4cHIsIGFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oXCJbXCIsIGV4cHIsIHBhcnNlQ29tcHV0ZWRNZW1iZXIoKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKFwiLlwiKSkge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbihcIi5cIiwgZXhwciwgcGFyc2VOb25Db21wdXRlZE1lbWJlcigpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwcixcbiAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbixcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHByID0gbWF0Y2hLZXl3b3JkKFwibmV3XCIpID8gcGFyc2VOZXdFeHByZXNzaW9uKCkgOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7XG4gICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcblxuICAgIC8vIG9ubHkgc3RhcnQgcGFyc2luZyB0ZW1wbGF0ZSBsaXRlcmFsIGlmIHRoZSBsb29rYWhlYWQgaXMgYSBoZWFkIChiZWdpbm5pbmcgd2l0aCBgKVxuICAgIHdoaWxlIChtYXRjaChcIi5cIikgfHwgbWF0Y2goXCJbXCIpIHx8IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUgJiYgbG9va2FoZWFkLmhlYWQpKSB7XG4gICAgICAgIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oXCJbXCIsIGV4cHIsIHBhcnNlQ29tcHV0ZWRNZW1iZXIoKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKFwiLlwiKSkge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbihcIi5cIiwgZXhwciwgcGFyc2VOb25Db21wdXRlZE1lbWJlcigpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cblxuLy8gMTEuMyBQb3N0Zml4IEV4cHJlc3Npb25zXG5cbmZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIGV4cHIsIHRva2VuLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cHIgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikge1xuICAgICAgICBpZiAoKG1hdGNoKFwiKytcIikgfHwgbWF0Y2goXCItLVwiKSkgJiYgIXBlZWtMaW5lVGVybWluYXRvcigpKSB7XG4gICAgICAgICAgICAvLyAxMS4zLjEsIDExLjMuMlxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyICYmIHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1Bvc3RmaXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGV4cHIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuNCBVbmFyeSBPcGVyYXRvcnNcblxuZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHRva2VuLCBleHByLFxuICAgICAgICBtYXJrZXI7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiKytcIikgfHwgbWF0Y2goXCItLVwiKSkge1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgICAgIC8vIDExLjQuNCwgMTEuNC41XG4gICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllciAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1ByZWZpeCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGV4cHIpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7XG4gICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCIrXCIpIHx8IG1hdGNoKFwiLVwiKSB8fCBtYXRjaChcIn5cIikgfHwgbWF0Y2goXCIhXCIpKSB7XG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7XG4gICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3JkKFwiZGVsZXRlXCIpIHx8IG1hdGNoS2V5d29yZChcInZvaWRcIikgfHwgbWF0Y2hLZXl3b3JkKFwidHlwZW9mXCIpKSB7XG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7XG4gICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09IFwiZGVsZXRlXCIgJiYgZXhwci5hcmd1bWVudC50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3REZWxldGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgYWxsb3dJbikge1xuICAgIHZhciBwcmVjID0gMDtcblxuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIHRva2VuLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgIGNhc2UgXCJ8fFwiOlxuICAgICAgICBwcmVjID0gMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiJiZcIjpcbiAgICAgICAgcHJlYyA9IDI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInxcIjpcbiAgICAgICAgcHJlYyA9IDM7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIl5cIjpcbiAgICAgICAgcHJlYyA9IDQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIiZcIjpcbiAgICAgICAgcHJlYyA9IDU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIj09XCI6XG4gICAgY2FzZSBcIiE9XCI6XG4gICAgY2FzZSBcIj09PVwiOlxuICAgIGNhc2UgXCIhPT1cIjpcbiAgICAgICAgcHJlYyA9IDY7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIjxcIjpcbiAgICBjYXNlIFwiPlwiOlxuICAgIGNhc2UgXCI8PVwiOlxuICAgIGNhc2UgXCI+PVwiOlxuICAgIGNhc2UgXCJpbnN0YW5jZW9mXCI6XG4gICAgICAgIHByZWMgPSA3O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCJpblwiOlxuICAgICAgICBwcmVjID0gYWxsb3dJbiA/IDcgOiAwO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCI8PFwiOlxuICAgIGNhc2UgXCI+PlwiOlxuICAgIGNhc2UgXCI+Pj5cIjpcbiAgICAgICAgcHJlYyA9IDg7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIitcIjpcbiAgICBjYXNlIFwiLVwiOlxuICAgICAgICBwcmVjID0gOTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiKlwiOlxuICAgIGNhc2UgXCIvXCI6XG4gICAgY2FzZSBcIiVcIjpcbiAgICAgICAgcHJlYyA9IDExO1xuICAgICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVjO1xufVxuXG4vLyAxMS41IE11bHRpcGxpY2F0aXZlIE9wZXJhdG9yc1xuLy8gMTEuNiBBZGRpdGl2ZSBPcGVyYXRvcnNcbi8vIDExLjcgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnNcbi8vIDExLjggUmVsYXRpb25hbCBPcGVyYXRvcnNcbi8vIDExLjkgRXF1YWxpdHkgT3BlcmF0b3JzXG4vLyAxMS4xMCBCaW5hcnkgQml0d2lzZSBPcGVyYXRvcnNcbi8vIDExLjExIEJpbmFyeSBMb2dpY2FsIE9wZXJhdG9yc1xuZnVuY3Rpb24gcGFyc2VCaW5hcnlFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByLCB0b2tlbiwgcHJlYywgcHJldmlvdXNBbGxvd0luLCBzdGFjaywgcmlnaHQsIG9wZXJhdG9yLCBsZWZ0LCBpLFxuICAgICAgICBtYXJrZXIsIG1hcmtlcnM7XG5cbiAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luO1xuICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlO1xuXG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgbGVmdCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG5cbiAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICBwcmVjID0gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgcHJldmlvdXNBbGxvd0luKTtcbiAgICBpZiAocHJlYyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbGVmdDtcbiAgICB9XG4gICAgdG9rZW4ucHJlYyA9IHByZWM7XG4gICAgbGV4KCk7XG5cbiAgICBtYXJrZXJzID0gW21hcmtlciwgbWFya2VyQ3JlYXRlKCldO1xuICAgIHJpZ2h0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcblxuICAgIHN0YWNrID0gW2xlZnQsIHRva2VuLCByaWdodF07XG5cbiAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKGxvb2thaGVhZCwgcHJldmlvdXNBbGxvd0luKSkgPiAwKSB7XG5cbiAgICAgICAgLy8gUmVkdWNlOiBtYWtlIGEgYmluYXJ5IGV4cHJlc3Npb24gZnJvbSB0aGUgdGhyZWUgdG9wbW9zdCBlbnRyaWVzLlxuICAgICAgICB3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChwcmVjIDw9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDJdLnByZWMpKSB7XG4gICAgICAgICAgICByaWdodCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgb3BlcmF0b3IgPSBzdGFjay5wb3AoKS52YWx1ZTtcbiAgICAgICAgICAgIGxlZnQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCk7XG4gICAgICAgICAgICBtYXJrZXJzLnBvcCgpO1xuICAgICAgICAgICAgbWFya2VyID0gbWFya2Vycy5wb3AoKTtcbiAgICAgICAgICAgIG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGV4cHIpO1xuICAgICAgICAgICAgbWFya2Vycy5wdXNoKG1hcmtlcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaGlmdC5cbiAgICAgICAgdG9rZW4gPSBsZXgoKTtcbiAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7XG4gICAgICAgIHN0YWNrLnB1c2godG9rZW4pO1xuICAgICAgICBtYXJrZXJzLnB1c2gobWFya2VyQ3JlYXRlKCkpO1xuICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcbiAgICAgICAgc3RhY2sucHVzaChleHByKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgLy8gRmluYWwgcmVkdWNlIHRvIGNsZWFuLXVwIHRoZSBzdGFjay5cbiAgICBpID0gc3RhY2subGVuZ3RoIC0gMTtcbiAgICBleHByID0gc3RhY2tbaV07XG4gICAgbWFya2Vycy5wb3AoKTtcbiAgICB3aGlsZSAoaSA+IDEpIHtcbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24oc3RhY2tbaSAtIDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIGV4cHIpO1xuICAgICAgICBpIC09IDI7XG4gICAgICAgIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7XG4gICAgICAgIG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbi8vIDExLjEyIENvbmRpdGlvbmFsIE9wZXJhdG9yXG5cbmZ1bmN0aW9uIHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByLCBwcmV2aW91c0FsbG93SW4sIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHByID0gcGFyc2VCaW5hcnlFeHByZXNzaW9uKCk7XG5cbiAgICBpZiAobWF0Y2goXCI/XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luO1xuICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcbiAgICAgICAgY29uc2VxdWVudCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjtcbiAgICAgICAgZXhwZWN0KFwiOlwiKTtcbiAgICAgICAgYWx0ZXJuYXRlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuXG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbiAgICAgICAgbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuLy8gW0VTNl0gMTQuMiBBcnJvdyBGdW5jdGlvblxuXG5mdW5jdGlvbiBwYXJzZUNvbmNpc2VCb2R5KCkge1xuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xufVxuXG5mdW5jdGlvbiByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChleHByZXNzaW9ucykge1xuICAgIHZhciBpLCBsZW4sIHBhcmFtLCBwYXJhbXMsIG9wdGlvbnMsXG4gICAgICAgIGFsbG93UmVzdFBhcmFtcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5yZXN0UGFyYW1zO1xuXG4gICAgcGFyYW1zID0gW107XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgIH07XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByZXNzaW9ucy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICBwYXJhbSA9IGV4cHJlc3Npb25zW2ldO1xuICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0sIHBhcmFtLm5hbWUpO1xuICAgICAgICB9ICBlbHNlIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbiB8fCBwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuU3ByZWFkRWxlbWVudCkge1xuICAgICAgICAgICAgYXNzZXJ0KGkgPT09IGxlbiAtIDEsIFwiSXQgaXMgZ3VhcmFudGVlZCB0aGF0IFNwcmVhZEVsZW1lbnQgaXMgbGFzdCBlbGVtZW50IGJ5IHBhcnNlRXhwcmVzc2lvblwiKTtcbiAgICAgICAgICAgIGlmIChwYXJhbS5hcmd1bWVudC50eXBlICE9PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJbXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFsbG93UmVzdFBhcmFtcykge1xuICAgICAgICAgICAgICAgIC8vIGNhbid0IGdldCBjb3JyZWN0IGxpbmUvY29sdW1uIGhlcmUgOihcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbS5hcmd1bWVudCk7XG4gICAgICAgICAgICBwYXJhbS50eXBlID0gYXN0Tm9kZVR5cGVzLlJlc3RFbGVtZW50O1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5SZXN0RWxlbWVudCkge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1bWVudCwgcGFyYW0uYXJndW1lbnQubmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRFeHByZXNzaW9uKSB7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgYSBsZXNzIGhhY2t5IHdheSBvZiBkb2luZyB0aGlzXG4gICAgICAgICAgICBwYXJhbS50eXBlID0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgICAgICAgICAgZGVsZXRlIHBhcmFtLm9wZXJhdG9yO1xuXG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmxlZnQsIHBhcmFtLmxlZnQubmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1lc3NhZ2UgPT09IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZSkge1xuICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgc3RyaWN0ID8gb3B0aW9ucy5zdHJpY3RlZCA6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLFxuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLFxuICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLFxuICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2VcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKG9wdGlvbnMsIG1hcmtlcikge1xuICAgIHZhciBwcmV2aW91c1N0cmljdCwgYm9keTtcblxuICAgIGV4cGVjdChcIj0+XCIpO1xuICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgYm9keSA9IHBhcnNlQ29uY2lzZUJvZHkoKTtcblxuICAgIGlmIChzdHJpY3QgJiYgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcihvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCwgb3B0aW9ucy5tZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKHN0cmljdCAmJiBvcHRpb25zLnN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChvcHRpb25zLnN0cmljdGVkLCBvcHRpb25zLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKFxuICAgICAgICBvcHRpb25zLnBhcmFtcyxcbiAgICAgICAgYm9keSxcbiAgICAgICAgYm9keS50eXBlICE9PSBhc3ROb2RlVHlwZXMuQmxvY2tTdGF0ZW1lbnRcbiAgICApKTtcbn1cblxuLy8gMTEuMTMgQXNzaWdubWVudCBPcGVyYXRvcnNcblxuLy8gMTIuMTQuNSBBc3NpZ25tZW50UGF0dGVyblxuXG5mdW5jdGlvbiByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKGV4cHIpIHtcbiAgICB2YXIgaSwgbGVuLCBwcm9wZXJ0eSwgZWxlbWVudCxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmc7XG5cbiAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgIH1cblxuICAgIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5PYmplY3RQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtpbmQgIT09IFwiaW5pdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4ocHJvcGVydHkudmFsdWUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5BcnJheUV4cHJlc3Npb24pIHtcbiAgICAgICAgZXhwci50eXBlID0gYXN0Tm9kZVR5cGVzLkFycmF5UGF0dGVybjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5lbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IGV4cHIuZWxlbWVudHNbaV07XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZWludGVycHJldEFzQXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZXhwci5hcmd1bWVudCk7XG4gICAgICAgIGlmIChleHByLmFyZ3VtZW50LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RQYXR0ZXJuKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5Bc1NwcmVhZCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiICYmIGV4cHIub3BlcmF0b3IgPT09IFwiPVwiKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuQ2FsbEV4cHJlc3Npb24gJiZcbiAgICAgICAgICAgIGV4cHIudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLk5ld0V4cHJlc3Npb24gJiZcbiAgICAgICAgICAgIGV4cHIudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gMTMuMi4zIEJpbmRpbmdQYXR0ZXJuXG5cbmZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgZXhwcikge1xuICAgIHZhciBpLCBsZW4sIHByb3BlcnR5LCBlbGVtZW50LFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZztcblxuICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfVxuXG4gICAgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24pIHtcbiAgICAgICAgZXhwci50eXBlID0gYXN0Tm9kZVR5cGVzLk9iamVjdFBhdHRlcm47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBleHByLnByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBpZiAocHJvcGVydHkua2luZCAhPT0gXCJpbml0XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvcm1hbHNMaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcHJvcGVydHkudmFsdWUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5BcnJheUV4cHJlc3Npb24pIHtcbiAgICAgICAgZXhwci50eXBlID0gYXN0Tm9kZVR5cGVzLkFycmF5UGF0dGVybjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5lbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IGV4cHIuZWxlbWVudHNbaV07XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBleHByLCBleHByLm5hbWUpO1xuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuU3ByZWFkRWxlbWVudCkge1xuICAgICAgICAvLyBCaW5kaW5nUmVzdEVsZW1lbnQgb25seSBhbGxvd3MgQmluZGluZ0lkZW50aWZpZXJcbiAgICAgICAgaWYgKGV4cHIuYXJndW1lbnQudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ybWFsc0xpc3QpO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgZXhwci5hcmd1bWVudCwgZXhwci5hcmd1bWVudC5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRFeHByZXNzaW9uICYmIGV4cHIub3BlcmF0b3IgPT09IFwiPVwiKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybjtcbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvcm1hbHNMaXN0KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHRva2VuLCBsZWZ0LCByaWdodCwgbm9kZSwgcGFyYW1zLFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIHN0YXJ0c1dpdGhQYXJlbiA9IGZhbHNlLFxuICAgICAgICBvbGRQYXJlbnRoZXNpc0NvdW50ID0gc3RhdGUucGFyZW50aGVzaXNDb3VudCxcbiAgICAgICAgYWxsb3dHZW5lcmF0b3JzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnM7XG5cbiAgICAvLyBOb3RlIHRoYXQgJ3lpZWxkJyBpcyB0cmVhdGVkIGFzIGEga2V5d29yZCBpbiBzdHJpY3QgbW9kZSwgYnV0IGFcbiAgICAvLyBjb250ZXh0dWFsIGtleXdvcmQgKGlkZW50aWZpZXIpIGluIG5vbi1zdHJpY3QgbW9kZSwgc28gd2UgbmVlZFxuICAgIC8vIHRvIHVzZSBtYXRjaEtleXdvcmQgYW5kIG1hdGNoQ29udGV4dHVhbEtleXdvcmQgYXBwcm9wcmlhdGVseS5cbiAgICBpZiAoYWxsb3dHZW5lcmF0b3JzICYmICgoc3RhdGUueWllbGRBbGxvd2VkICYmIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJ5aWVsZFwiKSkgfHwgKHN0cmljdCAmJiBtYXRjaEtleXdvcmQoXCJ5aWVsZFwiKSkpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVlpZWxkRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKG1hdGNoKFwiKFwiKSkge1xuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDIoKTtcbiAgICAgICAgaWYgKCh0b2tlbi52YWx1ZSA9PT0gXCIpXCIgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgfHwgdG9rZW4udmFsdWUgPT09IFwiLi4uXCIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKFwiPT5cIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ocGFyYW1zLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0c1dpdGhQYXJlbiA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gcmV2ZXJ0IHRvIHRoZSBwcmV2aW91cyBsb29rYWhlYWQgc3R5bGUgb2JqZWN0XG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgbm9kZSA9IGxlZnQgPSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpO1xuXG4gICAgaWYgKG1hdGNoKFwiPT5cIikgJiZcbiAgICAgICAgICAgIChzdGF0ZS5wYXJlbnRoZXNpc0NvdW50ID09PSBvbGRQYXJlbnRoZXNpc0NvdW50IHx8XG4gICAgICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpc0NvdW50ID09PSAob2xkUGFyZW50aGVzaXNDb3VudCArIDEpKSkge1xuXG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChbIG5vZGUgXSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24gfHxcbiAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbiB8fFxuICAgICAgICAgICAgbm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKCFzdGFydHNXaXRoUGFyZW4pIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoWyBub2RlIF0pO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNlcXVlbmNlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3Qobm9kZS5leHByZXNzaW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hBc3NpZ24oKSkge1xuXG4gICAgICAgIC8vIDExLjEzLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBsZWZ0LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyICYmIHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGxlZnQubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFUy5uZXh0IGRyYWYgMTEuMTMgUnVudGltZSBTZW1hbnRpY3Mgc3RlcCAxXG4gICAgICAgIGlmIChtYXRjaChcIj1cIikgJiYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uKSkge1xuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNMZWZ0SGFuZFNpZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICByaWdodCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgbm9kZSA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXNzaWdubWVudEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGxlZnQsIHJpZ2h0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbi8vIDExLjE0IENvbW1hIE9wZXJhdG9yXG5cbmZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgIGV4cHJlc3Npb25zID0gWyBleHByIF0sXG4gICAgICAgIHNlcXVlbmNlLCBzcHJlYWRGb3VuZDtcblxuICAgIGlmIChtYXRjaChcIixcIikpIHtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKFwiLFwiKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBleHByID0gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGV4cHIpO1xuXG4gICAgICAgICAgICBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuU3ByZWFkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHNwcmVhZEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5FbGVtZW50QWZ0ZXJTcHJlYWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXF1ZW5jZSA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHNwcmVhZEZvdW5kICYmIGxvb2thaGVhZDIoKS52YWx1ZSAhPT0gXCI9PlwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxTcHJlYWQpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXF1ZW5jZSB8fCBleHByO1xufVxuXG4vLyAxMi4xIEJsb2NrXG5cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdCgpIHtcbiAgICB2YXIgbGlzdCA9IFtdLFxuICAgICAgICBzdGF0ZW1lbnQ7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKG1hdGNoKFwifVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsaXN0LnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdDtcbn1cblxuZnVuY3Rpb24gcGFyc2VCbG9jaygpIHtcbiAgICB2YXIgYmxvY2ssXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcblxuICAgIGJsb2NrID0gcGFyc2VTdGF0ZW1lbnRMaXN0KCk7XG5cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQmxvY2tTdGF0ZW1lbnQoYmxvY2spKTtcbn1cblxuLy8gMTIuMiBWYXJpYWJsZSBTdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSB7XG4gICAgdmFyIHRva2VuLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBpZiAoc3RyaWN0ICYmIHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQgJiYgc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihraW5kKSB7XG4gICAgdmFyIGlkLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgaW5pdCA9IG51bGw7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICBpZCA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihpZCk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgaWQgPSBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWQgPSBzdGF0ZS5hbGxvd0tleXdvcmQgPyBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKSA6IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgICAgIC8vIDEyLjIuMVxuICAgICAgICBpZiAoc3RyaWN0ICYmIHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdFZhck5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVmVyaWZ5IGFnYWluc3QgZmVhdHVyZSBmbGFnc1xuICAgIGlmIChraW5kID09PSBcImNvbnN0XCIpIHtcbiAgICAgICAgaWYgKCFtYXRjaChcIj1cIikpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5vVW5pbnRpYWxpemVkQ29uc3QpO1xuICAgICAgICB9XG4gICAgICAgIGV4cGVjdChcIj1cIik7XG4gICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIj1cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoa2luZCkge1xuICAgIHZhciBsaXN0ID0gW107XG5cbiAgICBkbyB7XG4gICAgICAgIGxpc3QucHVzaChwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkpO1xuICAgICAgICBpZiAoIW1hdGNoKFwiLFwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbGV4KCk7XG4gICAgfSB3aGlsZSAoaW5kZXggPCBsZW5ndGgpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGRlY2xhcmF0aW9ucztcblxuICAgIGV4cGVjdEtleXdvcmQoXCJ2YXJcIik7XG5cbiAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIFwidmFyXCIpO1xufVxuXG4vLyBraW5kIG1heSBiZSBgY29uc3RgIG9yIGBsZXRgXG4vLyBCb3RoIGFyZSBleHBlcmltZW50YWwgYW5kIG5vdCBpbiB0aGUgc3BlY2lmaWNhdGlvbiB5ZXQuXG4vLyBzZWUgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTpjb25zdFxuLy8gYW5kIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6bGV0XG5mdW5jdGlvbiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24oa2luZCkge1xuICAgIHZhciBkZWNsYXJhdGlvbnMsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwZWN0S2V5d29yZChraW5kKTtcblxuICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoa2luZCk7XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkpO1xufVxuXG5cbmZ1bmN0aW9uIHBhcnNlUmVzdEVsZW1lbnQoKSB7XG4gICAgdmFyIHBhcmFtLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGxleCgpO1xuXG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZCwgTWVzc2FnZXMuT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcik7XG4gICAgfVxuXG4gICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgaWYgKG1hdGNoKFwiPVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZCwgTWVzc2FnZXMuRGVmYXVsdFJlc3RQYXJhbWV0ZXIpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIHRocm93RXJyb3IobG9va2FoZWFkLCBNZXNzYWdlcy5QYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVJlc3RFbGVtZW50KHBhcmFtKSk7XG59XG5cbi8vIDEyLjMgRW1wdHkgU3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSB7XG4gICAgZXhwZWN0KFwiO1wiKTtcbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRW1wdHlTdGF0ZW1lbnQoKTtcbn1cblxuLy8gMTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcik7XG59XG5cbi8vIDEyLjUgSWYgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlSWZTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJpZlwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgY29uc2VxdWVudCA9IHBhcnNlU3RhdGVtZW50KCk7XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZWxzZVwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgYWx0ZXJuYXRlID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhbHRlcm5hdGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZlN0YXRlbWVudCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpO1xufVxuXG4vLyAxMi42IEl0ZXJhdGlvbiBTdGF0ZW1lbnRzXG5cbmZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpIHtcbiAgICB2YXIgYm9keSwgdGVzdCwgb2xkSW5JdGVyYXRpb247XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiZG9cIik7XG5cbiAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTtcblxuICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJ3aGlsZVwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgaWYgKG1hdGNoKFwiO1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRG9XaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXaGlsZVN0YXRlbWVudCgpIHtcbiAgICB2YXIgdGVzdCwgYm9keSwgb2xkSW5JdGVyYXRpb247XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2hpbGVcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247XG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlO1xuXG4gICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7XG5cbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVdoaWxlU3RhdGVtZW50KHRlc3QsIGJvZHkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHRva2VuLCBkZWNsYXJhdGlvbnMsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsZXgoKTtcbiAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgdG9rZW4udmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQob3B0cykge1xuICAgIHZhciBpbml0LCB0ZXN0LCB1cGRhdGUsIGxlZnQsIHJpZ2h0LCBib2R5LCBvcGVyYXRvciwgb2xkSW5JdGVyYXRpb247XG4gICAgdmFyIGFsbG93Rm9yT2YgPSBleHRyYS5lY21hRmVhdHVyZXMuZm9yT2YsXG4gICAgICAgIGFsbG93QmxvY2tCaW5kaW5ncyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5ibG9ja0JpbmRpbmdzO1xuXG4gICAgaW5pdCA9IHRlc3QgPSB1cGRhdGUgPSBudWxsO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImZvclwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBpZiAobWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgICAgaWYgKG1hdGNoS2V5d29yZChcInZhclwiKSB8fFxuICAgICAgICAgICAgKGFsbG93QmxvY2tCaW5kaW5ncyAmJiAobWF0Y2hLZXl3b3JkKFwibGV0XCIpIHx8IG1hdGNoS2V5d29yZChcImNvbnN0XCIpKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7XG4gICAgICAgICAgICBpbml0ID0gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGluaXQuZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJpblwiKSB8fCAoYWxsb3dGb3JPZiAmJiBtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwib2ZcIikpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gbG9va2FoZWFkO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGlzIFwidmFyXCIgY2hlY2sgaGVyZSByZWFsbHkgbmVlZGVkPyB3YXNuXCJ0IGluIDEuMi4yXG4gICAgICAgICAgICAgICAgICAgIGlmICghKChvcGVyYXRvci52YWx1ZSA9PT0gXCJpblwiIHx8IGluaXQua2luZCAhPT0gXCJ2YXJcIikgJiYgaW5pdC5kZWNsYXJhdGlvbnNbMF0uaW5pdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGluaXQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoYWxsb3dGb3JPZiAmJiBtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwib2ZcIikpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGxleCgpO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZChcImluXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gTGVmdEhhbmRTaWRlRXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoaW5pdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBleHBlY3QoXCI7XCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBsZWZ0ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cbiAgICAgICAgaWYgKCFtYXRjaChcIjtcIikpIHtcbiAgICAgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoXCI7XCIpO1xuXG4gICAgICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgICAgICB1cGRhdGUgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTtcblxuICAgIGlmICghKG9wdHMgIT09IHVuZGVmaW5lZCAmJiBvcHRzLmlnbm9yZUJvZHkpKSB7XG4gICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuICAgIH1cblxuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG5cbiAgICBpZiAodHlwZW9mIGxlZnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZvclN0YXRlbWVudChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpO1xuICAgIH1cblxuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMuZm9yT2YgJiYgb3BlcmF0b3IudmFsdWUgPT09IFwib2ZcIikge1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGb3JJblN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSk7XG59XG5cbi8vIDEyLjcgVGhlIGNvbnRpbnVlIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCkge1xuICAgIHZhciBsYWJlbCA9IG51bGw7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiY29udGludWVcIik7XG5cbiAgICAvLyBPcHRpbWl6ZSB0aGUgbW9zdCBjb21tb24gZm9ybTogXCJjb250aW51ZTtcIi5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7XG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7XG4gICAgICAgIGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLmxhYmVsU2V0LmhhcyhsYWJlbC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhc3RhdGUuaW5JdGVyYXRpb24pIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobGFiZWwpO1xufVxuXG4vLyAxMi44IFRoZSBicmVhayBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VCcmVha1N0YXRlbWVudCgpIHtcbiAgICB2YXIgbGFiZWwgPSBudWxsO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImJyZWFrXCIpO1xuXG4gICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLlxuICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IpIHtcbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLmxhYmVsU2V0LmhhcyhsYWJlbC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspO1xuICAgIH1cblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCcmVha1N0YXRlbWVudChsYWJlbCk7XG59XG5cbi8vIDEyLjkgVGhlIHJldHVybiBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGFyZ3VtZW50ID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJyZXR1cm5cIik7XG5cbiAgICBpZiAoIXN0YXRlLmluRnVuY3Rpb25Cb2R5ICYmICFleHRyYS5lY21hRmVhdHVyZXMuZ2xvYmFsUmV0dXJuKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFJldHVybik7XG4gICAgfVxuXG4gICAgLy8gXCJyZXR1cm5cIiBmb2xsb3dlZCBieSBhIHNwYWNlIGFuZCBhbiBpZGVudGlmaWVyIGlzIHZlcnkgY29tbW9uLlxuICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MjApIHtcbiAgICAgICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkge1xuICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICAgICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7XG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQobnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIjtcIikpIHtcbiAgICAgICAgaWYgKCFtYXRjaChcIn1cIikgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpO1xufVxuXG4vLyAxMi4xMCBUaGUgd2l0aCBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VXaXRoU3RhdGVtZW50KCkge1xuICAgIHZhciBvYmplY3QsIGJvZHk7XG5cbiAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIC8vIFRPRE8oaWthcmllbmF0b3IpOiBTaG91bGQgd2UgdXBkYXRlIHRoZSB0ZXN0IGNhc2VzIGluc3RlYWQ/XG4gICAgICAgIHNraXBDb21tZW50KCk7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TW9kZVdpdGgpO1xuICAgIH1cblxuICAgIGV4cGVjdEtleXdvcmQoXCJ3aXRoXCIpO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgIG9iamVjdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVdpdGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5KTtcbn1cblxuLy8gMTIuMTAgVGhlIHN3aXRoIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKSB7XG4gICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQgPSBbXSwgc3RhdGVtZW50LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJkZWZhdWx0XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICB0ZXN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHBlY3RLZXl3b3JkKFwiY2FzZVwiKTtcbiAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBleHBlY3QoXCI6XCIpO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaChcIn1cIikgfHwgbWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKSB8fCBtYXRjaEtleXdvcmQoXCJjYXNlXCIpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNlcXVlbnQucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN3aXRjaFN0YXRlbWVudCgpIHtcbiAgICB2YXIgZGlzY3JpbWluYW50LCBjYXNlcywgY2xhdXNlLCBvbGRJblN3aXRjaCwgZGVmYXVsdEZvdW5kO1xuXG4gICAgZXhwZWN0S2V5d29yZChcInN3aXRjaFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBkaXNjcmltaW5hbnQgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgY2FzZXMgPSBbXTtcblxuICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcyk7XG4gICAgfVxuXG4gICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3aXRjaDtcbiAgICBzdGF0ZS5pblN3aXRjaCA9IHRydWU7XG4gICAgZGVmYXVsdEZvdW5kID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKG1hdGNoKFwifVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2xhdXNlID0gcGFyc2VTd2l0Y2hDYXNlKCk7XG4gICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRGb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0Rm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2VzLnB1c2goY2xhdXNlKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoO1xuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcyk7XG59XG5cbi8vIDEyLjEzIFRoZSB0aHJvdyBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VUaHJvd1N0YXRlbWVudCgpIHtcbiAgICB2YXIgYXJndW1lbnQ7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwidGhyb3dcIik7XG5cbiAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTmV3bGluZUFmdGVyVGhyb3cpO1xuICAgIH1cblxuICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGhyb3dTdGF0ZW1lbnQoYXJndW1lbnQpO1xufVxuXG4vLyAxMi4xNCBUaGUgdHJ5IHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUNhdGNoQ2xhdXNlKCkge1xuICAgIHZhciBwYXJhbSwgYm9keSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGFsbG93RGVzdHJ1Y3R1cmluZyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZXN0cnVjdHVyaW5nLFxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICB9O1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNhdGNoXCIpO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcbiAgICBpZiAobWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJ7XCIpKSB7XG5cbiAgICAgICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgLy8gMTIuMTQuMVxuICAgIGlmIChzdHJpY3QgJiYgcGFyYW0ubmFtZSAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChwYXJhbS5uYW1lKSkge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUpO1xuICAgIH1cblxuICAgIGV4cGVjdChcIilcIik7XG4gICAgYm9keSA9IHBhcnNlQmxvY2soKTtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVDYXRjaENsYXVzZShwYXJhbSwgYm9keSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRyeVN0YXRlbWVudCgpIHtcbiAgICB2YXIgYmxvY2ssIGhhbmRsZXIgPSBudWxsLCBmaW5hbGl6ZXIgPSBudWxsO1xuXG4gICAgZXhwZWN0S2V5d29yZChcInRyeVwiKTtcblxuICAgIGJsb2NrID0gcGFyc2VCbG9jaygpO1xuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImNhdGNoXCIpKSB7XG4gICAgICAgIGhhbmRsZXIgPSBwYXJzZUNhdGNoQ2xhdXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImZpbmFsbHlcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGZpbmFsaXplciA9IHBhcnNlQmxvY2soKTtcbiAgICB9XG5cbiAgICBpZiAoIWhhbmRsZXIgJiYgIWZpbmFsaXplcikge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVHJ5U3RhdGVtZW50KGJsb2NrLCBoYW5kbGVyLCBmaW5hbGl6ZXIpO1xufVxuXG4vLyAxMi4xNSBUaGUgZGVidWdnZXIgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSB7XG4gICAgZXhwZWN0S2V5d29yZChcImRlYnVnZ2VyXCIpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50KCk7XG59XG5cbi8vIDEyIFN0YXRlbWVudHNcblxuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIHR5cGUgPSBsb29rYWhlYWQudHlwZSxcbiAgICAgICAgZXhwcixcbiAgICAgICAgbGFiZWxlZEJvZHksXG4gICAgICAgIG1hcmtlcjtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSBcIntcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VCbG9jaygpO1xuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCI7XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VFbXB0eVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ7XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgIGNhc2UgXCIoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJicmVha1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiY29udGludWVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcImRlYnVnZ2VyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJkb1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJmb3JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUZvclN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpKTtcbiAgICAgICAgICAgIGNhc2UgXCJpZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlSWZTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwicmV0dXJuXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwic3dpdGNoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwidGhyb3dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVRocm93U3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInRyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlVHJ5U3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInZhclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwid2hpbGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVdoaWxlU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcIndpdGhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVdpdGhTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgLy8gMTIuMTIgTGFiZWxsZWQgU3RhdGVtZW50c1xuICAgIGlmICgoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikgJiYgbWF0Y2goXCI6XCIpKSB7XG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIGlmIChzdGF0ZS5sYWJlbFNldC5oYXMoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwgXCJMYWJlbFwiLCBleHByLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUubGFiZWxTZXQuc2V0KGV4cHIubmFtZSwgdHJ1ZSk7XG4gICAgICAgIGxhYmVsZWRCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICAgICAgc3RhdGUubGFiZWxTZXQuZGVsZXRlKGV4cHIubmFtZSk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoZXhwciwgbGFiZWxlZEJvZHkpKTtcbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpKTtcbn1cblxuLy8gMTMgRnVuY3Rpb24gRGVmaW5pdGlvblxuXG4vLyBmdW5jdGlvbiBwYXJzZUNvbmNpc2VCb2R5KCkge1xuLy8gICAgIGlmIChtYXRjaChcIntcIikpIHtcbi8vICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuLy8gICAgIH1cbi8vICAgICByZXR1cm4gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuLy8gfVxuXG5mdW5jdGlvbiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKSB7XG4gICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgb2xkTGFiZWxTZXQsIG9sZEluSXRlcmF0aW9uLCBvbGRJblN3aXRjaCwgb2xkSW5GdW5jdGlvbkJvZHksIG9sZFBhcmVudGhlc2lzQ291bnQsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTtcbiAgICAgICAgaWYgKHNvdXJjZUVsZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBhc3ROb2RlVHlwZXMuTGl0ZXJhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xpY2UodG9rZW4ucmFuZ2VbMF0gKyAxLCB0b2tlbi5yYW5nZVsxXSAtIDEpO1xuICAgICAgICBpZiAoZGlyZWN0aXZlID09PSBcInVzZSBzdHJpY3RcIikge1xuICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb2xkTGFiZWxTZXQgPSBzdGF0ZS5sYWJlbFNldDtcbiAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7XG4gICAgb2xkSW5GdW5jdGlvbkJvZHkgPSBzdGF0ZS5pbkZ1bmN0aW9uQm9keTtcbiAgICBvbGRQYXJlbnRoZXNpc0NvdW50ID0gc3RhdGUucGFyZW50aGVzaXplZENvdW50O1xuXG4gICAgc3RhdGUubGFiZWxTZXQgPSBuZXcgU3RyaW5nTWFwKCk7XG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBmYWxzZTtcbiAgICBzdGF0ZS5pblN3aXRjaCA9IGZhbHNlO1xuICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gdHJ1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuXG4gICAgICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICBzdGF0ZS5sYWJlbFNldCA9IG9sZExhYmVsU2V0O1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG4gICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDtcbiAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IG9sZEluRnVuY3Rpb25Cb2R5O1xuICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9IG9sZFBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCbG9ja1N0YXRlbWVudChzb3VyY2VFbGVtZW50cykpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7XG5cbiAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZChuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1TZXQuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQgPSBwYXJhbTtcbiAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnBhcmFtU2V0LmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQgPSBwYXJhbTtcbiAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zLnBhcmFtU2V0LnNldChuYW1lLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJhbShvcHRpb25zKSB7XG4gICAgdmFyIHRva2VuLCBwYXJhbSwgZGVmLFxuICAgICAgICBhbGxvd1Jlc3RQYXJhbXMgPSBleHRyYS5lY21hRmVhdHVyZXMucmVzdFBhcmFtcyxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmcsXG4gICAgICAgIGFsbG93RGVmYXVsdFBhcmFtcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZWZhdWx0UGFyYW1zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gXCIuLi5cIikge1xuICAgICAgICBpZiAoIWFsbG93UmVzdFBhcmFtcykge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW0gPSBwYXJzZVJlc3RFbGVtZW50KCk7XG4gICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0uYXJndW1lbnQsIHBhcmFtLmFyZ3VtZW50Lm5hbWUpO1xuICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHRva2VuLCB0b2tlbi52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiPVwiKSkge1xuICAgICAgICBpZiAoYWxsb3dEZWZhdWx0UGFyYW1zIHx8IGFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBkZWYgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICArK29wdGlvbnMuZGVmYXVsdENvdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmKSB7XG4gICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gobWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVBc3NpZ25tZW50UGF0dGVybihcbiAgICAgICAgICAgICAgICBwYXJhbSxcbiAgICAgICAgICAgICAgICBkZWZcbiAgICAgICAgICAgIClcbiAgICAgICAgKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChwYXJhbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFtYXRjaChcIilcIik7XG59XG5cblxuZnVuY3Rpb24gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgdmFyIG9wdGlvbnM7XG5cbiAgICBvcHRpb25zID0ge1xuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICBkZWZhdWx0Q291bnQ6IDAsXG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZDogZmlyc3RSZXN0cmljdGVkXG4gICAgfTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICBvcHRpb25zLnBhcmFtU2V0ID0gbmV3IFN0cmluZ01hcCgpO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghcGFyc2VQYXJhbShvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwZWN0KFwiLFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLFxuICAgICAgICBzdHJpY3RlZDogb3B0aW9ucy5zdHJpY3RlZCxcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCxcbiAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7XG4gICAgICAgIHZhciBpZCA9IG51bGwsIGJvZHksIHRva2VuLCB0bXAsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzWWllbGRBbGxvd2VkLCBnZW5lcmF0b3IsXG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgICAgIGFsbG93R2VuZXJhdG9ycyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzO1xuXG4gICAgICAgIGV4cGVjdEtleXdvcmQoXCJmdW5jdGlvblwiKTtcblxuICAgICAgICBnZW5lcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFsbG93R2VuZXJhdG9ycyAmJiBtYXRjaChcIipcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaWRlbnRpZmllcklzT3B0aW9uYWwgfHwgIW1hdGNoKFwiKFwiKSkge1xuXG4gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcblxuICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKTtcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDtcbiAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDtcbiAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7XG4gICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGdlbmVyYXRvcjtcblxuICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG5cbiAgICAgICAgaWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaWN0ICYmIHRtcC5zdHJpY3RlZCkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG4gICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkO1xuXG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgdG1wLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIGdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHRva2VuLCBpZCA9IG51bGwsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgdG1wLCBib2R5LCBwcmV2aW91c1N0cmljdCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIGdlbmVyYXRvcixcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGFsbG93R2VuZXJhdG9ycyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImZ1bmN0aW9uXCIpO1xuXG4gICAgZ2VuZXJhdG9yID0gZmFsc2U7XG5cbiAgICBpZiAoYWxsb3dHZW5lcmF0b3JzICYmIG1hdGNoKFwiKlwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZ2VuZXJhdG9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoKFwiKFwiKSkge1xuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bnRheC5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDtcbiAgICBpZiAodG1wLm1lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlO1xuICAgIH1cblxuICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkO1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGdlbmVyYXRvcjtcblxuICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcblxuICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKHN0cmljdCAmJiB0bXAuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgfVxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdG1wLnBhcmFtcyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICApXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VZaWVsZEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHlpZWxkVG9rZW4sIGRlbGVnYXRlRmxhZywgZXhwciwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICB5aWVsZFRva2VuID0gbGV4KCk7XG4gICAgYXNzZXJ0KHlpZWxkVG9rZW4udmFsdWUgPT09IFwieWllbGRcIiwgXCJDYWxsZWQgcGFyc2VZaWVsZEV4cHJlc3Npb24gd2l0aCBub24teWllbGQgbG9va2FoZWFkLlwiKTtcblxuICAgIGlmICghc3RhdGUueWllbGRBbGxvd2VkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFlpZWxkKTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZUZsYWcgPSBmYWxzZTtcbiAgICBpZiAobWF0Y2goXCIqXCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBkZWxlZ2F0ZUZsYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVZaWVsZEV4cHJlc3Npb24obnVsbCwgZGVsZWdhdGVGbGFnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIjtcIikgJiYgIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICBpZiAoIW1hdGNoKFwifVwiKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlWWllbGRFeHByZXNzaW9uKGV4cHIsIGRlbGVnYXRlRmxhZykpO1xufVxuXG4vLyBNb2R1bGVzIGdyYW1tYXIgZnJvbTpcbi8vIHBlb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbFxuXG5mdW5jdGlvbiBwYXJzZU1vZHVsZVNwZWNpZmllcigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHNwZWNpZmllcjtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTtcbiAgICB9XG4gICAgc3BlY2lmaWVyID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UobGV4KCksIHNvdXJjZSk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgc3BlY2lmaWVyKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnRTcGVjaWZpZXIoKSB7XG4gICAgdmFyIGV4cG9ydGVkLCBsb2NhbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgaWYgKG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGxvY2FsID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKFwiZGVmYXVsdFwiKSk7XG4gICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSBcInNvbWV0aGluZ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZXhwb3J0ZWQgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0U3BlY2lmaWVyKGxvY2FsLCBleHBvcnRlZCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCxcbiAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllcixcbiAgICAgICAgc3JjID0gbnVsbCwgc3BlY2lmaWVycyA9IFtdLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG5cbiAgICAvLyBub24tZGVmYXVsdCBleHBvcnRcbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxO1xuICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcImxldFwiOlxuICAgICAgICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgICAgICBjYXNlIFwidmFyXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgbnVsbCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIntcIik7XG4gICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgfHwgbWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUV4cG9ydFNwZWNpZmllcigpKTtcbiAgICAgICAgfSB3aGlsZSAobWF0Y2goXCIsXCIpICYmIGxleCgpKTtcbiAgICB9XG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiZnJvbVwiKSkge1xuICAgICAgICAvLyBjb3ZlcmluZzpcbiAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fSBmcm9tIFwiZm9vXCI7XG4gICAgICAgIC8vIGV4cG9ydCB7Zm9vfSBmcm9tIFwiZm9vXCI7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgfSBlbHNlIGlmIChpc0V4cG9ydEZyb21JZGVudGlmaWVyKSB7XG4gICAgICAgIC8vIGNvdmVyaW5nOlxuICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9OyAvLyBtaXNzaW5nIGZyb21DbGF1c2VcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID9cbiAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb3ZlclxuICAgICAgICAvLyBleHBvcnQge2Zvb307XG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgc3JjKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKCkge1xuICAgIHZhciBkZWNsYXJhdGlvbiA9IG51bGwsXG4gICAgICAgIGV4cHJlc3Npb24gPSBudWxsLFxuICAgICAgICBwb3NzaWJsZUlkZW50aWZpZXJUb2tlbixcbiAgICAgICAgYWxsb3dDbGFzc2VzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmNsYXNzZXMsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgLy8gY292ZXJzOlxuICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLlxuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG4gICAgZXhwZWN0S2V5d29yZChcImRlZmF1bHRcIik7XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZnVuY3Rpb25cIikgfHwgbWF0Y2hLZXl3b3JkKFwiY2xhc3NcIikpIHtcbiAgICAgICAgcG9zc2libGVJZGVudGlmaWVyVG9rZW4gPSBsb29rYWhlYWQyKCk7XG4gICAgICAgIGlmIChwb3NzaWJsZUlkZW50aWZpZXJUb2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb28gKCkge31cbiAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIGZvbyB7fVxuICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge31cbiAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3Mge31cbiAgICAgICAgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbih0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGFsbG93Q2xhc3NlcyAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwiY2xhc3NcIikge1xuICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZUNsYXNzRGVjbGFyYXRpb24odHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiZnJvbVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gY292ZXJzOlxuICAgIC8vIGV4cG9ydCBkZWZhdWx0IHt9O1xuICAgIC8vIGV4cG9ydCBkZWZhdWx0IFtdO1xuICAgIC8vIGV4cG9ydCBkZWZhdWx0ICgxICsgMik7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGV4cHJlc3Npb24pKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKCkge1xuICAgIHZhciBzcmMsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgLy8gY292ZXJzOlxuICAgIC8vIGV4cG9ydCAqIGZyb20gXCJmb29cIjtcbiAgICBleHBlY3RLZXl3b3JkKFwiZXhwb3J0XCIpO1xuICAgIGV4cGVjdChcIipcIik7XG4gICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiZnJvbVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBsb29rYWhlYWQudmFsdWUgP1xuICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpO1xuICAgIH1cbiAgICBsZXgoKTtcbiAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydEFsbERlY2xhcmF0aW9uKHNyYykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pO1xuICAgIH1cbiAgICB2YXIgZGVjbGFyYXRpb25UeXBlID0gbG9va2FoZWFkMigpLnZhbHVlO1xuICAgIGlmIChkZWNsYXJhdGlvblR5cGUgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbigpO1xuICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb25UeXBlID09PSBcIipcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VFeHBvcnRBbGxEZWNsYXJhdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkge1xuICAgIC8vIGltcG9ydCB7PGZvbyBhcyBiYXI+fSAuLi47XG4gICAgdmFyIGxvY2FsLCBpbXBvcnRlZCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpbXBvcnRlZCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiYXNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnRTcGVjaWZpZXIobG9jYWwsIGltcG9ydGVkKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFtZWRJbXBvcnRzKCkge1xuICAgIHZhciBzcGVjaWZpZXJzID0gW107XG4gICAgLy8ge2ZvbywgYmFyIGFzIGJhc31cbiAgICBleHBlY3QoXCJ7XCIpO1xuICAgIGlmICghbWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUltcG9ydFNwZWNpZmllcigpKTtcbiAgICAgICAgfSB3aGlsZSAobWF0Y2goXCIsXCIpICYmIGxleCgpKTtcbiAgICB9XG4gICAgZXhwZWN0KFwifVwiKTtcbiAgICByZXR1cm4gc3BlY2lmaWVycztcbn1cblxuZnVuY3Rpb24gcGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkge1xuICAgIC8vIGltcG9ydCA8Zm9vPiAuLi47XG4gICAgdmFyIGxvY2FsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGxvY2FsID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWZhdWx0U3BlY2lmaWVyKGxvY2FsKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkge1xuICAgIC8vIGltcG9ydCA8KiBhcyBmb28+IC4uLjtcbiAgICB2YXIgbG9jYWwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwZWN0KFwiKlwiKTtcbiAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2UpO1xuICAgIH1cbiAgICBsZXgoKTtcbiAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKGxvY2FsKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHNwZWNpZmllcnMsIHNyYywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAoc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTtcbiAgICB9XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiaW1wb3J0XCIpO1xuICAgIHNwZWNpZmllcnMgPSBbXTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGltcG9ydCBcImZvb1wiO1xuICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmllcnMsIHNyYykpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKSAmJiBpc0lkZW50aWZpZXJOYW1lKGxvb2thaGVhZCkpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgZm9vXG4gICAgICAgIC8vIGltcG9ydCBmb28sIC4uLlxuICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkpO1xuICAgICAgICBpZiAobWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobWF0Y2goXCIqXCIpKSB7XG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gaW1wb3J0IGZvbywgKiBhcyBmb29cbiAgICAgICAgLy8gaW1wb3J0ICogYXMgZm9vXG4gICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGltcG9ydCBmb28sIHtiYXJ9XG4gICAgICAgIC8vIGltcG9ydCB7YmFyfVxuICAgICAgICBzcGVjaWZpZXJzID0gc3BlY2lmaWVycy5jb25jYXQocGFyc2VOYW1lZEltcG9ydHMoKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiZnJvbVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBsb29rYWhlYWQudmFsdWUgP1xuICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpO1xuICAgIH1cbiAgICBsZXgoKTtcbiAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpO1xuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmllcnMsIHNyYykpO1xufVxuXG4vLyAxNCBGdW5jdGlvbnMgYW5kIGNsYXNzZXNcblxuLy8gMTQuMSBGdW5jdGlvbnMgaXMgZGVmaW5lZCBhYm92ZSAoMTMgaW4gRVM1KVxuLy8gMTQuMiBBcnJvdyBGdW5jdGlvbnMgRGVmaW5pdGlvbnMgaXMgZGVmaW5lZCBpbiAoNy4zIGFzc2lnbm1lbnRzKVxuXG4vLyAxNC4zIE1ldGhvZCBEZWZpbml0aW9uc1xuLy8gMTQuMy43XG5cbi8vIDE0LjUgQ2xhc3MgRGVmaW5pdGlvbnNcblxuZnVuY3Rpb24gcGFyc2VDbGFzc0JvZHkoKSB7XG4gICAgdmFyIGhhc0NvbnN0cnVjdG9yID0gZmFsc2UsIGdlbmVyYXRvciA9IGZhbHNlLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycyxcbiAgICAgICAgdG9rZW4sIGlzU3RhdGljLCBib2R5ID0gW10sIG1ldGhvZCwgY29tcHV0ZWQsIGtleTtcblxuICAgIHZhciBleGlzdGluZ1Byb3BzID0ge30sXG4gICAgICAgIHRvcE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBtYXJrZXI7XG5cbiAgICBleGlzdGluZ1Byb3BzLnN0YXRpYyA9IG5ldyBTdHJpbmdNYXAoKTtcbiAgICBleGlzdGluZ1Byb3BzLnByb3RvdHlwZSA9IG5ldyBTdHJpbmdNYXAoKTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwifVwiKSkge1xuXG4gICAgICAgIC8vIGV4dHJhIHNlbWljb2xvbnMgYXJlIGZpbmVcbiAgICAgICAgaWYgKG1hdGNoKFwiO1wiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICBpc1N0YXRpYyA9IGZhbHNlO1xuICAgICAgICBnZW5lcmF0b3IgPSBtYXRjaChcIipcIik7XG4gICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgICAgICBpZiAoZ2VuZXJhdG9yKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93R2VuZXJhdG9ycykge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgLy8gc3RhdGljIGdlbmVyYXRvciBtZXRob2RzXG4gICAgICAgIGlmIChrZXkubmFtZSA9PT0gXCJzdGF0aWNcIiAmJiBtYXRjaChcIipcIikpIHtcbiAgICAgICAgICAgIGlmICghYWxsb3dHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZW5lcmF0b3IgPSB0cnVlO1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5Lm5hbWUgPT09IFwic3RhdGljXCIgJiYgbG9va2FoZWFkUHJvcGVydHlOYW1lKCkpIHtcbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICAgICAgaXNTdGF0aWMgPSB0cnVlO1xuICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaChcIltcIik7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2VuZXJhdG9yKSB7XG4gICAgICAgICAgICBtZXRob2QgPSBwYXJzZUdlbmVyYXRvclByb3BlcnR5KGtleSwgbWFya2VyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1ldGhvZCA9IHRyeVBhcnNlTWV0aG9kRGVmaW5pdGlvbih0b2tlbiwga2V5LCBjb21wdXRlZCwgbWFya2VyLCBnZW5lcmF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICAgICAgbWV0aG9kLnN0YXRpYyA9IGlzU3RhdGljO1xuICAgICAgICAgICAgaWYgKG1ldGhvZC5raW5kID09PSBcImluaXRcIikge1xuICAgICAgICAgICAgICAgIG1ldGhvZC5raW5kID0gXCJtZXRob2RcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc1N0YXRpYykge1xuXG4gICAgICAgICAgICAgICAgaWYgKCFtZXRob2QuY29tcHV0ZWQgJiYgKG1ldGhvZC5rZXkubmFtZSB8fCAobWV0aG9kLmtleS52YWx1ZSAmJiBtZXRob2Qua2V5LnZhbHVlLnRvU3RyaW5nKCkpKSA9PT0gXCJjb25zdHJ1Y3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCAhPT0gXCJtZXRob2RcIiB8fCAhbWV0aG9kLm1ldGhvZCB8fCBtZXRob2QudmFsdWUuZ2VuZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4sIE1lc3NhZ2VzLkNvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4sIE1lc3NhZ2VzLkR1cGxpY2F0ZUNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9IFwiY29uc3RydWN0b3JcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIChtZXRob2Qua2V5Lm5hbWUgfHwgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSA9PT0gXCJwcm90b3R5cGVcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4sIE1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWV0aG9kLnR5cGUgPSBhc3ROb2RlVHlwZXMuTWV0aG9kRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRob2QubWV0aG9kO1xuICAgICAgICAgICAgZGVsZXRlIG1ldGhvZC5zaG9ydGhhbmQ7XG4gICAgICAgICAgICBib2R5LnB1c2gobWV0aG9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV4KCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KHRvcE1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NCb2R5KGJvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0V4cHJlc3Npb24oKSB7XG4gICAgdmFyIGlkID0gbnVsbCwgc3VwZXJDbGFzcyA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdCwgY2xhc3NCb2R5O1xuXG4gICAgLy8gY2xhc3NlcyBydW4gaW4gc3RyaWN0IG1vZGVcbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNsYXNzXCIpO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZXh0ZW5kc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgc3VwZXJDbGFzcyA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpO1xuICAgIH1cblxuICAgIGNsYXNzQm9keSA9IHBhcnNlQ2xhc3NCb2R5KCk7XG4gICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVDbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNsYXNzRGVjbGFyYXRpb24oaWRlbnRpZmllcklzT3B0aW9uYWwpIHtcbiAgICB2YXIgaWQgPSBudWxsLCBzdXBlckNsYXNzID0gbnVsbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0LCBjbGFzc0JvZHk7XG5cbiAgICAvLyBjbGFzc2VzIHJ1biBpbiBzdHJpY3QgbW9kZVxuICAgIHN0cmljdCA9IHRydWU7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiY2xhc3NcIik7XG5cbiAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZXh0ZW5kc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgc3VwZXJDbGFzcyA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpO1xuICAgIH1cblxuICAgIGNsYXNzQm9keSA9IHBhcnNlQ2xhc3NCb2R5KCk7XG4gICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVDbGFzc0RlY2xhcmF0aW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpKTtcbn1cblxuLy8gMTUgUHJvZ3JhbVxuXG5mdW5jdGlvbiBwYXJzZVNvdXJjZUVsZW1lbnQoKSB7XG5cbiAgICB2YXIgYWxsb3dDbGFzc2VzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmNsYXNzZXMsXG4gICAgICAgIGFsbG93TW9kdWxlcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5tb2R1bGVzLFxuICAgICAgICBhbGxvd0Jsb2NrQmluZGluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMuYmxvY2tCaW5kaW5ncztcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcImV4cG9ydFwiOlxuICAgICAgICAgICAgICAgIGlmICghYWxsb3dNb2R1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvcnRcIjpcbiAgICAgICAgICAgICAgICBpZiAoIWFsbG93TW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dDbGFzc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNsYXNzRGVjbGFyYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY29uc3RcIjpcbiAgICAgICAgICAgIGNhc2UgXCJsZXRcIjpcbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dCbG9ja0JpbmRpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24obG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50cygpIHtcbiAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7XG4gICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkxpdGVyYWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdICsgMSwgdG9rZW4ucmFuZ2VbMV0gLSAxKTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc3RyaWN0XCIpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvZ3JhbSgpIHtcbiAgICB2YXIgYm9keSxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBpc01vZHVsZSA9ICEhZXh0cmEuZWNtYUZlYXR1cmVzLm1vZHVsZXM7XG5cbiAgICBza2lwQ29tbWVudCgpO1xuICAgIHBlZWsoKTtcbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICBzdHJpY3QgPSBpc01vZHVsZTtcblxuICAgIGJvZHkgPSBwYXJzZVNvdXJjZUVsZW1lbnRzKCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvZ3JhbShib2R5LCBpc01vZHVsZSA/IFwibW9kdWxlXCIgOiBcInNjcmlwdFwiKSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlclRva2VuTG9jYXRpb24oKSB7XG4gICAgdmFyIGksIGVudHJ5LCB0b2tlbiwgdG9rZW5zID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEudG9rZW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGVudHJ5ID0gZXh0cmEudG9rZW5zW2ldO1xuICAgICAgICB0b2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGVudHJ5LnJlZ2V4KSB7XG4gICAgICAgICAgICB0b2tlbi5yZWdleCA9IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBlbnRyeS5yZWdleC5wYXR0ZXJuLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBlbnRyeS5yZWdleC5mbGFnc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgICAgIHRva2VuLnJhbmdlID0gZW50cnkucmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICAgICAgdG9rZW4ubG9jID0gZW50cnkubG9jO1xuICAgICAgICB9XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICB9XG5cbiAgICBleHRyYS50b2tlbnMgPSB0b2tlbnM7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUb2tlbml6ZXJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHRva2VuaXplKGNvZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgdG9TdHJpbmcsXG4gICAgICAgIHRva2VucztcblxuICAgIHRvU3RyaW5nID0gU3RyaW5nO1xuICAgIGlmICh0eXBlb2YgY29kZSAhPT0gXCJzdHJpbmdcIiAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTtcbiAgICB9XG5cbiAgICBzb3VyY2UgPSBjb2RlO1xuICAgIGluZGV4ID0gMDtcbiAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwO1xuICAgIGxpbmVTdGFydCA9IDA7XG4gICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICBsb29rYWhlYWQgPSBudWxsO1xuICAgIHN0YXRlID0ge1xuICAgICAgICBhbGxvd0luOiB0cnVlLFxuICAgICAgICBsYWJlbFNldDoge30sXG4gICAgICAgIHBhcmVudGhlc2lzQ291bnQ6IDAsXG4gICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSxcbiAgICAgICAgaW5JdGVyYXRpb246IGZhbHNlLFxuICAgICAgICBpblN3aXRjaDogZmFsc2UsXG4gICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xLFxuICAgICAgICB5aWVsZEFsbG93ZWQ6IGZhbHNlLFxuICAgICAgICBjdXJseVN0YWNrOiBbXSxcbiAgICAgICAgY3VybHlMYXN0SW5kZXg6IDAsXG4gICAgICAgIGluSlNYU3ByZWFkQXR0cmlidXRlOiBmYWxzZSxcbiAgICAgICAgaW5KU1hDaGlsZDogZmFsc2UsXG4gICAgICAgIGluSlNYVGFnOiBmYWxzZVxuICAgIH07XG5cbiAgICBleHRyYSA9IHtcbiAgICAgICAgZWNtYUZlYXR1cmVzOiBkZWZhdWx0RmVhdHVyZXNcbiAgICB9O1xuXG4gICAgLy8gT3B0aW9ucyBtYXRjaGluZy5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2VucyBoZXJlLlxuICAgIG9wdGlvbnMudG9rZW5zID0gdHJ1ZTtcbiAgICBleHRyYS50b2tlbnMgPSBbXTtcbiAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmaWVsZHMgYXJlIG5lY2Vzc2FyeSB0byBjb21wdXRlIHRoZSBSZWdleCB0b2tlbnMuXG4gICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSAtMTtcbiAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IC0xO1xuXG4gICAgZXh0cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLnJhbmdlO1xuICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLmxvYztcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLnRvbGVyYW50KSB7XG4gICAgICAgIGV4dHJhLmVycm9ycyA9IFtdO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHBhcnNpbmcgZmxhZ3NcbiAgICBpZiAob3B0aW9ucy5lY21hRmVhdHVyZXMgJiYgdHlwZW9mIG9wdGlvbnMuZWNtYUZlYXR1cmVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlcyA9IG9wdGlvbnMuZWNtYUZlYXR1cmVzO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHBlZWsoKTtcbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHJldHVybiBleHRyYS50b2tlbnM7XG4gICAgICAgIH1cblxuICAgICAgICBsZXgoKTtcbiAgICAgICAgd2hpbGUgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2gobGV4RXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGJyZWFrIG9uIHRoZSBmaXJzdCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpbmZpbml0ZSBsb29wcy5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbGV4RXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpO1xuICAgICAgICB0b2tlbnMgPSBleHRyYS50b2tlbnM7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdG9rZW5zLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5lcnJvcnMgPSBleHRyYS5lcnJvcnM7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXh0cmEgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2Vucztcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcnNlclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gcGFyc2UoY29kZSwgb3B0aW9ucykge1xuICAgIHZhciBwcm9ncmFtLCB0b1N0cmluZztcblxuICAgIHRvU3RyaW5nID0gU3RyaW5nO1xuICAgIGlmICh0eXBlb2YgY29kZSAhPT0gXCJzdHJpbmdcIiAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTtcbiAgICB9XG5cbiAgICBzb3VyY2UgPSBjb2RlO1xuICAgIGluZGV4ID0gMDtcbiAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwO1xuICAgIGxpbmVTdGFydCA9IDA7XG4gICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICBsb29rYWhlYWQgPSBudWxsO1xuICAgIHN0YXRlID0ge1xuICAgICAgICBhbGxvd0luOiB0cnVlLFxuICAgICAgICBsYWJlbFNldDogbmV3IFN0cmluZ01hcCgpLFxuICAgICAgICBwYXJlbnRoZXNpc0NvdW50OiAwLFxuICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsXG4gICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLFxuICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMSxcbiAgICAgICAgeWllbGRBbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgY3VybHlTdGFjazogW10sXG4gICAgICAgIGN1cmx5TGFzdEluZGV4OiAwLFxuICAgICAgICBpbkpTWFNwcmVhZEF0dHJpYnV0ZTogZmFsc2UsXG4gICAgICAgIGluSlNYQ2hpbGQ6IGZhbHNlLFxuICAgICAgICBpbkpTWFRhZzogZmFsc2VcbiAgICB9O1xuXG4gICAgZXh0cmEgPSB7XG4gICAgICAgIGVjbWFGZWF0dXJlczogT2JqZWN0LmNyZWF0ZShkZWZhdWx0RmVhdHVyZXMpXG4gICAgfTtcblxuICAgIC8vIGZvciB0ZW1wbGF0ZSBzdHJpbmdzXG4gICAgc3RhdGUuY3VybHlTdGFjayA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5yYW5nZTtcbiAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gXCJib29sZWFuXCIpICYmIG9wdGlvbnMubG9jO1xuICAgICAgICBleHRyYS5hdHRhY2hDb21tZW50ID0gKHR5cGVvZiBvcHRpb25zLmF0dGFjaENvbW1lbnQgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLmF0dGFjaENvbW1lbnQ7XG5cbiAgICAgICAgaWYgKGV4dHJhLmxvYyAmJiBvcHRpb25zLnNvdXJjZSAhPT0gbnVsbCAmJiBvcHRpb25zLnNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleHRyYS5zb3VyY2UgPSB0b1N0cmluZyhvcHRpb25zLnNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9rZW5zID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLnRva2Vucykge1xuICAgICAgICAgICAgZXh0cmEudG9rZW5zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09IFwiYm9vbGVhblwiICYmIG9wdGlvbnMuY29tbWVudCkge1xuICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09IFwiYm9vbGVhblwiICYmIG9wdGlvbnMudG9sZXJhbnQpIHtcbiAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7XG4gICAgICAgICAgICBleHRyYS5yYW5nZSA9IHRydWU7XG4gICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgY29tbWVudEF0dGFjaG1lbnQucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCIpIHtcbiAgICAgICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlcyA9IHtcbiAgICAgICAgICAgICAgICBhcnJvd0Z1bmN0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBibG9ja0JpbmRpbmdzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZ2V4VUZsYWc6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVnZXhZRmxhZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVN0cmluZ3M6IHRydWUsXG4gICAgICAgICAgICAgICAgYmluYXJ5TGl0ZXJhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgb2N0YWxMaXRlcmFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1bmljb2RlQ29kZVBvaW50RXNjYXBlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdXBlckluRnVuY3Rpb25zOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRQYXJhbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVzdFBhcmFtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3JPZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsQ29tcHV0ZWRQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9iamVjdExpdGVyYWxTaG9ydGhhbmRNZXRob2RzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9iamVjdExpdGVyYWxTaG9ydGhhbmRQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9iamVjdExpdGVyYWxEdXBsaWNhdGVQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRvcnM6IHRydWUsXG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3R1cmluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjbGFzc2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1vZHVsZXM6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHBseSBwYXJzaW5nIGZsYWdzIGFmdGVyIHNvdXJjZVR5cGUgdG8gYWxsb3cgb3ZlcnJpZGluZ1xuICAgICAgICBpZiAob3B0aW9ucy5lY21hRmVhdHVyZXMgJiYgdHlwZW9mIG9wdGlvbnMuZWNtYUZlYXR1cmVzID09PSBcIm9iamVjdFwiKSB7XG5cbiAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBtb2R1bGUsIGF1Z21lbnQgdGhlIGVjbWFGZWF0dXJlc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gXCJtb2R1bGVcIikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMuZWNtYUZlYXR1cmVzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5lY21hRmVhdHVyZXNba2V5XSA9IG9wdGlvbnMuZWNtYUZlYXR1cmVzW2tleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlcyA9IG9wdGlvbnMuZWNtYUZlYXR1cmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBwcm9ncmFtID0gcGFyc2VQcm9ncmFtKCk7XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHByb2dyYW0uY29tbWVudHMgPSBleHRyYS5jb21tZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpO1xuICAgICAgICAgICAgcHJvZ3JhbS50b2tlbnMgPSBleHRyYS50b2tlbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZXJyb3JzID0gZXh0cmEuZXJyb3JzO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4dHJhID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydHMudmVyc2lvbiA9IHJlcXVpcmUoXCIuL3BhY2thZ2UuanNvblwiKS52ZXJzaW9uO1xuXG5leHBvcnRzLnRva2VuaXplID0gdG9rZW5pemU7XG5cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcblxuLy8gRGVlcCBjb3B5LlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmV4cG9ydHMuU3ludGF4ID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmFtZSwgdHlwZXMgPSB7fTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgICBmb3IgKG5hbWUgaW4gYXN0Tm9kZVR5cGVzKSB7XG4gICAgICAgIGlmIChhc3ROb2RlVHlwZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIHR5cGVzW25hbWVdID0gYXN0Tm9kZVR5cGVzW25hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuZnJlZXplID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZSh0eXBlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufSgpKTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBBIGZhY3RvcnkgZm9yIGNyZWF0aW5nIEFTVCBub2Rlc1xuICogQGF1dGhvciBGcmVkIEsuIFNjaG90dFxuICogQGNvcHlyaWdodCAyMDE0IEZyZWQgSy4gU2Nob3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGFzdE5vZGVUeXBlcyA9IHJlcXVpcmUoXCIuL2FzdC1ub2RlLXR5cGVzXCIpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBcnJheSBFeHByZXNzaW9uIEFTVE5vZGUgb3V0IG9mIGFuIGFycmF5IG9mIGVsZW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IGVsZW1lbnRzIEFuIGFycmF5IG9mIEFTVE5vZGUgZWxlbWVudHNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBhcnJheSBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbihlbGVtZW50cykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbixcbiAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50c1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQXJyb3cgRnVuY3Rpb24gRXhwcmVzc2lvbiBBU1ROb2RlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJhbXMgVGhlIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgZnVuY3Rpb24gYm9keVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwcmVzc2lvbiBUcnVlIGlmIHRoZSBhcnJvdyBmdW5jdGlvbiBpcyBjcmVhdGVkIHZpYSBhbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgQWx3YXlzIGZhbHNlIGZvciBkZWNsYXJhdGlvbnMsIGJ1dCBrZXB0IGhlcmUgdG8gYmUgaW4gc3luYyB3aXRoXG4gICAgICogICAgICBGdW5jdGlvbkV4cHJlc3Npb24gb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChwYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgZ2VuZXJhdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gYXNzaWdubWVudCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBvcGVyYXRvciBUaGUgYXNzaWdubWVudCBvcGVyYXRvclxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGFzc2lnbm1lbnQgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uOiBmdW5jdGlvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lvbixcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gYXNzaWdubWVudCBwYXR0ZXJuIChkZWZhdWx0IHBhcmFtZXRlcnMpXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYXNzaWdubWVudCBwYXR0ZXJuXG4gICAgICovXG4gICAgY3JlYXRlQXNzaWdubWVudFBhdHRlcm46IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm4sXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgYmluYXJ5IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9wZXJhdG9yIFRoZSBhc3NpZ25tZW50IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYmluYXJ5IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVCaW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHtcbiAgICAgICAgdmFyIHR5cGUgPSAob3BlcmF0b3IgPT09IFwifHxcIiB8fCBvcGVyYXRvciA9PT0gXCImJlwiKSA/IGFzdE5vZGVUeXBlcy5Mb2dpY2FsRXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgICAgICAgIGFzdE5vZGVUeXBlcy5CaW5hcnlFeHByZXNzaW9uO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBibG9jayBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGJsb2NrIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYmxvY2sgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5CbG9ja1N0YXRlbWVudCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBicmVhayBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxhYmVsIFRoZSBicmVhayBzdGF0ZW1lbnQgbGFiZWxcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGJyZWFrIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkJyZWFrU3RhdGVtZW50LFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY2FsbCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjYWxsZWUgVGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBhcmdzIEFuIGFycmF5IG9mIEFTVE5vZGVzIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBjYWxsIGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24oY2FsbGVlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2FsbEV4cHJlc3Npb24sXG4gICAgICAgICAgICBjYWxsZWU6IGNhbGxlZSxcbiAgICAgICAgICAgIFwiYXJndW1lbnRzXCI6IGFyZ3NcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjYXRjaCBjbGF1c2UvYmxvY2tcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtIEFueSBjYXRjaCBjbGF1c2UgZXhlcHRpb24vY29uZGl0aW9uYWwgcGFyYW1ldGVyIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBjYXRjaCBibG9jayBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgY2F0Y2ggY2xhdXNlXG4gICAgICovXG4gICAgY3JlYXRlQ2F0Y2hDbGF1c2U6IGZ1bmN0aW9uKHBhcmFtLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2F0Y2hDbGF1c2UsXG4gICAgICAgICAgICBwYXJhbTogcGFyYW0sXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGNsYXNzIGJvZHkuXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBub2RlIHJlcHJlc2VudGluZyB0aGUgYm9keSBvZiB0aGUgY2xhc3MuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBib2R5LlxuICAgICAqL1xuICAgIGNyZWF0ZUNsYXNzQm9keTogZnVuY3Rpb24oYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkNsYXNzQm9keSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlQ2xhc3NFeHByZXNzaW9uOiBmdW5jdGlvbihpZCwgc3VwZXJDbGFzcywgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkNsYXNzRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHN1cGVyQ2xhc3M6IHN1cGVyQ2xhc3MsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUNsYXNzRGVjbGFyYXRpb246IGZ1bmN0aW9uKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2xhc3NEZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHN1cGVyQ2xhc3M6IHN1cGVyQ2xhc3MsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZU1ldGhvZERlZmluaXRpb246IGZ1bmN0aW9uKHByb3BlcnR5VHlwZSwga2luZCwga2V5LCB2YWx1ZSwgY29tcHV0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5NZXRob2REZWZpbml0aW9uLFxuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICAgICAgXCJzdGF0aWNcIjogcHJvcGVydHlUeXBlID09PSBcInN0YXRpY1wiLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGNvbXB1dGVkXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGVzdCBUaGUgY29uZGl0aW9uYWwgdG8gZXZhbHVhdGVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNvbnNlcXVlbnQgVGhlIGNvZGUgdG8gYmUgcnVuIGlmIHRoZSB0ZXN0IHJldHVybnMgdHJ1ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYWx0ZXJuYXRlIFRoZSBjb2RlIHRvIGJlIHJ1biBpZiB0aGUgdGVzdCByZXR1cm5zIGZhbHNlXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgY29uZGl0aW9uYWwgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24odGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQsXG4gICAgICAgICAgICBhbHRlcm5hdGU6IGFsdGVybmF0ZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbnRpbnVlIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7P0FTVE5vZGV9IGxhYmVsIFRoZSBvcHRpb25hbCBjb250aW51ZSBsYWJlbCAobnVsbCBpZiBub3Qgc2V0KVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgY29udGludWUgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ29udGludWVTdGF0ZW1lbnQsXG4gICAgICAgICAgICBsYWJlbDogbGFiZWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBkZWJ1Z2dlciBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGRlYnVnZ2VyIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5EZWJ1Z2dlclN0YXRlbWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBlbXB0eSBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gZW1wdHkgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRW1wdHlTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkVtcHR5U3RhdGVtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cHJlc3Npb25TdGF0ZW1lbnQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgd2hpbGUgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSB3aGlsZSBjb25kaXRpb25hbFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgd2hpbGUgbG9vcCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgd2hpbGUgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHRlc3QsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5XaGlsZVN0YXRlbWVudCxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZG8uLndoaWxlIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGVzdCBUaGUgZG8uLndoaWxlIGNvbmRpdGlvbmFsXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBkby4ud2hpbGUgbG9vcCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZG8uLndoaWxlIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHRlc3QsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Eb1doaWxlU3RhdGVtZW50LFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3RcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmb3Igc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0IFRoZSBpbml0aWFsaXphdGlvbiBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBjb25kaXRpb25hbCB0ZXN0IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHVwZGF0ZSBUaGUgdXBkYXRlIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZm9yIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUZvclN0YXRlbWVudDogZnVuY3Rpb24oaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRm9yU3RhdGVtZW50LFxuICAgICAgICAgICAgaW5pdDogaW5pdCxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmb3IuLmluIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgbGVmdC1zaWRlIHZhcmlhYmxlIGZvciB0aGUgcHJvcGVydHkgbmFtZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0LXNpZGUgb2JqZWN0XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGZvci4uaW4gc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRm9ySW5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRm9ySW5TdGF0ZW1lbnQsXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIGVhY2g6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZm9yLi5vZiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQtc2lkZSB2YXJpYWJsZSBmb3IgdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgcmlnaHQtc2lkZSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZm9yLi5vZiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVGb3JPZlN0YXRlbWVudDogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Gb3JPZlN0YXRlbWVudCxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZnVuY3Rpb24gZGVjbGFyYXRpb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGlkIFRoZSBmdW5jdGlvbiBuYW1lXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJhbXMgVGhlIGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgZnVuY3Rpb24gYm9keVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZ2VuZXJhdG9yIFRydWUgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yLCBmYWxzZSBpZiBub3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBleHByZXNzaW9uIFRydWUgaWYgdGhlIGZ1bmN0aW9uIGlzIGNyZWF0ZWQgdmlhIGFuIGV4cHJlc3Npb24uXG4gICAgICogICAgICBBbHdheXMgZmFsc2UgZm9yIGRlY2xhcmF0aW9ucywgYnV0IGtlcHQgaGVyZSB0byBiZSBpbiBzeW5jIHdpdGhcbiAgICAgKiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXG4gICAgICovXG4gICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvciwgZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkZ1bmN0aW9uRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3I6ICEhZ2VuZXJhdG9yLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogISFleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgZnVuY3Rpb24gZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtcyBUaGUgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBmdW5jdGlvbiBib2R5XG4gICAgICogQHBhcmFtIHtib29sZWFufSBnZW5lcmF0b3IgVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IsIGZhbHNlIGlmIG5vdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cHJlc3Npb24gVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgY3JlYXRlZCB2aWEgYW4gZXhwcmVzc2lvbi5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiBkZWNsYXJhdGlvblxuICAgICAqL1xuICAgIGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvciwgZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkZ1bmN0aW9uRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIGdlbmVyYXRvcjogISFnZW5lcmF0b3IsXG4gICAgICAgICAgICBleHByZXNzaW9uOiAhIWV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gaWRlbnRpZmllclxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbmFtZSBUaGUgaWRlbnRpZmllciBuYW1lXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGFuIGlkZW50aWZpZXJcbiAgICAgKi9cbiAgICBjcmVhdGVJZGVudGlmaWVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcixcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gaWYgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBpZiBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjb25zZXF1ZW50IFRoZSBjb25zZXF1ZW50IGlmIHN0YXRlbWVudCB0byBydW5cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFsdGVybmF0ZSB0aGUgXCJlbHNlXCIgYWx0ZXJuYXRlIHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBpZiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVJZlN0YXRlbWVudDogZnVuY3Rpb24odGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSWZTdGF0ZW1lbnQsXG4gICAgICAgICAgICB0ZXN0OiB0ZXN0LFxuICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCxcbiAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJuYXRlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgbGFiZWxlZCBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxhYmVsIFRoZSBzdGF0ZW1lbnQgbGFiZWxcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGxhYmVsZWQgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBsYWJlbGVkIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxhYmVsLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTGFiZWxlZFN0YXRlbWVudCxcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgbGl0ZXJhbCBmcm9tIHRoZSBzb3VyY2UgY29kZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdG9rZW4gVGhlIEFTVE5vZGUgdG9rZW5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgY29kZSB0byBnZXQgdGhlIGxpdGVyYWwgZnJvbVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgbmV3IGxpdGVyYWxcbiAgICAgKi9cbiAgICBjcmVhdGVMaXRlcmFsRnJvbVNvdXJjZTogZnVuY3Rpb24odG9rZW4sIHNvdXJjZSkge1xuICAgICAgICB2YXIgbm9kZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5MaXRlcmFsLFxuICAgICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlLFxuICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2UodG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdKVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaGF2ZSByZWdleCBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICh0b2tlbi5yZWdleCkge1xuICAgICAgICAgICAgbm9kZS5yZWdleCA9IHRva2VuLnJlZ2V4O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHRlbXBsYXRlIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgRGF0YSBvbiB0aGUgZWxlbWVudCB2YWx1ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZS5yYXcgVGhlIHJhdyB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUuY29va2VkIFRoZSBwcm9jZXNzZWQgdGVtcGxhdGUgc3RyaW5nXG4gICAgICogQHBhcmFtIHtib29sZWFufSB0YWlsIFRydWUgaWYgdGhpcyBpcyB0aGUgZmluYWwgZWxlbWVudCBpbiBhIHRlbXBsYXRlIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgdGVtcGxhdGUgc3RyaW5nIGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVUZW1wbGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKHZhbHVlLCB0YWlsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVGVtcGxhdGVFbGVtZW50LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdGFpbDogdGFpbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSB0ZW1wbGF0ZSBsaXRlcmFsXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IHF1YXNpcyBBbiBhcnJheSBvZiB0aGUgdGVtcGxhdGUgc3RyaW5nIGVsZW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IGV4cHJlc3Npb25zIEFuIGFycmF5IG9mIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZXhwcmVzc2lvbnNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIHRlbXBsYXRlIHN0cmluZ1xuICAgICAqL1xuICAgIGNyZWF0ZVRlbXBsYXRlTGl0ZXJhbDogZnVuY3Rpb24ocXVhc2lzLCBleHByZXNzaW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRlbXBsYXRlTGl0ZXJhbCxcbiAgICAgICAgICAgIHF1YXNpczogcXVhc2lzLFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3ByZWFkIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSBhcnJheSBiZWluZyBzcHJlYWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBzcHJlYWQgZWxlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVNwcmVhZEVsZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3ByZWFkRWxlbWVudCxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSB0YWdnZWQgdGVtcGxhdGUgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGFnIFRoZSB0YWcgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcXVhc2kgQSBUZW1wbGF0ZUxpdGVyYWwgQVNUTm9kZSByZXByZXNlbnRpbmdcbiAgICAgKiB0aGUgdGVtcGxhdGUgc3RyaW5nIGl0c2VsZi5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIHRhZ2dlZCB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIGNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogZnVuY3Rpb24odGFnLCBxdWFzaSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHRhZzogdGFnLFxuICAgICAgICAgICAgcXVhc2k6IHF1YXNpXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgbWVtYmVyIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYWNjZXNzb3IgVGhlIG1lbWJlciBhY2Nlc3MgbWV0aG9kIChicmFja2V0IG9yIHBlcmlvZClcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9iamVjdCBUaGUgb2JqZWN0IGJlaW5nIHJlZmVyZW5jZWRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IFRoZSBvYmplY3QtcHJvcGVydHkgYmVpbmcgcmVmZXJlbmNlZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIG1lbWJlciBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24oYWNjZXNzb3IsIG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5NZW1iZXJFeHByZXNzaW9uLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGFjY2Vzc29yID09PSBcIltcIixcbiAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgbmV3IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNhbGxlZSBUaGUgY29uc3RydWN0b3IgZm9yIHRoZSBuZXcgb2JqZWN0IHR5cGVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3MgVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgbmV3IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVOZXdFeHByZXNzaW9uOiBmdW5jdGlvbihjYWxsZWUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uLFxuICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsXG4gICAgICAgICAgICBcImFyZ3VtZW50c1wiOiBhcmdzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgbmV3IG9iamVjdCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IHByb3BlcnRpZXMgQW4gYXJyYXkgb2YgQVNUTm9kZXMgdGhhdCByZXByZXNlbnQgYWxsIG9iamVjdFxuICAgICAqICAgICAgcHJvcGVydGllcyBhbmQgYXNzb2NpYXRlZCB2YWx1ZXNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBuZXcgb2JqZWN0IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBwb3N0Zml4IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgVGhlIHBvc3RmaXggb3BlcmF0b3IgKFwiKytcIiwgXCItLVwiLCBldGMuKVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIG9wZXJhdG9yIGFyZ3VtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgcG9zdGZpeCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlUG9zdGZpeEV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlVwZGF0ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsXG4gICAgICAgICAgICBwcmVmaXg6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVudGlyZSBwcm9ncmFtXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBwcm9ncmFtIGJvZHlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlVHlwZSBFaXRoZXIgXCJtb2R1bGVcIiBvciBcInNjcmlwdFwiLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBlbnRpcmUgcHJvZ3JhbVxuICAgICAqL1xuICAgIGNyZWF0ZVByb2dyYW06IGZ1bmN0aW9uKGJvZHksIHNvdXJjZVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Qcm9ncmFtLFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIHNvdXJjZVR5cGU6IHNvdXJjZVR5cGVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmQgVGhlIHR5cGUgb2YgcHJvcGVydHkgcmVwcmVzZW50ZWQgKFwiZ2V0XCIsIFwic2V0XCIsIGV0Yy4pXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBrZXkgVGhlIHByb3BlcnR5IGtleVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdmFsdWUgVGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWV0aG9kIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIGFsc28gYSBtZXRob2QgKHZhbHVlIGlzIGEgZnVuY3Rpb24pXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaG9ydGhhbmQgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgc2hvcnRoYW5kXG4gICAgICogQHBhcmFtIHtib29sZWFufSBjb21wdXRlZCBUcnVlIGlmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBoYXMgYmVlbiBjb21wdXRlZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICAgKi9cbiAgICBjcmVhdGVQcm9wZXJ0eTogZnVuY3Rpb24oa2luZCwga2V5LCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQsIGNvbXB1dGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUHJvcGVydHksXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIHNob3J0aGFuZDogc2hvcnRoYW5kLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGNvbXB1dGVkXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVzdCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgcmVzdCBhcmd1bWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHJlc3QgZWxlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVJlc3RFbGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5SZXN0RWxlbWVudCxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHJldHVybiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0gez9BU1ROb2RlfSBhcmd1bWVudCBUaGUgcmV0dXJuIGFyZ3VtZW50LCBudWxsIGlmIG5vIGFyZ3VtZW50IGlzIHByb3ZpZGVkXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgcmV0dXJuIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVJldHVyblN0YXRlbWVudDogZnVuY3Rpb24oYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5SZXR1cm5TdGF0ZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9uc1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBleHByZXNzaW9ucyBBbiBhcnJheSBjb250YWluaW5nIGVhY2ggZXhwcmVzc2lvbiwgaW4gb3JkZXJcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBzZXF1ZW5jZSBvZiBleHByZXNzaW9uc1xuICAgICAqL1xuICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24oZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5TZXF1ZW5jZUV4cHJlc3Npb24sXG4gICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lvbnNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2Ygc3VwZXJcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgc3VwZXJcbiAgICAgKi9cbiAgICBjcmVhdGVTdXBlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3VwZXJcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBzd2l0Y2ggY2FzZSBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGNhc2UgdmFsdWUgdG8gdGVzdCBhZ2FpbnN0IHRoZSBzd2l0Y2ggdmFsdWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNvbnNlcXVlbnQgVGhlIGNvbnNlcXVlbnQgY2FzZSBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBzd2l0Y2ggY2FzZVxuICAgICAqL1xuICAgIGNyZWF0ZVN3aXRjaENhc2U6IGZ1bmN0aW9uKHRlc3QsIGNvbnNlcXVlbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Td2l0Y2hDYXNlLFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBzd2l0Y2ggc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBkaXNjcmltaW5hbnQgQW4gZXhwcmVzc2lvbiB0byB0ZXN0IGFnYWluc3QgZWFjaCBjYXNlIHZhbHVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IGNhc2VzIEFuIGFycmF5IG9mIHN3aXRjaCBjYXNlIHN0YXRlbWVudHNcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBzd2l0Y2ggc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlU3dpdGNoU3RhdGVtZW50OiBmdW5jdGlvbihkaXNjcmltaW5hbnQsIGNhc2VzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3dpdGNoU3RhdGVtZW50LFxuICAgICAgICAgICAgZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsXG4gICAgICAgICAgICBjYXNlczogY2FzZXNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB0aGlzIHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHRoaXMgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlVGhpc0V4cHJlc3Npb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRoaXNFeHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhyb3cgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgYXJndW1lbnQgdG8gdGhyb3dcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB0aHJvdyBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24oYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UaHJvd1N0YXRlbWVudCxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHRyeSBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJsb2NrIFRoZSB0cnkgYmxvY2tcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGhhbmRsZXIgQSBjYXRjaCBoYW5kbGVyXG4gICAgICogQHBhcmFtIHs/QVNUTm9kZX0gZmluYWxpemVyIFRoZSBmaW5hbCBjb2RlIGJsb2NrIHRvIHJ1biBhZnRlciB0aGUgdHJ5L2NhdGNoIGhhcyBydW5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB0cnkgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlVHJ5U3RhdGVtZW50OiBmdW5jdGlvbihibG9jaywgaGFuZGxlciwgZmluYWxpemVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVHJ5U3RhdGVtZW50LFxuICAgICAgICAgICAgYmxvY2s6IGJsb2NrLFxuICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgIGZpbmFsaXplcjogZmluYWxpemVyXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdW5hcnkgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciBUaGUgdW5hcnkgb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSB1bmFyeSBvcGVyYW5kXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdW5hcnkgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZVVuYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24ob3BlcmF0b3IsIGFyZ3VtZW50KSB7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCIrK1wiIHx8IG9wZXJhdG9yID09PSBcIi0tXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlVwZGF0ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VbmFyeUV4cHJlc3Npb24sXG4gICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsXG4gICAgICAgICAgICBwcmVmaXg6IHRydWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB2YXJpYWJsZSBkZWNsYXJhdGlvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBkZWNsYXJhdGlvbnMgQW4gYXJyYXkgb2YgdmFyaWFibGUgZGVjbGFyYXRpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmQgVGhlIGtpbmQgb2YgdmFyaWFibGUgY3JlYXRlZCAoXCJ2YXJcIiwgXCJsZXRcIiwgZXRjLilcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB2YXJpYWJsZSBkZWNsYXJhdGlvblxuICAgICAqL1xuICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb246IGZ1bmN0aW9uKGRlY2xhcmF0aW9ucywga2luZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlZhcmlhYmxlRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnM6IGRlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgIGtpbmQ6IGtpbmRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB2YXJpYWJsZSBkZWNsYXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpZCBUaGUgdmFyaWFibGUgSURcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGluaXQgVGhlIHZhcmlhYmxlJ3MgaW5pdGlhbCB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHZhcmlhYmxlIGRlY2xhcmF0b3JcbiAgICAgKi9cbiAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0b3I6IGZ1bmN0aW9uKGlkLCBpbml0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVmFyaWFibGVEZWNsYXJhdG9yLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgaW5pdDogaW5pdFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHdpdGggc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBvYmplY3QgVGhlIHdpdGggc3RhdGVtZW50IG9iamVjdCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSB3aXRoIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgd2l0aCBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVXaXRoU3RhdGVtZW50OiBmdW5jdGlvbihvYmplY3QsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5XaXRoU3RhdGVtZW50LFxuICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZVlpZWxkRXhwcmVzc2lvbjogZnVuY3Rpb24oYXJndW1lbnQsIGRlbGVnYXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuWWllbGRFeHByZXNzaW9uLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50IHx8IG51bGwsXG4gICAgICAgICAgICBkZWxlZ2F0ZTogZGVsZWdhdGVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYQXR0cmlidXRlOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEF0dHJpYnV0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUgfHwgbnVsbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hTcHJlYWRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYU3ByZWFkQXR0cmlidXRlLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWElkZW50aWZpZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hJZGVudGlmaWVyLFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hOYW1lc3BhY2VkTmFtZTogZnVuY3Rpb24obmFtZXNwYWNlLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYTmFtZXNwYWNlZE5hbWUsXG4gICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE1lbWJlckV4cHJlc3Npb24sXG4gICAgICAgICAgICBvYmplY3Q6IG9iamVjdCxcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hFbGVtZW50OiBmdW5jdGlvbihvcGVuaW5nRWxlbWVudCwgY2xvc2luZ0VsZW1lbnQsIGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYRWxlbWVudCxcbiAgICAgICAgICAgIG9wZW5pbmdFbGVtZW50OiBvcGVuaW5nRWxlbWVudCxcbiAgICAgICAgICAgIGNsb3NpbmdFbGVtZW50OiBjbG9zaW5nRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hFbXB0eUV4cHJlc3Npb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEVtcHR5RXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hFeHByZXNzaW9uQ29udGFpbmVyOiBmdW5jdGlvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYT3BlbmluZ0VsZW1lbnQ6IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYT3BlbmluZ0VsZW1lbnQsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgc2VsZkNsb3Npbmc6IHNlbGZDbG9zaW5nLFxuICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hDbG9zaW5nRWxlbWVudDogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWENsb3NpbmdFbGVtZW50LFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uKGxvY2FsLCBleHBvcnRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydFNwZWNpZmllcixcbiAgICAgICAgICAgIGV4cG9ydGVkOiBleHBvcnRlZCB8fCBsb2NhbCxcbiAgICAgICAgICAgIGxvY2FsOiBsb2NhbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBmdW5jdGlvbihsb2NhbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkltcG9ydERlZmF1bHRTcGVjaWZpZXIsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiBmdW5jdGlvbihsb2NhbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcixcbiAgICAgICAgICAgIGxvY2FsOiBsb2NhbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwb3J0TmFtZWREZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsYXJhdGlvbixcbiAgICAgICAgICAgIHNwZWNpZmllcnM6IHNwZWNpZmllcnMsXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246IGZ1bmN0aW9uKGRlY2xhcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uLFxuICAgICAgICAgICAgZGVjbGFyYXRpb246IGRlY2xhcmF0aW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4cG9ydEFsbERlY2xhcmF0aW9uOiBmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5FeHBvcnRBbGxEZWNsYXJhdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUltcG9ydFNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwsIGltcG9ydGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSW1wb3J0U3BlY2lmaWVyLFxuICAgICAgICAgICAgbG9jYWw6IGxvY2FsIHx8IGltcG9ydGVkLFxuICAgICAgICAgICAgaW1wb3J0ZWQ6IGltcG9ydGVkXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUltcG9ydERlY2xhcmF0aW9uOiBmdW5jdGlvbihzcGVjaWZpZXJzLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnREZWNsYXJhdGlvbixcbiAgICAgICAgICAgIHNwZWNpZmllcnM6IHNwZWNpZmllcnMsXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH1cblxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBUaGUgQVNUIG5vZGUgdHlwZXMgcHJvZHVjZWQgYnkgdGhlIHBhcnNlci5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIsXG4gICAgQXNzaWdubWVudFBhdHRlcm46IFwiQXNzaWdubWVudFBhdHRlcm5cIixcbiAgICBBcnJheUV4cHJlc3Npb246IFwiQXJyYXlFeHByZXNzaW9uXCIsXG4gICAgQXJyYXlQYXR0ZXJuOiBcIkFycmF5UGF0dGVyblwiLFxuICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIsXG4gICAgQmxvY2tTdGF0ZW1lbnQ6IFwiQmxvY2tTdGF0ZW1lbnRcIixcbiAgICBCaW5hcnlFeHByZXNzaW9uOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICBCcmVha1N0YXRlbWVudDogXCJCcmVha1N0YXRlbWVudFwiLFxuICAgIENhbGxFeHByZXNzaW9uOiBcIkNhbGxFeHByZXNzaW9uXCIsXG4gICAgQ2F0Y2hDbGF1c2U6IFwiQ2F0Y2hDbGF1c2VcIixcbiAgICBDbGFzc0JvZHk6IFwiQ2xhc3NCb2R5XCIsXG4gICAgQ2xhc3NEZWNsYXJhdGlvbjogXCJDbGFzc0RlY2xhcmF0aW9uXCIsXG4gICAgQ2xhc3NFeHByZXNzaW9uOiBcIkNsYXNzRXhwcmVzc2lvblwiLFxuICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIixcbiAgICBDb250aW51ZVN0YXRlbWVudDogXCJDb250aW51ZVN0YXRlbWVudFwiLFxuICAgIERvV2hpbGVTdGF0ZW1lbnQ6IFwiRG9XaGlsZVN0YXRlbWVudFwiLFxuICAgIERlYnVnZ2VyU3RhdGVtZW50OiBcIkRlYnVnZ2VyU3RhdGVtZW50XCIsXG4gICAgRW1wdHlTdGF0ZW1lbnQ6IFwiRW1wdHlTdGF0ZW1lbnRcIixcbiAgICBFeHByZXNzaW9uU3RhdGVtZW50OiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICBGb3JTdGF0ZW1lbnQ6IFwiRm9yU3RhdGVtZW50XCIsXG4gICAgRm9ySW5TdGF0ZW1lbnQ6IFwiRm9ySW5TdGF0ZW1lbnRcIixcbiAgICBGb3JPZlN0YXRlbWVudDogXCJGb3JPZlN0YXRlbWVudFwiLFxuICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogXCJGdW5jdGlvbkV4cHJlc3Npb25cIixcbiAgICBJZGVudGlmaWVyOiBcIklkZW50aWZpZXJcIixcbiAgICBJZlN0YXRlbWVudDogXCJJZlN0YXRlbWVudFwiLFxuICAgIExpdGVyYWw6IFwiTGl0ZXJhbFwiLFxuICAgIExhYmVsZWRTdGF0ZW1lbnQ6IFwiTGFiZWxlZFN0YXRlbWVudFwiLFxuICAgIExvZ2ljYWxFeHByZXNzaW9uOiBcIkxvZ2ljYWxFeHByZXNzaW9uXCIsXG4gICAgTWVtYmVyRXhwcmVzc2lvbjogXCJNZW1iZXJFeHByZXNzaW9uXCIsXG4gICAgTWV0aG9kRGVmaW5pdGlvbjogXCJNZXRob2REZWZpbml0aW9uXCIsXG4gICAgTmV3RXhwcmVzc2lvbjogXCJOZXdFeHByZXNzaW9uXCIsXG4gICAgT2JqZWN0RXhwcmVzc2lvbjogXCJPYmplY3RFeHByZXNzaW9uXCIsXG4gICAgT2JqZWN0UGF0dGVybjogXCJPYmplY3RQYXR0ZXJuXCIsXG4gICAgUHJvZ3JhbTogXCJQcm9ncmFtXCIsXG4gICAgUHJvcGVydHk6IFwiUHJvcGVydHlcIixcbiAgICBSZXN0RWxlbWVudDogXCJSZXN0RWxlbWVudFwiLFxuICAgIFJldHVyblN0YXRlbWVudDogXCJSZXR1cm5TdGF0ZW1lbnRcIixcbiAgICBTZXF1ZW5jZUV4cHJlc3Npb246IFwiU2VxdWVuY2VFeHByZXNzaW9uXCIsXG4gICAgU3ByZWFkRWxlbWVudDogXCJTcHJlYWRFbGVtZW50XCIsXG4gICAgU3VwZXI6IFwiU3VwZXJcIixcbiAgICBTd2l0Y2hDYXNlOiBcIlN3aXRjaENhc2VcIixcbiAgICBTd2l0Y2hTdGF0ZW1lbnQ6IFwiU3dpdGNoU3RhdGVtZW50XCIsXG4gICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBcIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvblwiLFxuICAgIFRlbXBsYXRlRWxlbWVudDogXCJUZW1wbGF0ZUVsZW1lbnRcIixcbiAgICBUZW1wbGF0ZUxpdGVyYWw6IFwiVGVtcGxhdGVMaXRlcmFsXCIsXG4gICAgVGhpc0V4cHJlc3Npb246IFwiVGhpc0V4cHJlc3Npb25cIixcbiAgICBUaHJvd1N0YXRlbWVudDogXCJUaHJvd1N0YXRlbWVudFwiLFxuICAgIFRyeVN0YXRlbWVudDogXCJUcnlTdGF0ZW1lbnRcIixcbiAgICBVbmFyeUV4cHJlc3Npb246IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgVXBkYXRlRXhwcmVzc2lvbjogXCJVcGRhdGVFeHByZXNzaW9uXCIsXG4gICAgVmFyaWFibGVEZWNsYXJhdGlvbjogXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIsXG4gICAgVmFyaWFibGVEZWNsYXJhdG9yOiBcIlZhcmlhYmxlRGVjbGFyYXRvclwiLFxuICAgIFdoaWxlU3RhdGVtZW50OiBcIldoaWxlU3RhdGVtZW50XCIsXG4gICAgV2l0aFN0YXRlbWVudDogXCJXaXRoU3RhdGVtZW50XCIsXG4gICAgWWllbGRFeHByZXNzaW9uOiBcIllpZWxkRXhwcmVzc2lvblwiLFxuICAgIEpTWElkZW50aWZpZXI6IFwiSlNYSWRlbnRpZmllclwiLFxuICAgIEpTWE5hbWVzcGFjZWROYW1lOiBcIkpTWE5hbWVzcGFjZWROYW1lXCIsXG4gICAgSlNYTWVtYmVyRXhwcmVzc2lvbjogXCJKU1hNZW1iZXJFeHByZXNzaW9uXCIsXG4gICAgSlNYRW1wdHlFeHByZXNzaW9uOiBcIkpTWEVtcHR5RXhwcmVzc2lvblwiLFxuICAgIEpTWEV4cHJlc3Npb25Db250YWluZXI6IFwiSlNYRXhwcmVzc2lvbkNvbnRhaW5lclwiLFxuICAgIEpTWEVsZW1lbnQ6IFwiSlNYRWxlbWVudFwiLFxuICAgIEpTWENsb3NpbmdFbGVtZW50OiBcIkpTWENsb3NpbmdFbGVtZW50XCIsXG4gICAgSlNYT3BlbmluZ0VsZW1lbnQ6IFwiSlNYT3BlbmluZ0VsZW1lbnRcIixcbiAgICBKU1hBdHRyaWJ1dGU6IFwiSlNYQXR0cmlidXRlXCIsXG4gICAgSlNYU3ByZWFkQXR0cmlidXRlOiBcIkpTWFNwcmVhZEF0dHJpYnV0ZVwiLFxuICAgIEpTWFRleHQ6IFwiSlNYVGV4dFwiLFxuICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogXCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb25cIixcbiAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIixcbiAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiLFxuICAgIEV4cG9ydFNwZWNpZmllcjogXCJFeHBvcnRTcGVjaWZpZXJcIixcbiAgICBJbXBvcnREZWNsYXJhdGlvbjogXCJJbXBvcnREZWNsYXJhdGlvblwiLFxuICAgIEltcG9ydFNwZWNpZmllcjogXCJJbXBvcnRTcGVjaWZpZXJcIixcbiAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBcIkltcG9ydERlZmF1bHRTcGVjaWZpZXJcIixcbiAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6IFwiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyXCJcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQXR0YWNoZXMgY29tbWVudHMgdG8gdGhlIEFTVC5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNSBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBhc3ROb2RlVHlwZXMgPSByZXF1aXJlKFwiLi9hc3Qtbm9kZS10eXBlc1wiKTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByaXZhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBleHRyYSA9IHtcbiAgICAgICAgdHJhaWxpbmdDb21tZW50czogW10sXG4gICAgICAgIGxlYWRpbmdDb21tZW50czogW10sXG4gICAgICAgIGJvdHRvbVJpZ2h0U3RhY2s6IFtdXG4gICAgfTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBbXTtcbiAgICB9LFxuXG4gICAgYWRkQ29tbWVudDogZnVuY3Rpb24oY29tbWVudCkge1xuICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgIH0sXG5cbiAgICBwcm9jZXNzQ29tbWVudDogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICB2YXIgbGFzdENoaWxkLFxuICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyxcbiAgICAgICAgICAgIGk7XG5cbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlByb2dyYW0pIHtcbiAgICAgICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIElmIHRoZSBmaXJzdCBjb21tZW50IGluIHRyYWlsaW5nQ29tbWVudHMgY29tZXMgYWZ0ZXIgdGhlXG4gICAgICAgICAgICAgKiBjdXJyZW50IG5vZGUsIHRoZW4gd2UncmUgZ29vZCAtIGFsbCBjb21tZW50cyBpbiB0aGUgYXJyYXkgd2lsbFxuICAgICAgICAgICAgICogY29tZSBhZnRlciB0aGUgbm9kZSBhbmQgc28gaXQncyBzYWZlIHRvIGFkZCB0aGVuIGFzIG9mZmljaWFsXG4gICAgICAgICAgICAgKiB0cmFpbGluZ0NvbW1lbnRzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogT3RoZXJ3aXNlLCBpZiB0aGUgZmlyc3QgY29tbWVudCBkb2Vzbid0IGNvbWUgYWZ0ZXIgdGhlXG4gICAgICAgICAgICAgICAgICogY3VycmVudCBub2RlLCB0aGF0IG1lYW5zIHdlIGhhdmUgYSBtaXggb2YgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgICAgICAgICAgICAgICAgKiBjb21tZW50cyBpbiB0aGUgYXJyYXkgYW5kIHRoYXQgbGVhZGluZ0NvbW1lbnRzIGNvbnRhaW5zIHRoZVxuICAgICAgICAgICAgICAgICAqIHNhbWUgaXRlbXMgYXMgdHJhaWxpbmdDb21tZW50cy4gUmVzZXQgdHJhaWxpbmdDb21tZW50cyB0b1xuICAgICAgICAgICAgICAgICAqIHplcm8gaXRlbXMgYW5kIHdlJ2xsIGhhbmRsZSB0aGlzIGJ5IGV2YWx1YXRpbmcgbGVhZGluZ0NvbW1lbnRzXG4gICAgICAgICAgICAgICAgICogbGF0ZXIuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50cyAmJlxuICAgICAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suXG4gICAgICAgIHdoaWxlIChleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiYgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdENoaWxkKSB7XG4gICAgICAgICAgICBpZiAobGFzdENoaWxkLmxlYWRpbmdDb21tZW50cyAmJiBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzW2xhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICBpZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzW2V4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBleHRyYS5sZWFkaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc3ByZWUvaXNzdWVzLzJcblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogSW4gc3BlY2lhbCBjYXNlcywgc3VjaCBhcyByZXR1cm4gKHdpdGhvdXQgYSB2YWx1ZSkgYW5kXG4gICAgICAgICAgICAgICAgICogZGVidWdnZXIsIGFsbCBjb21tZW50cyB3aWxsIGVuZCB1cCBhcyBsZWFkaW5nQ29tbWVudHMgYW5kXG4gICAgICAgICAgICAgICAgICogd2lsbCBvdGhlcndpc2UgYmUgZWxpbWluYXRlZC4gVGhpcyBleHRyYSBzdGVwIHJ1bnMgd2hlbiB0aGVcbiAgICAgICAgICAgICAgICAgKiBib3R0b21SaWdodFN0YWNrIGlzIGVtcHR5IGFuZCB0aGVyZSBhcmUgY29tbWVudHMgbGVmdFxuICAgICAgICAgICAgICAgICAqIGluIGxlYWRpbmdDb21tZW50cy5cbiAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAqIFRoaXMgbG9vcCBmaWd1cmVzIG91dCB0aGUgc3RvcHBpbmcgcG9pbnQgYmV0d2VlbiB0aGUgYWN0dWFsXG4gICAgICAgICAgICAgICAgICogbGVhZGluZyBhbmQgdHJhaWxpbmcgY29tbWVudHMgYnkgZmluZGluZyB0aGUgbG9jYXRpb24gb2YgdGhlXG4gICAgICAgICAgICAgICAgICogZmlyc3QgY29tbWVudCB0aGF0IGNvbWVzIGFmdGVyIHRoZSBnaXZlbiBub2RlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmxlYWRpbmdDb21tZW50c1tpXS5yYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBTcGxpdCB0aGUgYXJyYXkgYmFzZWQgb24gdGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBjb21tZW50XG4gICAgICAgICAgICAgICAgICogdGhhdCBjb21lcyBhZnRlciB0aGUgbm9kZS4gS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBjb3VsZFxuICAgICAgICAgICAgICAgICAqIHJlc3VsdCBpbiBhbiBlbXB0eSBhcnJheSwgYW5kIGlmIHNvLCB0aGUgYXJyYXkgbXVzdCBiZVxuICAgICAgICAgICAgICAgICAqIGRlbGV0ZWQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBleHRyYS5sZWFkaW5nQ29tbWVudHMuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbm9kZS5sZWFkaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBTaW1pbGFybHksIHRyYWlsaW5nIGNvbW1lbnRzIGFyZSBhdHRhY2hlZCBsYXRlci4gVGhlIHZhcmlhYmxlXG4gICAgICAgICAgICAgICAgICogbXVzdCBiZSByZXNldCB0byBudWxsIGlmIHRoZXJlIGFyZSBubyB0cmFpbGluZyBjb21tZW50cy5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzLnNsaWNlKGkpO1xuICAgICAgICAgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cykge1xuICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzID0gdHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucHVzaChub2RlKTtcbiAgICB9XG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhlIGxpc3Qgb2YgZmVhdHVyZSBmbGFncyBzdXBwb3J0ZWQgYnkgdGhlIHBhcnNlciBhbmQgdGhlaXIgZGVmYXVsdFxuICogICAgICBzZXR0aW5ncy5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNSBGcmVkIEsuIFNjaG90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGFycm93IGZ1bmN0aW9uc1xuICAgIGFycm93RnVuY3Rpb25zOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGxldCBhbmQgY29uc3RcbiAgICBibG9ja0JpbmRpbmdzOiB0cnVlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgZGVzdHJ1Y3R1cmVkIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgIGRlc3RydWN0dXJpbmc6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVnZXggdSBmbGFnXG4gICAgcmVnZXhVRmxhZzogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiByZWdleCB5IGZsYWdcbiAgICByZWdleFlGbGFnOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHRlbXBsYXRlIHN0cmluZ3NcbiAgICB0ZW1wbGF0ZVN0cmluZ3M6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgYmluYXJ5IGxpdGVyYWxzXG4gICAgYmluYXJ5TGl0ZXJhbHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgRVM2IG9jdGFsIGxpdGVyYWxzXG4gICAgb2N0YWxMaXRlcmFsczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyB1bmljb2RlIGNvZGUgcG9pbnQgZXNjYXBlIHNlcXVlbmNlc1xuICAgIHVuaWNvZGVDb2RlUG9pbnRFc2NhcGVzOiB0cnVlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgZGVmYXVsdCBwYXJhbWV0ZXJzXG4gICAgZGVmYXVsdFBhcmFtczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiByZXN0IHBhcmFtZXRlcnNcbiAgICByZXN0UGFyYW1zOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGZvci1vZiBzdGF0ZW1lbnRzXG4gICAgZm9yT2Y6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgY29tcHV0ZWQgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllc1xuICAgIG9iamVjdExpdGVyYWxDb21wdXRlZFByb3BlcnRpZXM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2Ygc2hvcnRoYW5kIG9iamVjdCBsaXRlcmFsIG1ldGhvZHNcbiAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kTWV0aG9kczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBzaG9ydGhhbmQgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllc1xuICAgIG9iamVjdExpdGVyYWxTaG9ydGhhbmRQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIEFsbG93IGR1cGxpY2F0ZSBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0aWVzIChleGNlcHQgJ19fcHJvdG9fXycpXG4gICAgb2JqZWN0TGl0ZXJhbER1cGxpY2F0ZVByb3BlcnRpZXM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgZ2VuZXJhdG9ycy95aWVsZFxuICAgIGdlbmVyYXRvcnM6IGZhbHNlLFxuXG4gICAgLy8gc3VwcG9ydCB0aGUgc3ByZWFkIG9wZXJhdG9yXG4gICAgc3ByZWFkOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBzdXBlciBpbiBmdW5jdGlvbnNcbiAgICBzdXBlckluRnVuY3Rpb25zOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGNsYXNzZXNcbiAgICBjbGFzc2VzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIG1vZHVsZXNcbiAgICBtb2R1bGVzOiBmYWxzZSxcblxuICAgIC8vIFJlYWN0IEpTWCBwYXJzaW5nXG4gICAganN4OiBmYWxzZSxcblxuICAgIC8vIGFsbG93IHJldHVybiBzdGF0ZW1lbnQgaW4gZ2xvYmFsIHNjb3BlXG4gICAgZ2xvYmFsUmV0dXJuOiBmYWxzZVxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBFcnJvciBtZXNzYWdlcyByZXR1cm5lZCBieSB0aGUgcGFyc2VyLlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOCB3aGVyZSBwb3NzaWJsZVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVW5leHBlY3RlZFRva2VuOiBcIlVuZXhwZWN0ZWQgdG9rZW4gJTBcIixcbiAgICBVbmV4cGVjdGVkTnVtYmVyOiBcIlVuZXhwZWN0ZWQgbnVtYmVyXCIsXG4gICAgVW5leHBlY3RlZFN0cmluZzogXCJVbmV4cGVjdGVkIHN0cmluZ1wiLFxuICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiBcIlVuZXhwZWN0ZWQgaWRlbnRpZmllclwiLFxuICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogXCJVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmRcIixcbiAgICBVbmV4cGVjdGVkVGVtcGxhdGU6IFwiVW5leHBlY3RlZCBxdWFzaSAlMFwiLFxuICAgIFVuZXhwZWN0ZWRFT1M6IFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIixcbiAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogXCJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3dcIixcbiAgICBJbnZhbGlkUmVnRXhwOiBcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uXCIsXG4gICAgSW52YWxpZFJlZ0V4cEZsYWc6IFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ1wiLFxuICAgIFVudGVybWluYXRlZFJlZ0V4cDogXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvXCIsXG4gICAgSW52YWxpZExIU0luQXNzaWdubWVudDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnRcIixcbiAgICBJbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvcm1hbHMgbGlzdFwiLFxuICAgIEludmFsaWRMSFNJbkZvckluOiBcIkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluXCIsXG4gICAgTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiBcIk1vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudFwiLFxuICAgIE5vQ2F0Y2hPckZpbmFsbHk6IFwiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeVwiLFxuICAgIE5vVW5pbnRpYWxpemVkQ29uc3Q6IFwiQ29uc3QgbXVzdCBiZSBpbml0aWFsaXplZFwiLFxuICAgIFVua25vd25MYWJlbDogXCJVbmRlZmluZWQgbGFiZWwgJyUwJ1wiLFxuICAgIFJlZGVjbGFyYXRpb246IFwiJTAgJyUxJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkXCIsXG4gICAgSWxsZWdhbENvbnRpbnVlOiBcIklsbGVnYWwgY29udGludWUgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbEJyZWFrOiBcIklsbGVnYWwgYnJlYWsgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbFJldHVybjogXCJJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnRcIixcbiAgICBJbGxlZ2FsWWllbGQ6IFwiSWxsZWdhbCB5aWVsZCBleHByZXNzaW9uXCIsXG4gICAgSWxsZWdhbFNwcmVhZDogXCJJbGxlZ2FsIHNwcmVhZCBlbGVtZW50XCIsXG4gICAgU3RyaWN0TW9kZVdpdGg6IFwiU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudFwiLFxuICAgIFN0cmljdENhdGNoVmFyaWFibGU6IFwiQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFZhck5hbWU6IFwiVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1OYW1lOiBcIlBhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1EdXBlOiBcIlN0cmljdCBtb2RlIGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzXCIsXG4gICAgVGVtcGxhdGVPY3RhbExpdGVyYWw6IFwiT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuXCIsXG4gICAgUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyOiBcIlJlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyXCIsXG4gICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6IFwiUmVzdCBwYXJhbWV0ZXIgY2FuIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVwiLFxuICAgIEVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQ6IFwiU3ByZWFkIG11c3QgYmUgdGhlIGZpbmFsIGVsZW1lbnQgb2YgYW4gZWxlbWVudCBsaXN0XCIsXG4gICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjogXCJJbnZhbGlkIHJlc3QgcGFyYW1ldGVyXCIsXG4gICAgT2JqZWN0UGF0dGVybkFzU3ByZWFkOiBcIkludmFsaWQgc3ByZWFkIGFyZ3VtZW50XCIsXG4gICAgU3RyaWN0RnVuY3Rpb25OYW1lOiBcIkZ1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogXCJPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuXCIsXG4gICAgU3RyaWN0RGVsZXRlOiBcIkRlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLlwiLFxuICAgIFN0cmljdER1cGxpY2F0ZVByb3BlcnR5OiBcIkR1cGxpY2F0ZSBkYXRhIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgRHVwbGljYXRlUHJvdG90eXBlUHJvcGVydHk6IFwiRHVwbGljYXRlICdfX3Byb3RvX18nIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIGFyZSBub3QgYWxsb3dlZFwiLFxuICAgIENvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZDogXCJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yXCIsXG4gICAgRHVwbGljYXRlQ29uc3RydWN0b3I6IFwiQSBjbGFzcyBtYXkgb25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvclwiLFxuICAgIFN0YXRpY1Byb3RvdHlwZTogXCJDbGFzc2VzIG1heSBub3QgaGF2ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlXCIsXG4gICAgQWNjZXNzb3JEYXRhUHJvcGVydHk6IFwiT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZlIGRhdGEgYW5kIGFjY2Vzc29yIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZVwiLFxuICAgIEFjY2Vzc29yR2V0U2V0OiBcIk9iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBtdWx0aXBsZSBnZXQvc2V0IGFjY2Vzc29ycyB3aXRoIHRoZSBzYW1lIG5hbWVcIixcbiAgICBTdHJpY3RMSFNBc3NpZ25tZW50OiBcIkFzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBTdHJpY3RMSFNQb3N0Zml4OiBcIlBvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdExIU1ByZWZpeDogXCJQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFJlc2VydmVkV29yZDogXCJVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBJbnZhbGlkSlNYQXR0cmlidXRlVmFsdWU6IFwiSlNYIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgYW4gZXhwcmVzc2lvbiBvciBhIHF1b3RlZCBKU1ggdGV4dFwiLFxuICAgIEV4cGVjdGVkSlNYQ2xvc2luZ1RhZzogXCJFeHBlY3RlZCBjb3JyZXNwb25kaW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgJTBcIixcbiAgICBBZGphY2VudEpTWEVsZW1lbnRzOiBcIkFkamFjZW50IEpTWCBlbGVtZW50cyBtdXN0IGJlIHdyYXBwZWQgaW4gYW4gZW5jbG9zaW5nIHRhZ1wiLFxuICAgIE1pc3NpbmdGcm9tQ2xhdXNlOiBcIk1pc3NpbmcgZnJvbSBjbGF1c2VcIixcbiAgICBOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6IFwiTWlzc2luZyBhcyBhZnRlciBpbXBvcnQgKlwiLFxuICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6IFwiSW52YWxpZCBtb2R1bGUgc3BlY2lmaWVyXCIsXG4gICAgSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgaW1wb3J0IGRlY2xhcmF0aW9uXCIsXG4gICAgSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgZXhwb3J0IGRlY2xhcmF0aW9uXCJcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQSBzaW1wbGUgbWFwIHRoYXQgaGVscHMgYXZvaWQgY29sbGlzaW9ucyBvbiB0aGUgT2JqZWN0IHByb3RvdHlwZS5cbiAqIEBhdXRob3IgSmFtdW5kIEZlcmd1c29uXG4gKiBAY29weXJpZ2h0IDIwMTUgSmFtdW5kIEZlcmd1c29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gU3RyaW5nTWFwKCkge1xuICAgIHRoaXMuJGRhdGEgPSB7fTtcbn1cblxuU3RyaW5nTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5ID0gXCIkXCIgKyBrZXk7XG4gICAgcmV0dXJuIHRoaXMuJGRhdGFba2V5XTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBrZXkgPSBcIiRcIiArIGtleTtcbiAgICB0aGlzLiRkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy4kZGF0YSwga2V5KTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBkZWxldGUgdGhpcy4kZGF0YVtrZXldO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdNYXA7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVmFyaW91cyBzeW50YXgvcGF0dGVybiBjaGVja3MgZm9yIHBhcnNpbmcuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqIEBjb3B5cmlnaHQgMjAxMi0yMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByaXZhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanMuXG52YXIgUmVnZXggPSB7XG4gICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGMFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDgzLVxcdTA0ODdcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYxMC1cXHUwNjFBXFx1MDYyMC1cXHUwNjY5XFx1MDY2RS1cXHUwNkQzXFx1MDZENS1cXHUwNkRDXFx1MDZERi1cXHUwNkU4XFx1MDZFQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTAtXFx1MDc0QVxcdTA3NEQtXFx1MDdCMVxcdTA3QzAtXFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwOEEwXFx1MDhBMi1cXHUwOEFDXFx1MDhFNC1cXHUwOEZFXFx1MDkwMC1cXHUwOTYzXFx1MDk2Ni1cXHUwOTZGXFx1MDk3MS1cXHUwOTc3XFx1MDk3OS1cXHUwOTdGXFx1MDk4MS1cXHUwOTgzXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCQy1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0VcXHUwOUQ3XFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTNcXHUwOUU2LVxcdTA5RjFcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2M1xcdTBCNjYtXFx1MEI2RlxcdTBCNzFcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJFRlxcdTBDMDEtXFx1MEMwM1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OFxcdTBDNTlcXHUwQzYwLVxcdTBDNjNcXHUwQzY2LVxcdTBDNkZcXHUwQzgyXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMlxcdTBEMDNcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNELVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU3XFx1MEQ2MC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkYwXFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5RDlcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y2XFx1MUQwMC1cXHUxREU2XFx1MURGQy1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MjBFNS1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5XFx1MzA5QVxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY2RlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTY5N1xcdUE2OUYtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgyN1xcdUE4NDAtXFx1QTg3M1xcdUE4ODAtXFx1QThDNFxcdUE4RDAtXFx1QThEOVxcdUE4RTAtXFx1QThGN1xcdUE4RkJcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3QlxcdUFBODAtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCQzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMjZcXHVGRTMzXFx1RkUzNFxcdUZFNEQtXFx1RkU0RlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGM0ZcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIExlYWRpbmdaZXJvczogbmV3IFJlZ0V4cChcIl4wKyg/ISQpXCIpXG59O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIFJlZ2V4OiBSZWdleCxcblxuICAgIGlzRGVjaW1hbERpZ2l0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45XG4gICAgfSxcblxuICAgIGlzSGV4RGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3ODlhYmNkZWZBQkNERUZcIi5pbmRleE9mKGNoKSA+PSAwO1xuICAgIH0sXG5cbiAgICBpc09jdGFsRGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3XCIuaW5kZXhPZihjaCkgPj0gMDtcbiAgICB9LFxuXG4gICAgLy8gNy4yIFdoaXRlIFNwYWNlXG5cbiAgICBpc1doaXRlU3BhY2U6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTtcbiAgICB9LFxuXG4gICAgLy8gNy4zIExpbmUgVGVybWluYXRvcnNcblxuICAgIGlzTGluZVRlcm1pbmF0b3I6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8IChjaCA9PT0gMHgyMDI5KTtcbiAgICB9LFxuXG4gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBpc0lkZW50aWZpZXJTdGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFxcIChiYWNrc2xhc2gpXG4gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTtcbiAgICB9LFxuXG4gICAgaXNJZGVudGlmaWVyUGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAgICAgICAgIC8vIDAuLjlcbiAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfSxcblxuICAgIC8vIDcuNi4xLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzXG5cbiAgICBpc0Z1dHVyZVJlc2VydmVkV29yZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgY2FzZSBcImV4cG9ydFwiOlxuICAgICAgICAgICAgY2FzZSBcImV4dGVuZHNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvcnRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzdXBlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkOiBmdW5jdGlvbihpZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW1wbGVtZW50c1wiOlxuICAgICAgICAgICAgY2FzZSBcImludGVyZmFjZVwiOlxuICAgICAgICAgICAgY2FzZSBcInBhY2thZ2VcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwcml2YXRlXCI6XG4gICAgICAgICAgICBjYXNlIFwicHJvdGVjdGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwicHVibGljXCI6XG4gICAgICAgICAgICBjYXNlIFwic3RhdGljXCI6XG4gICAgICAgICAgICBjYXNlIFwieWllbGRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJsZXRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGlzUmVzdHJpY3RlZFdvcmQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIHJldHVybiBpZCA9PT0gXCJldmFsXCIgfHwgaWQgPT09IFwiYXJndW1lbnRzXCI7XG4gICAgfSxcblxuICAgIC8vIDcuNi4xLjEgS2V5d29yZHNcblxuICAgIGlzS2V5d29yZDogZnVuY3Rpb24oaWQsIHN0cmljdCwgZWNtYUZlYXR1cmVzKSB7XG5cbiAgICAgICAgaWYgKHN0cmljdCAmJiB0aGlzLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gXCJjb25zdFwiIGlzIHNwZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguXG4gICAgICAgIC8vIFwieWllbGRcIiBhbmQgXCJsZXRcIiBhcmUgZm9yIGNvbXBhdGlibGl0eSB3aXRoIFNwaWRlck1vbmtleSBhbmQgRVMubmV4dC5cbiAgICAgICAgLy8gU29tZSBvdGhlcnMgYXJlIGZyb20gZnV0dXJlIHJlc2VydmVkIHdvcmRzLlxuXG4gICAgICAgIHN3aXRjaCAoaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJpZlwiKSB8fCAoaWQgPT09IFwiaW5cIikgfHwgKGlkID09PSBcImRvXCIpO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwidmFyXCIpIHx8IChpZCA9PT0gXCJmb3JcIikgfHwgKGlkID09PSBcIm5ld1wiKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaWQgPT09IFwidHJ5XCIpIHx8IChpZCA9PT0gXCJsZXRcIik7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJ0aGlzXCIpIHx8IChpZCA9PT0gXCJlbHNlXCIpIHx8IChpZCA9PT0gXCJjYXNlXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJ2b2lkXCIpIHx8IChpZCA9PT0gXCJ3aXRoXCIpIHx8IChpZCA9PT0gXCJlbnVtXCIpO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwid2hpbGVcIikgfHwgKGlkID09PSBcImJyZWFrXCIpIHx8IChpZCA9PT0gXCJjYXRjaFwiKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaWQgPT09IFwidGhyb3dcIikgfHwgKGlkID09PSBcImNvbnN0XCIpIHx8ICghZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnMgJiYgaWQgPT09IFwieWllbGRcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcImNsYXNzXCIpIHx8IChpZCA9PT0gXCJzdXBlclwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcInJldHVyblwiKSB8fCAoaWQgPT09IFwidHlwZW9mXCIpIHx8IChpZCA9PT0gXCJkZWxldGVcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInN3aXRjaFwiKSB8fCAoaWQgPT09IFwiZXhwb3J0XCIpIHx8IChpZCA9PT0gXCJpbXBvcnRcIik7XG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJkZWZhdWx0XCIpIHx8IChpZCA9PT0gXCJmaW5hbGx5XCIpIHx8IChpZCA9PT0gXCJleHRlbmRzXCIpO1xuICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiZnVuY3Rpb25cIikgfHwgKGlkID09PSBcImNvbnRpbnVlXCIpIHx8IChpZCA9PT0gXCJkZWJ1Z2dlclwiKTtcbiAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJpbnN0YW5jZW9mXCIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNKU1hJZGVudGlmaWVyU3RhcnQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIC8vIGV4Y2x1ZGUgYmFja3NsYXNoIChcXClcbiAgICAgICAgcmV0dXJuIChjaCAhPT0gOTIpICYmIHRoaXMuaXNJZGVudGlmaWVyU3RhcnQoY2gpO1xuICAgIH0sXG5cbiAgICBpc0pTWElkZW50aWZpZXJQYXJ0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICAvLyBleGNsdWRlIGJhY2tzbGFzaCAoXFwpIGFuZCBhZGQgaHlwaGVuICgtKVxuICAgICAgICByZXR1cm4gKGNoICE9PSA5MikgJiYgKGNoID09PSA0NSB8fCB0aGlzLmlzSWRlbnRpZmllclBhcnQoY2gpKTtcbiAgICB9XG5cblxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBDb250YWlucyB0b2tlbiBpbmZvcm1hdGlvbi5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBjb3B5cmlnaHQgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50eWxAZ21haWwuY29tPlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByaXZhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBUb2tlbiA9IHtcbiAgICBCb29sZWFuTGl0ZXJhbDogMSxcbiAgICBFT0Y6IDIsXG4gICAgSWRlbnRpZmllcjogMyxcbiAgICBLZXl3b3JkOiA0LFxuICAgIE51bGxMaXRlcmFsOiA1LFxuICAgIE51bWVyaWNMaXRlcmFsOiA2LFxuICAgIFB1bmN0dWF0b3I6IDcsXG4gICAgU3RyaW5nTGl0ZXJhbDogOCxcbiAgICBSZWd1bGFyRXhwcmVzc2lvbjogOSxcbiAgICBUZW1wbGF0ZTogMTAsXG4gICAgSlNYSWRlbnRpZmllcjogMTEsXG4gICAgSlNYVGV4dDogMTJcbn07XG5cbnZhciBUb2tlbk5hbWUgPSB7fTtcblRva2VuTmFtZVtUb2tlbi5Cb29sZWFuTGl0ZXJhbF0gPSBcIkJvb2xlYW5cIjtcblRva2VuTmFtZVtUb2tlbi5FT0ZdID0gXCI8ZW5kPlwiO1xuVG9rZW5OYW1lW1Rva2VuLklkZW50aWZpZXJdID0gXCJJZGVudGlmaWVyXCI7XG5Ub2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSBcIktleXdvcmRcIjtcblRva2VuTmFtZVtUb2tlbi5OdWxsTGl0ZXJhbF0gPSBcIk51bGxcIjtcblRva2VuTmFtZVtUb2tlbi5OdW1lcmljTGl0ZXJhbF0gPSBcIk51bWVyaWNcIjtcblRva2VuTmFtZVtUb2tlbi5QdW5jdHVhdG9yXSA9IFwiUHVuY3R1YXRvclwiO1xuVG9rZW5OYW1lW1Rva2VuLlN0cmluZ0xpdGVyYWxdID0gXCJTdHJpbmdcIjtcblRva2VuTmFtZVtUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbl0gPSBcIlJlZ3VsYXJFeHByZXNzaW9uXCI7XG5Ub2tlbk5hbWVbVG9rZW4uVGVtcGxhdGVdID0gXCJUZW1wbGF0ZVwiO1xuVG9rZW5OYW1lW1Rva2VuLkpTWElkZW50aWZpZXJdID0gXCJKU1hJZGVudGlmaWVyXCI7XG5Ub2tlbk5hbWVbVG9rZW4uSlNYVGV4dF0gPSBcIkpTWFRleHRcIjtcblxuLy8gQSBmdW5jdGlvbiBmb2xsb3dpbmcgb25lIG9mIHRob3NlIHRva2VucyBpcyBhbiBleHByZXNzaW9uLlxudmFyIEZuRXhwclRva2VucyA9IFtcIihcIiwgXCJ7XCIsIFwiW1wiLCBcImluXCIsIFwidHlwZW9mXCIsIFwiaW5zdGFuY2VvZlwiLCBcIm5ld1wiLFxuICAgICAgICAgICAgICAgIFwicmV0dXJuXCIsIFwiY2FzZVwiLCBcImRlbGV0ZVwiLCBcInRocm93XCIsIFwidm9pZFwiLFxuICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzXG4gICAgICAgICAgICAgICAgXCI9XCIsIFwiKz1cIiwgXCItPVwiLCBcIio9XCIsIFwiLz1cIiwgXCIlPVwiLCBcIjw8PVwiLCBcIj4+PVwiLCBcIj4+Pj1cIixcbiAgICAgICAgICAgICAgICBcIiY9XCIsIFwifD1cIiwgXCJePVwiLCBcIixcIixcbiAgICAgICAgICAgICAgICAvLyBiaW5hcnkvdW5hcnkgb3BlcmF0b3JzXG4gICAgICAgICAgICAgICAgXCIrXCIsIFwiLVwiLCBcIipcIiwgXCIvXCIsIFwiJVwiLCBcIisrXCIsIFwiLS1cIiwgXCI8PFwiLCBcIj4+XCIsIFwiPj4+XCIsIFwiJlwiLFxuICAgICAgICAgICAgICAgIFwifFwiLCBcIl5cIiwgXCIhXCIsIFwiflwiLCBcIiYmXCIsIFwifHxcIiwgXCI/XCIsIFwiOlwiLCBcIj09PVwiLCBcIj09XCIsIFwiPj1cIixcbiAgICAgICAgICAgICAgICBcIjw9XCIsIFwiPFwiLCBcIj5cIiwgXCIhPVwiLCBcIiE9PVwiXTtcblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBUb2tlbjogVG9rZW4sXG4gICAgVG9rZW5OYW1lOiBUb2tlbk5hbWUsXG4gICAgRm5FeHByVG9rZW5zOiBGbkV4cHJUb2tlbnNcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhlIGxpc3Qgb2YgWEhUTUwgZW50aXRpZXMgdGhhdCBhcmUgdmFsaWQgaW4gSlNYLlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHF1b3Q6IFwiXFx1MDAyMlwiLFxuICAgIGFtcDogXCImXCIsXG4gICAgYXBvczogXCJcXHUwMDI3XCIsXG4gICAgbHQ6IFwiPFwiLFxuICAgIGd0OiBcIj5cIixcbiAgICBuYnNwOiBcIlxcdTAwQTBcIixcbiAgICBpZXhjbDogXCJcXHUwMEExXCIsXG4gICAgY2VudDogXCJcXHUwMEEyXCIsXG4gICAgcG91bmQ6IFwiXFx1MDBBM1wiLFxuICAgIGN1cnJlbjogXCJcXHUwMEE0XCIsXG4gICAgeWVuOiBcIlxcdTAwQTVcIixcbiAgICBicnZiYXI6IFwiXFx1MDBBNlwiLFxuICAgIHNlY3Q6IFwiXFx1MDBBN1wiLFxuICAgIHVtbDogXCJcXHUwMEE4XCIsXG4gICAgY29weTogXCJcXHUwMEE5XCIsXG4gICAgb3JkZjogXCJcXHUwMEFBXCIsXG4gICAgbGFxdW86IFwiXFx1MDBBQlwiLFxuICAgIG5vdDogXCJcXHUwMEFDXCIsXG4gICAgc2h5OiBcIlxcdTAwQURcIixcbiAgICByZWc6IFwiXFx1MDBBRVwiLFxuICAgIG1hY3I6IFwiXFx1MDBBRlwiLFxuICAgIGRlZzogXCJcXHUwMEIwXCIsXG4gICAgcGx1c21uOiBcIlxcdTAwQjFcIixcbiAgICBzdXAyOiBcIlxcdTAwQjJcIixcbiAgICBzdXAzOiBcIlxcdTAwQjNcIixcbiAgICBhY3V0ZTogXCJcXHUwMEI0XCIsXG4gICAgbWljcm86IFwiXFx1MDBCNVwiLFxuICAgIHBhcmE6IFwiXFx1MDBCNlwiLFxuICAgIG1pZGRvdDogXCJcXHUwMEI3XCIsXG4gICAgY2VkaWw6IFwiXFx1MDBCOFwiLFxuICAgIHN1cDE6IFwiXFx1MDBCOVwiLFxuICAgIG9yZG06IFwiXFx1MDBCQVwiLFxuICAgIHJhcXVvOiBcIlxcdTAwQkJcIixcbiAgICBmcmFjMTQ6IFwiXFx1MDBCQ1wiLFxuICAgIGZyYWMxMjogXCJcXHUwMEJEXCIsXG4gICAgZnJhYzM0OiBcIlxcdTAwQkVcIixcbiAgICBpcXVlc3Q6IFwiXFx1MDBCRlwiLFxuICAgIEFncmF2ZTogXCJcXHUwMEMwXCIsXG4gICAgQWFjdXRlOiBcIlxcdTAwQzFcIixcbiAgICBBY2lyYzogXCJcXHUwMEMyXCIsXG4gICAgQXRpbGRlOiBcIlxcdTAwQzNcIixcbiAgICBBdW1sOiBcIlxcdTAwQzRcIixcbiAgICBBcmluZzogXCJcXHUwMEM1XCIsXG4gICAgQUVsaWc6IFwiXFx1MDBDNlwiLFxuICAgIENjZWRpbDogXCJcXHUwMEM3XCIsXG4gICAgRWdyYXZlOiBcIlxcdTAwQzhcIixcbiAgICBFYWN1dGU6IFwiXFx1MDBDOVwiLFxuICAgIEVjaXJjOiBcIlxcdTAwQ0FcIixcbiAgICBFdW1sOiBcIlxcdTAwQ0JcIixcbiAgICBJZ3JhdmU6IFwiXFx1MDBDQ1wiLFxuICAgIElhY3V0ZTogXCJcXHUwMENEXCIsXG4gICAgSWNpcmM6IFwiXFx1MDBDRVwiLFxuICAgIEl1bWw6IFwiXFx1MDBDRlwiLFxuICAgIEVUSDogXCJcXHUwMEQwXCIsXG4gICAgTnRpbGRlOiBcIlxcdTAwRDFcIixcbiAgICBPZ3JhdmU6IFwiXFx1MDBEMlwiLFxuICAgIE9hY3V0ZTogXCJcXHUwMEQzXCIsXG4gICAgT2NpcmM6IFwiXFx1MDBENFwiLFxuICAgIE90aWxkZTogXCJcXHUwMEQ1XCIsXG4gICAgT3VtbDogXCJcXHUwMEQ2XCIsXG4gICAgdGltZXM6IFwiXFx1MDBEN1wiLFxuICAgIE9zbGFzaDogXCJcXHUwMEQ4XCIsXG4gICAgVWdyYXZlOiBcIlxcdTAwRDlcIixcbiAgICBVYWN1dGU6IFwiXFx1MDBEQVwiLFxuICAgIFVjaXJjOiBcIlxcdTAwREJcIixcbiAgICBVdW1sOiBcIlxcdTAwRENcIixcbiAgICBZYWN1dGU6IFwiXFx1MDBERFwiLFxuICAgIFRIT1JOOiBcIlxcdTAwREVcIixcbiAgICBzemxpZzogXCJcXHUwMERGXCIsXG4gICAgYWdyYXZlOiBcIlxcdTAwRTBcIixcbiAgICBhYWN1dGU6IFwiXFx1MDBFMVwiLFxuICAgIGFjaXJjOiBcIlxcdTAwRTJcIixcbiAgICBhdGlsZGU6IFwiXFx1MDBFM1wiLFxuICAgIGF1bWw6IFwiXFx1MDBFNFwiLFxuICAgIGFyaW5nOiBcIlxcdTAwRTVcIixcbiAgICBhZWxpZzogXCJcXHUwMEU2XCIsXG4gICAgY2NlZGlsOiBcIlxcdTAwRTdcIixcbiAgICBlZ3JhdmU6IFwiXFx1MDBFOFwiLFxuICAgIGVhY3V0ZTogXCJcXHUwMEU5XCIsXG4gICAgZWNpcmM6IFwiXFx1MDBFQVwiLFxuICAgIGV1bWw6IFwiXFx1MDBFQlwiLFxuICAgIGlncmF2ZTogXCJcXHUwMEVDXCIsXG4gICAgaWFjdXRlOiBcIlxcdTAwRURcIixcbiAgICBpY2lyYzogXCJcXHUwMEVFXCIsXG4gICAgaXVtbDogXCJcXHUwMEVGXCIsXG4gICAgZXRoOiBcIlxcdTAwRjBcIixcbiAgICBudGlsZGU6IFwiXFx1MDBGMVwiLFxuICAgIG9ncmF2ZTogXCJcXHUwMEYyXCIsXG4gICAgb2FjdXRlOiBcIlxcdTAwRjNcIixcbiAgICBvY2lyYzogXCJcXHUwMEY0XCIsXG4gICAgb3RpbGRlOiBcIlxcdTAwRjVcIixcbiAgICBvdW1sOiBcIlxcdTAwRjZcIixcbiAgICBkaXZpZGU6IFwiXFx1MDBGN1wiLFxuICAgIG9zbGFzaDogXCJcXHUwMEY4XCIsXG4gICAgdWdyYXZlOiBcIlxcdTAwRjlcIixcbiAgICB1YWN1dGU6IFwiXFx1MDBGQVwiLFxuICAgIHVjaXJjOiBcIlxcdTAwRkJcIixcbiAgICB1dW1sOiBcIlxcdTAwRkNcIixcbiAgICB5YWN1dGU6IFwiXFx1MDBGRFwiLFxuICAgIHRob3JuOiBcIlxcdTAwRkVcIixcbiAgICB5dW1sOiBcIlxcdTAwRkZcIixcbiAgICBPRWxpZzogXCJcXHUwMTUyXCIsXG4gICAgb2VsaWc6IFwiXFx1MDE1M1wiLFxuICAgIFNjYXJvbjogXCJcXHUwMTYwXCIsXG4gICAgc2Nhcm9uOiBcIlxcdTAxNjFcIixcbiAgICBZdW1sOiBcIlxcdTAxNzhcIixcbiAgICBmbm9mOiBcIlxcdTAxOTJcIixcbiAgICBjaXJjOiBcIlxcdTAyQzZcIixcbiAgICB0aWxkZTogXCJcXHUwMkRDXCIsXG4gICAgQWxwaGE6IFwiXFx1MDM5MVwiLFxuICAgIEJldGE6IFwiXFx1MDM5MlwiLFxuICAgIEdhbW1hOiBcIlxcdTAzOTNcIixcbiAgICBEZWx0YTogXCJcXHUwMzk0XCIsXG4gICAgRXBzaWxvbjogXCJcXHUwMzk1XCIsXG4gICAgWmV0YTogXCJcXHUwMzk2XCIsXG4gICAgRXRhOiBcIlxcdTAzOTdcIixcbiAgICBUaGV0YTogXCJcXHUwMzk4XCIsXG4gICAgSW90YTogXCJcXHUwMzk5XCIsXG4gICAgS2FwcGE6IFwiXFx1MDM5QVwiLFxuICAgIExhbWJkYTogXCJcXHUwMzlCXCIsXG4gICAgTXU6IFwiXFx1MDM5Q1wiLFxuICAgIE51OiBcIlxcdTAzOURcIixcbiAgICBYaTogXCJcXHUwMzlFXCIsXG4gICAgT21pY3JvbjogXCJcXHUwMzlGXCIsXG4gICAgUGk6IFwiXFx1MDNBMFwiLFxuICAgIFJobzogXCJcXHUwM0ExXCIsXG4gICAgU2lnbWE6IFwiXFx1MDNBM1wiLFxuICAgIFRhdTogXCJcXHUwM0E0XCIsXG4gICAgVXBzaWxvbjogXCJcXHUwM0E1XCIsXG4gICAgUGhpOiBcIlxcdTAzQTZcIixcbiAgICBDaGk6IFwiXFx1MDNBN1wiLFxuICAgIFBzaTogXCJcXHUwM0E4XCIsXG4gICAgT21lZ2E6IFwiXFx1MDNBOVwiLFxuICAgIGFscGhhOiBcIlxcdTAzQjFcIixcbiAgICBiZXRhOiBcIlxcdTAzQjJcIixcbiAgICBnYW1tYTogXCJcXHUwM0IzXCIsXG4gICAgZGVsdGE6IFwiXFx1MDNCNFwiLFxuICAgIGVwc2lsb246IFwiXFx1MDNCNVwiLFxuICAgIHpldGE6IFwiXFx1MDNCNlwiLFxuICAgIGV0YTogXCJcXHUwM0I3XCIsXG4gICAgdGhldGE6IFwiXFx1MDNCOFwiLFxuICAgIGlvdGE6IFwiXFx1MDNCOVwiLFxuICAgIGthcHBhOiBcIlxcdTAzQkFcIixcbiAgICBsYW1iZGE6IFwiXFx1MDNCQlwiLFxuICAgIG11OiBcIlxcdTAzQkNcIixcbiAgICBudTogXCJcXHUwM0JEXCIsXG4gICAgeGk6IFwiXFx1MDNCRVwiLFxuICAgIG9taWNyb246IFwiXFx1MDNCRlwiLFxuICAgIHBpOiBcIlxcdTAzQzBcIixcbiAgICByaG86IFwiXFx1MDNDMVwiLFxuICAgIHNpZ21hZjogXCJcXHUwM0MyXCIsXG4gICAgc2lnbWE6IFwiXFx1MDNDM1wiLFxuICAgIHRhdTogXCJcXHUwM0M0XCIsXG4gICAgdXBzaWxvbjogXCJcXHUwM0M1XCIsXG4gICAgcGhpOiBcIlxcdTAzQzZcIixcbiAgICBjaGk6IFwiXFx1MDNDN1wiLFxuICAgIHBzaTogXCJcXHUwM0M4XCIsXG4gICAgb21lZ2E6IFwiXFx1MDNDOVwiLFxuICAgIHRoZXRhc3ltOiBcIlxcdTAzRDFcIixcbiAgICB1cHNpaDogXCJcXHUwM0QyXCIsXG4gICAgcGl2OiBcIlxcdTAzRDZcIixcbiAgICBlbnNwOiBcIlxcdTIwMDJcIixcbiAgICBlbXNwOiBcIlxcdTIwMDNcIixcbiAgICB0aGluc3A6IFwiXFx1MjAwOVwiLFxuICAgIHp3bmo6IFwiXFx1MjAwQ1wiLFxuICAgIHp3ajogXCJcXHUyMDBEXCIsXG4gICAgbHJtOiBcIlxcdTIwMEVcIixcbiAgICBybG06IFwiXFx1MjAwRlwiLFxuICAgIG5kYXNoOiBcIlxcdTIwMTNcIixcbiAgICBtZGFzaDogXCJcXHUyMDE0XCIsXG4gICAgbHNxdW86IFwiXFx1MjAxOFwiLFxuICAgIHJzcXVvOiBcIlxcdTIwMTlcIixcbiAgICBzYnF1bzogXCJcXHUyMDFBXCIsXG4gICAgbGRxdW86IFwiXFx1MjAxQ1wiLFxuICAgIHJkcXVvOiBcIlxcdTIwMURcIixcbiAgICBiZHF1bzogXCJcXHUyMDFFXCIsXG4gICAgZGFnZ2VyOiBcIlxcdTIwMjBcIixcbiAgICBEYWdnZXI6IFwiXFx1MjAyMVwiLFxuICAgIGJ1bGw6IFwiXFx1MjAyMlwiLFxuICAgIGhlbGxpcDogXCJcXHUyMDI2XCIsXG4gICAgcGVybWlsOiBcIlxcdTIwMzBcIixcbiAgICBwcmltZTogXCJcXHUyMDMyXCIsXG4gICAgUHJpbWU6IFwiXFx1MjAzM1wiLFxuICAgIGxzYXF1bzogXCJcXHUyMDM5XCIsXG4gICAgcnNhcXVvOiBcIlxcdTIwM0FcIixcbiAgICBvbGluZTogXCJcXHUyMDNFXCIsXG4gICAgZnJhc2w6IFwiXFx1MjA0NFwiLFxuICAgIGV1cm86IFwiXFx1MjBBQ1wiLFxuICAgIGltYWdlOiBcIlxcdTIxMTFcIixcbiAgICB3ZWllcnA6IFwiXFx1MjExOFwiLFxuICAgIHJlYWw6IFwiXFx1MjExQ1wiLFxuICAgIHRyYWRlOiBcIlxcdTIxMjJcIixcbiAgICBhbGVmc3ltOiBcIlxcdTIxMzVcIixcbiAgICBsYXJyOiBcIlxcdTIxOTBcIixcbiAgICB1YXJyOiBcIlxcdTIxOTFcIixcbiAgICByYXJyOiBcIlxcdTIxOTJcIixcbiAgICBkYXJyOiBcIlxcdTIxOTNcIixcbiAgICBoYXJyOiBcIlxcdTIxOTRcIixcbiAgICBjcmFycjogXCJcXHUyMUI1XCIsXG4gICAgbEFycjogXCJcXHUyMUQwXCIsXG4gICAgdUFycjogXCJcXHUyMUQxXCIsXG4gICAgckFycjogXCJcXHUyMUQyXCIsXG4gICAgZEFycjogXCJcXHUyMUQzXCIsXG4gICAgaEFycjogXCJcXHUyMUQ0XCIsXG4gICAgZm9yYWxsOiBcIlxcdTIyMDBcIixcbiAgICBwYXJ0OiBcIlxcdTIyMDJcIixcbiAgICBleGlzdDogXCJcXHUyMjAzXCIsXG4gICAgZW1wdHk6IFwiXFx1MjIwNVwiLFxuICAgIG5hYmxhOiBcIlxcdTIyMDdcIixcbiAgICBpc2luOiBcIlxcdTIyMDhcIixcbiAgICBub3RpbjogXCJcXHUyMjA5XCIsXG4gICAgbmk6IFwiXFx1MjIwQlwiLFxuICAgIHByb2Q6IFwiXFx1MjIwRlwiLFxuICAgIHN1bTogXCJcXHUyMjExXCIsXG4gICAgbWludXM6IFwiXFx1MjIxMlwiLFxuICAgIGxvd2FzdDogXCJcXHUyMjE3XCIsXG4gICAgcmFkaWM6IFwiXFx1MjIxQVwiLFxuICAgIHByb3A6IFwiXFx1MjIxRFwiLFxuICAgIGluZmluOiBcIlxcdTIyMUVcIixcbiAgICBhbmc6IFwiXFx1MjIyMFwiLFxuICAgIGFuZDogXCJcXHUyMjI3XCIsXG4gICAgb3I6IFwiXFx1MjIyOFwiLFxuICAgIGNhcDogXCJcXHUyMjI5XCIsXG4gICAgY3VwOiBcIlxcdTIyMkFcIixcbiAgICBcImludFwiOiBcIlxcdTIyMkJcIixcbiAgICB0aGVyZTQ6IFwiXFx1MjIzNFwiLFxuICAgIHNpbTogXCJcXHUyMjNDXCIsXG4gICAgY29uZzogXCJcXHUyMjQ1XCIsXG4gICAgYXN5bXA6IFwiXFx1MjI0OFwiLFxuICAgIG5lOiBcIlxcdTIyNjBcIixcbiAgICBlcXVpdjogXCJcXHUyMjYxXCIsXG4gICAgbGU6IFwiXFx1MjI2NFwiLFxuICAgIGdlOiBcIlxcdTIyNjVcIixcbiAgICBzdWI6IFwiXFx1MjI4MlwiLFxuICAgIHN1cDogXCJcXHUyMjgzXCIsXG4gICAgbnN1YjogXCJcXHUyMjg0XCIsXG4gICAgc3ViZTogXCJcXHUyMjg2XCIsXG4gICAgc3VwZTogXCJcXHUyMjg3XCIsXG4gICAgb3BsdXM6IFwiXFx1MjI5NVwiLFxuICAgIG90aW1lczogXCJcXHUyMjk3XCIsXG4gICAgcGVycDogXCJcXHUyMkE1XCIsXG4gICAgc2RvdDogXCJcXHUyMkM1XCIsXG4gICAgbGNlaWw6IFwiXFx1MjMwOFwiLFxuICAgIHJjZWlsOiBcIlxcdTIzMDlcIixcbiAgICBsZmxvb3I6IFwiXFx1MjMwQVwiLFxuICAgIHJmbG9vcjogXCJcXHUyMzBCXCIsXG4gICAgbGFuZzogXCJcXHUyMzI5XCIsXG4gICAgcmFuZzogXCJcXHUyMzJBXCIsXG4gICAgbG96OiBcIlxcdTI1Q0FcIixcbiAgICBzcGFkZXM6IFwiXFx1MjY2MFwiLFxuICAgIGNsdWJzOiBcIlxcdTI2NjNcIixcbiAgICBoZWFydHM6IFwiXFx1MjY2NVwiLFxuICAgIGRpYW1zOiBcIlxcdTI2NjZcIlxufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwiZXNwcmVlXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJBbiBhY3RpdmVseS1tYWludGFpbmVkIGZvcmsgb2YgRXNwcmltYSwgdGhlIEVDTUFTY3JpcHQgcGFyc2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgbXVsdGlwdXJwb3NlIGFuYWx5c2lzXCIsXG4gIFwiYXV0aG9yXCI6IHtcbiAgICBcIm5hbWVcIjogXCJOaWNob2xhcyBDLiBaYWthc1wiLFxuICAgIFwiZW1haWxcIjogXCJuaWNob2xhcytucG1AbmN6Y29uc3VsdGluZy5jb21cIlxuICB9LFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc3ByZWVcIixcbiAgXCJtYWluXCI6IFwiZXNwcmVlLmpzXCIsXG4gIFwiYmluXCI6IHtcbiAgICBcImVzcGFyc2VcIjogXCIuL2Jpbi9lc3BhcnNlLmpzXCIsXG4gICAgXCJlc3ZhbGlkYXRlXCI6IFwiLi9iaW4vZXN2YWxpZGF0ZS5qc1wiXG4gIH0sXG4gIFwidmVyc2lvblwiOiBcIjIuMC4zXCIsXG4gIFwiZmlsZXNcIjogW1xuICAgIFwiYmluXCIsXG4gICAgXCJsaWJcIixcbiAgICBcInRlc3QvcnVuLmpzXCIsXG4gICAgXCJ0ZXN0L3J1bm5lci5qc1wiLFxuICAgIFwidGVzdC90ZXN0LmpzXCIsXG4gICAgXCJ0ZXN0L2NvbXBhdC5qc1wiLFxuICAgIFwidGVzdC9yZWZsZWN0LmpzXCIsXG4gICAgXCJlc3ByZWUuanNcIlxuICBdLFxuICBcImVuZ2luZXNcIjoge1xuICAgIFwibm9kZVwiOiBcIj49MC4xMC4wXCJcbiAgfSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlLmdpdFwiXG4gIH0sXG4gIFwiYnVnc1wiOiB7XG4gICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlLmdpdFwiXG4gIH0sXG4gIFwibGljZW5zZXNcIjogW1xuICAgIHtcbiAgICAgIFwidHlwZVwiOiBcIkJTRFwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9uemFrYXMvZXNwcmVlL3Jhdy9tYXN0ZXIvTElDRU5TRVwiXG4gICAgfVxuICBdLFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjcuMC4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjEuMTAuMFwiLFxuICAgIFwiY29tcGxleGl0eS1yZXBvcnRcIjogXCJ+MC42LjFcIixcbiAgICBcImRhdGVmb3JtYXRcIjogXCJeMS4wLjExXCIsXG4gICAgXCJlc2xpbnRcIjogXCJeMC45LjJcIixcbiAgICBcImVzcHJpbWFcIjogXCJnaXQ6Ly9naXRodWIuY29tL2pxdWVyeS9lc3ByaW1hLmdpdFwiLFxuICAgIFwiZXNwcmltYS1mYlwiOiBcIl44MDAxLjIwMDEuMC1kZXYtaGFybW9ueS1mYlwiLFxuICAgIFwiaXN0YW5idWxcIjogXCJ+MC4yLjZcIixcbiAgICBcImpzb24tZGlmZlwiOiBcIn4wLjMuMVwiLFxuICAgIFwibGVjaGVcIjogXCJeMS4wLjFcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMC4xXCIsXG4gICAgXCJucG0tbGljZW5zZVwiOiBcIl4wLjIuM1wiLFxuICAgIFwib3B0aW1pc3RcIjogXCJ+MC42LjBcIixcbiAgICBcInJlZ2VuZXJhdGVcIjogXCJ+MC41LjRcIixcbiAgICBcInNlbXZlclwiOiBcIl40LjEuMVwiLFxuICAgIFwic2hlbGxqc1wiOiBcIl4wLjMuMFwiLFxuICAgIFwic2hlbGxqcy1ub2RlY2xpXCI6IFwiXjAuMS4xXCIsXG4gICAgXCJ1bmljb2RlLTYuMy4wXCI6IFwifjAuMS4wXCJcbiAgfSxcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJhc3RcIixcbiAgICBcImVjbWFzY3JpcHRcIixcbiAgICBcImphdmFzY3JpcHRcIixcbiAgICBcInBhcnNlclwiLFxuICAgIFwic3ludGF4XCJcbiAgXSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcImdlbmVyYXRlLXJlZ2V4XCI6IFwibm9kZSB0b29scy9nZW5lcmF0ZS1pZGVudGlmaWVyLXJlZ2V4LmpzXCIsXG4gICAgXCJ0ZXN0XCI6IFwibnBtIHJ1bi1zY3JpcHQgbGludCAmJiBub2RlIE1ha2VmaWxlLmpzIHRlc3QgJiYgbm9kZSB0ZXN0L3J1bi5qc1wiLFxuICAgIFwibGludFwiOiBcIm5vZGUgTWFrZWZpbGUuanMgbGludFwiLFxuICAgIFwicGF0Y2hcIjogXCJub2RlIE1ha2VmaWxlLmpzIHBhdGNoXCIsXG4gICAgXCJtaW5vclwiOiBcIm5vZGUgTWFrZWZpbGUuanMgbWlub3JcIixcbiAgICBcIm1ham9yXCI6IFwibm9kZSBNYWtlZmlsZS5qcyBtYWpvclwiLFxuICAgIFwiYnJvd3NlcmlmeVwiOiBcIm5vZGUgTWFrZWZpbGUuanMgYnJvd3NlcmlmeVwiLFxuICAgIFwiY292ZXJhZ2VcIjogXCJucG0gcnVuLXNjcmlwdCBhbmFseXplLWNvdmVyYWdlICYmIG5wbSBydW4tc2NyaXB0IGNoZWNrLWNvdmVyYWdlXCIsXG4gICAgXCJhbmFseXplLWNvdmVyYWdlXCI6IFwibm9kZSBub2RlX21vZHVsZXMvaXN0YW5idWwvbGliL2NsaS5qcyBjb3ZlciB0ZXN0L3J1bm5lci5qc1wiLFxuICAgIFwiY2hlY2stY292ZXJhZ2VcIjogXCJub2RlIG5vZGVfbW9kdWxlcy9pc3RhbmJ1bC9saWIvY2xpLmpzIGNoZWNrLWNvdmVyYWdlIC0tc3RhdGVtZW50IDk5IC0tYnJhbmNoIDk5IC0tZnVuY3Rpb24gOTlcIixcbiAgICBcImNvbXBsZXhpdHlcIjogXCJucG0gcnVuLXNjcmlwdCBhbmFseXplLWNvbXBsZXhpdHkgJiYgbnBtIHJ1bi1zY3JpcHQgY2hlY2stY29tcGxleGl0eVwiLFxuICAgIFwiYW5hbHl6ZS1jb21wbGV4aXR5XCI6IFwibm9kZSB0b29scy9saXN0LWNvbXBsZXhpdHkuanNcIixcbiAgICBcImNoZWNrLWNvbXBsZXhpdHlcIjogXCJub2RlIG5vZGVfbW9kdWxlcy9jb21wbGV4aXR5LXJlcG9ydC9zcmMvY2xpLmpzIC0tbWF4Y2MgMTQgLS1zaWxlbnQgLWwgLXcgZXNwcmVlLmpzXCIsXG4gICAgXCJiZW5jaG1hcmtcIjogXCJub2RlIHRlc3QvYmVuY2htYXJrcy5qc1wiLFxuICAgIFwiYmVuY2htYXJrLXF1aWNrXCI6IFwibm9kZSB0ZXN0L2JlbmNobWFya3MuanMgcXVpY2tcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7fSxcbiAgXCJnaXRIZWFkXCI6IFwiYjYwYjU5N2NmZTQ4MzRhYWNkMTZjOTAxNzljZTczZTIyNzA1YzEzMlwiLFxuICBcIl9pZFwiOiBcImVzcHJlZUAyLjAuM1wiLFxuICBcIl9zaGFzdW1cIjogXCIxZmJkZmY2MGE0MTBiZDBkNDE2YjFhYjNkNjIzMGQzNGI3YTQ1MGUxXCIsXG4gIFwiX2Zyb21cIjogXCJlc3ByZWVAPj0yLjAuMSA8My4wLjBcIixcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjEuNC4yOFwiLFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJuemFrYXNcIixcbiAgICBcImVtYWlsXCI6IFwibmljaG9sYXNAbmN6Y29uc3VsdGluZy5jb21cIlxuICB9LFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJuemFrYXNcIixcbiAgICAgIFwiZW1haWxcIjogXCJuaWNob2xhc0BuY3pjb25zdWx0aW5nLmNvbVwiXG4gICAgfVxuICBdLFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiMWZiZGZmNjBhNDEwYmQwZDQxNmIxYWIzZDYyMzBkMzRiN2E0NTBlMVwiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNwcmVlLy0vZXNwcmVlLTIuMC4zLnRnelwiXG4gIH0sXG4gIFwiZGlyZWN0b3JpZXNcIjoge30sXG4gIFwiX3Jlc29sdmVkXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNwcmVlLy0vZXNwcmVlLTIuMC4zLnRnelwiLFxuICBcInJlYWRtZVwiOiBcIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCFcIlxufVxuIiwiLypcbiAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cbi8qanNsaW50IHZhcnM6ZmFsc2UsIGJpdHdpc2U6dHJ1ZSovXG4vKmpzaGludCBpbmRlbnQ6NCovXG4vKmdsb2JhbCBleHBvcnRzOnRydWUqL1xuKGZ1bmN0aW9uIGNsb25lKGV4cG9ydHMpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgU3ludGF4LFxuICAgICAgICBpc0FycmF5LFxuICAgICAgICBWaXNpdG9yT3B0aW9uLFxuICAgICAgICBWaXNpdG9yS2V5cyxcbiAgICAgICAgb2JqZWN0Q3JlYXRlLFxuICAgICAgICBvYmplY3RLZXlzLFxuICAgICAgICBCUkVBSyxcbiAgICAgICAgU0tJUCxcbiAgICAgICAgUkVNT1ZFO1xuXG4gICAgZnVuY3Rpb24gaWdub3JlSlNIaW50RXJyb3IoKSB7IH1cblxuICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuICAgIGlmICghaXNBcnJheSkge1xuICAgICAgICBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnJheSkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7XG4gICAgICAgIHZhciByZXQgPSB7fSwga2V5LCB2YWw7XG4gICAgICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IGRlZXBDb3B5KHZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7XG4gICAgICAgIHZhciByZXQgPSB7fSwga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaWdub3JlSlNIaW50RXJyb3Ioc2hhbGxvd0NvcHkpO1xuXG4gICAgLy8gYmFzZWQgb24gTExWTSBsaWJjKysgdXBwZXJfYm91bmQgLyBsb3dlcl9ib3VuZFxuICAgIC8vIE1JVCBMaWNlbnNlXG5cbiAgICBmdW5jdGlvbiB1cHBlckJvdW5kKGFycmF5LCBmdW5jKSB7XG4gICAgICAgIHZhciBkaWZmLCBsZW4sIGksIGN1cnJlbnQ7XG5cbiAgICAgICAgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICBpID0gMDtcblxuICAgICAgICB3aGlsZSAobGVuKSB7XG4gICAgICAgICAgICBkaWZmID0gbGVuID4+PiAxO1xuICAgICAgICAgICAgY3VycmVudCA9IGkgKyBkaWZmO1xuICAgICAgICAgICAgaWYgKGZ1bmMoYXJyYXlbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgbGVuID0gZGlmZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaSA9IGN1cnJlbnQgKyAxO1xuICAgICAgICAgICAgICAgIGxlbiAtPSBkaWZmICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb3dlckJvdW5kKGFycmF5LCBmdW5jKSB7XG4gICAgICAgIHZhciBkaWZmLCBsZW4sIGksIGN1cnJlbnQ7XG5cbiAgICAgICAgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICBpID0gMDtcblxuICAgICAgICB3aGlsZSAobGVuKSB7XG4gICAgICAgICAgICBkaWZmID0gbGVuID4+PiAxO1xuICAgICAgICAgICAgY3VycmVudCA9IGkgKyBkaWZmO1xuICAgICAgICAgICAgaWYgKGZ1bmMoYXJyYXlbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgaSA9IGN1cnJlbnQgKyAxO1xuICAgICAgICAgICAgICAgIGxlbiAtPSBkaWZmICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGVuID0gZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgaWdub3JlSlNIaW50RXJyb3IobG93ZXJCb3VuZCk7XG5cbiAgICBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIEYoKSB7IH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIEYucHJvdG90eXBlID0gbztcbiAgICAgICAgICAgIHJldHVybiBuZXcgRigpO1xuICAgICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXSwga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBvKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhmcm9tKSwga2V5LCBpLCBsZW47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGtleXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICBTeW50YXggPSB7XG4gICAgICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLFxuICAgICAgICBBc3NpZ25tZW50UGF0dGVybjogJ0Fzc2lnbm1lbnRQYXR0ZXJuJyxcbiAgICAgICAgQXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJyxcbiAgICAgICAgQXJyYXlQYXR0ZXJuOiAnQXJyYXlQYXR0ZXJuJyxcbiAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicsXG4gICAgICAgIEF3YWl0RXhwcmVzc2lvbjogJ0F3YWl0RXhwcmVzc2lvbicsIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLFxuICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JyxcbiAgICAgICAgQ2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsXG4gICAgICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLFxuICAgICAgICBDbGFzc0JvZHk6ICdDbGFzc0JvZHknLFxuICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiAnQ2xhc3NEZWNsYXJhdGlvbicsXG4gICAgICAgIENsYXNzRXhwcmVzc2lvbjogJ0NsYXNzRXhwcmVzc2lvbicsXG4gICAgICAgIENvbXByZWhlbnNpb25CbG9jazogJ0NvbXByZWhlbnNpb25CbG9jaycsICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQ29tcHJlaGVuc2lvbkV4cHJlc3Npb246ICdDb21wcmVoZW5zaW9uRXhwcmVzc2lvbicsICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJyxcbiAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0YXRlbWVudCcsXG4gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLFxuICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6ICdEaXJlY3RpdmVTdGF0ZW1lbnQnLFxuICAgICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsXG4gICAgICAgIEVtcHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLFxuICAgICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogJ0V4cG9ydEFsbERlY2xhcmF0aW9uJyxcbiAgICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJyxcbiAgICAgICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nLFxuICAgICAgICBFeHBvcnRTcGVjaWZpZXI6ICdFeHBvcnRTcGVjaWZpZXInLFxuICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsXG4gICAgICAgIEZvclN0YXRlbWVudDogJ0ZvclN0YXRlbWVudCcsXG4gICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0ZW1lbnQnLFxuICAgICAgICBGb3JPZlN0YXRlbWVudDogJ0Zvck9mU3RhdGVtZW50JyxcbiAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLFxuICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246ICdGdW5jdGlvbkV4cHJlc3Npb24nLFxuICAgICAgICBHZW5lcmF0b3JFeHByZXNzaW9uOiAnR2VuZXJhdG9yRXhwcmVzc2lvbicsICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgSWRlbnRpZmllcjogJ0lkZW50aWZpZXInLFxuICAgICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JyxcbiAgICAgICAgSW1wb3J0RGVjbGFyYXRpb246ICdJbXBvcnREZWNsYXJhdGlvbicsXG4gICAgICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyxcbiAgICAgICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyxcbiAgICAgICAgSW1wb3J0U3BlY2lmaWVyOiAnSW1wb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLFxuICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0YXRlbWVudCcsXG4gICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4cHJlc3Npb24nLFxuICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbicsXG4gICAgICAgIE1ldGhvZERlZmluaXRpb246ICdNZXRob2REZWZpbml0aW9uJyxcbiAgICAgICAgTW9kdWxlU3BlY2lmaWVyOiAnTW9kdWxlU3BlY2lmaWVyJyxcbiAgICAgICAgTmV3RXhwcmVzc2lvbjogJ05ld0V4cHJlc3Npb24nLFxuICAgICAgICBPYmplY3RFeHByZXNzaW9uOiAnT2JqZWN0RXhwcmVzc2lvbicsXG4gICAgICAgIE9iamVjdFBhdHRlcm46ICdPYmplY3RQYXR0ZXJuJyxcbiAgICAgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLFxuICAgICAgICBQcm9wZXJ0eTogJ1Byb3BlcnR5JyxcbiAgICAgICAgUmVzdEVsZW1lbnQ6ICdSZXN0RWxlbWVudCcsXG4gICAgICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsXG4gICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbicsXG4gICAgICAgIFNwcmVhZEVsZW1lbnQ6ICdTcHJlYWRFbGVtZW50JyxcbiAgICAgICAgU3VwZXJFeHByZXNzaW9uOiAnU3VwZXJFeHByZXNzaW9uJyxcbiAgICAgICAgU3dpdGNoU3RhdGVtZW50OiAnU3dpdGNoU3RhdGVtZW50JyxcbiAgICAgICAgU3dpdGNoQ2FzZTogJ1N3aXRjaENhc2UnLFxuICAgICAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246ICdUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24nLFxuICAgICAgICBUZW1wbGF0ZUVsZW1lbnQ6ICdUZW1wbGF0ZUVsZW1lbnQnLFxuICAgICAgICBUZW1wbGF0ZUxpdGVyYWw6ICdUZW1wbGF0ZUxpdGVyYWwnLFxuICAgICAgICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9uJyxcbiAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6ICdUaHJvd1N0YXRlbWVudCcsXG4gICAgICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsXG4gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVzc2lvbicsXG4gICAgICAgIFVwZGF0ZUV4cHJlc3Npb246ICdVcGRhdGVFeHByZXNzaW9uJyxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLFxuICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6ICdWYXJpYWJsZURlY2xhcmF0b3InLFxuICAgICAgICBXaGlsZVN0YXRlbWVudDogJ1doaWxlU3RhdGVtZW50JyxcbiAgICAgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnLFxuICAgICAgICBZaWVsZEV4cHJlc3Npb246ICdZaWVsZEV4cHJlc3Npb24nXG4gICAgfTtcblxuICAgIFZpc2l0b3JLZXlzID0ge1xuICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiBbJ2xlZnQnLCAncmlnaHQnXSxcbiAgICAgICAgQXJyYXlFeHByZXNzaW9uOiBbJ2VsZW1lbnRzJ10sXG4gICAgICAgIEFycmF5UGF0dGVybjogWydlbGVtZW50cyddLFxuICAgICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogWydwYXJhbXMnLCAnYm9keSddLFxuICAgICAgICBBd2FpdEV4cHJlc3Npb246IFsnYXJndW1lbnQnXSwgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIEJsb2NrU3RhdGVtZW50OiBbJ2JvZHknXSxcbiAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIEJyZWFrU3RhdGVtZW50OiBbJ2xhYmVsJ10sXG4gICAgICAgIENhbGxFeHByZXNzaW9uOiBbJ2NhbGxlZScsICdhcmd1bWVudHMnXSxcbiAgICAgICAgQ2F0Y2hDbGF1c2U6IFsncGFyYW0nLCAnYm9keSddLFxuICAgICAgICBDbGFzc0JvZHk6IFsnYm9keSddLFxuICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiBbJ2lkJywgJ3N1cGVyQ2xhc3MnLCAnYm9keSddLFxuICAgICAgICBDbGFzc0V4cHJlc3Npb246IFsnaWQnLCAnc3VwZXJDbGFzcycsICdib2R5J10sXG4gICAgICAgIENvbXByZWhlbnNpb25CbG9jazogWydsZWZ0JywgJ3JpZ2h0J10sICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQ29tcHJlaGVuc2lvbkV4cHJlc3Npb246IFsnYmxvY2tzJywgJ2ZpbHRlcicsICdib2R5J10sICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBbJ3Rlc3QnLCAnY29uc2VxdWVudCcsICdhbHRlcm5hdGUnXSxcbiAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6IFsnbGFiZWwnXSxcbiAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6IFtdLFxuICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6IFtdLFxuICAgICAgICBEb1doaWxlU3RhdGVtZW50OiBbJ2JvZHknLCAndGVzdCddLFxuICAgICAgICBFbXB0eVN0YXRlbWVudDogW10sXG4gICAgICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiBbJ3NvdXJjZSddLFxuICAgICAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb24nXSxcbiAgICAgICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogWydkZWNsYXJhdGlvbicsICdzcGVjaWZpZXJzJywgJ3NvdXJjZSddLFxuICAgICAgICBFeHBvcnRTcGVjaWZpZXI6IFsnZXhwb3J0ZWQnLCAnbG9jYWwnXSxcbiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogWydleHByZXNzaW9uJ10sXG4gICAgICAgIEZvclN0YXRlbWVudDogWydpbml0JywgJ3Rlc3QnLCAndXBkYXRlJywgJ2JvZHknXSxcbiAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6IFsnbGVmdCcsICdyaWdodCcsICdib2R5J10sXG4gICAgICAgIEZvck9mU3RhdGVtZW50OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9keSddLFxuICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBbJ2lkJywgJ3BhcmFtcycsICdib2R5J10sXG4gICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogWydpZCcsICdwYXJhbXMnLCAnYm9keSddLFxuICAgICAgICBHZW5lcmF0b3JFeHByZXNzaW9uOiBbJ2Jsb2NrcycsICdmaWx0ZXInLCAnYm9keSddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIElkZW50aWZpZXI6IFtdLFxuICAgICAgICBJZlN0YXRlbWVudDogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnLCAnYWx0ZXJuYXRlJ10sXG4gICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBbJ3NwZWNpZmllcnMnLCAnc291cmNlJ10sXG4gICAgICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IFsnbG9jYWwnXSxcbiAgICAgICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiBbJ2xvY2FsJ10sXG4gICAgICAgIEltcG9ydFNwZWNpZmllcjogWydpbXBvcnRlZCcsICdsb2NhbCddLFxuICAgICAgICBMaXRlcmFsOiBbXSxcbiAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogWydsYWJlbCcsICdib2R5J10sXG4gICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiBbJ2xlZnQnLCAncmlnaHQnXSxcbiAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogWydvYmplY3QnLCAncHJvcGVydHknXSxcbiAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogWydrZXknLCAndmFsdWUnXSxcbiAgICAgICAgTW9kdWxlU3BlY2lmaWVyOiBbXSxcbiAgICAgICAgTmV3RXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1lbnRzJ10sXG4gICAgICAgIE9iamVjdEV4cHJlc3Npb246IFsncHJvcGVydGllcyddLFxuICAgICAgICBPYmplY3RQYXR0ZXJuOiBbJ3Byb3BlcnRpZXMnXSxcbiAgICAgICAgUHJvZ3JhbTogWydib2R5J10sXG4gICAgICAgIFByb3BlcnR5OiBbJ2tleScsICd2YWx1ZSddLFxuICAgICAgICBSZXN0RWxlbWVudDogWyAnYXJndW1lbnQnIF0sXG4gICAgICAgIFJldHVyblN0YXRlbWVudDogWydhcmd1bWVudCddLFxuICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246IFsnZXhwcmVzc2lvbnMnXSxcbiAgICAgICAgU3ByZWFkRWxlbWVudDogWydhcmd1bWVudCddLFxuICAgICAgICBTdXBlckV4cHJlc3Npb246IFsnc3VwZXInXSxcbiAgICAgICAgU3dpdGNoU3RhdGVtZW50OiBbJ2Rpc2NyaW1pbmFudCcsICdjYXNlcyddLFxuICAgICAgICBTd2l0Y2hDYXNlOiBbJ3Rlc3QnLCAnY29uc2VxdWVudCddLFxuICAgICAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IFsndGFnJywgJ3F1YXNpJ10sXG4gICAgICAgIFRlbXBsYXRlRWxlbWVudDogW10sXG4gICAgICAgIFRlbXBsYXRlTGl0ZXJhbDogWydxdWFzaXMnLCAnZXhwcmVzc2lvbnMnXSxcbiAgICAgICAgVGhpc0V4cHJlc3Npb246IFtdLFxuICAgICAgICBUaHJvd1N0YXRlbWVudDogWydhcmd1bWVudCddLFxuICAgICAgICBUcnlTdGF0ZW1lbnQ6IFsnYmxvY2snLCAnaGFuZGxlcicsICdmaW5hbGl6ZXInXSxcbiAgICAgICAgVW5hcnlFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFVwZGF0ZUV4cHJlc3Npb246IFsnYXJndW1lbnQnXSxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogWydkZWNsYXJhdGlvbnMnXSxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiBbJ2lkJywgJ2luaXQnXSxcbiAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6IFsndGVzdCcsICdib2R5J10sXG4gICAgICAgIFdpdGhTdGF0ZW1lbnQ6IFsnb2JqZWN0JywgJ2JvZHknXSxcbiAgICAgICAgWWllbGRFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J11cbiAgICB9O1xuXG4gICAgLy8gdW5pcXVlIGlkXG4gICAgQlJFQUsgPSB7fTtcbiAgICBTS0lQID0ge307XG4gICAgUkVNT1ZFID0ge307XG5cbiAgICBWaXNpdG9yT3B0aW9uID0ge1xuICAgICAgICBCcmVhazogQlJFQUssXG4gICAgICAgIFNraXA6IFNLSVAsXG4gICAgICAgIFJlbW92ZTogUkVNT1ZFXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIFJlZmVyZW5jZShwYXJlbnQsIGtleSkge1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgfVxuXG4gICAgUmVmZXJlbmNlLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShub2RlKSB7XG4gICAgICAgIHRoaXMucGFyZW50W3RoaXMua2V5XSA9IG5vZGU7XG4gICAgfTtcblxuICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICBpZiAoaXNBcnJheSh0aGlzLnBhcmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnNwbGljZSh0aGlzLmtleSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShudWxsKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBFbGVtZW50KG5vZGUsIHBhdGgsIHdyYXAsIHJlZikge1xuICAgICAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLndyYXAgPSB3cmFwO1xuICAgICAgICB0aGlzLnJlZiA9IHJlZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBDb250cm9sbGVyKCkgeyB9XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIHByb3BlcnR5IHBhdGggYXJyYXkgZnJvbSByb290IHRvIGN1cnJlbnQgbm9kZVxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbiBwYXRoKCkge1xuICAgICAgICB2YXIgaSwgaXosIGosIGp6LCByZXN1bHQsIGVsZW1lbnQ7XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkVG9QYXRoKHJlc3VsdCwgcGF0aCkge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkocGF0aCkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqeiA9IHBhdGgubGVuZ3RoOyBqIDwgano7ICsraikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoW2pdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcm9vdCBub2RlXG4gICAgICAgIGlmICghdGhpcy5fX2N1cnJlbnQucGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsLCBzZWNvbmQgbm9kZSBpcyByb290IGVsZW1lbnRcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDIsIGl6ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5fX2xlYXZlbGlzdFtpXTtcbiAgICAgICAgICAgIGFkZFRvUGF0aChyZXN1bHQsIGVsZW1lbnQucGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVG9QYXRoKHJlc3VsdCwgdGhpcy5fX2N1cnJlbnQucGF0aCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyByZXR1cm4gdHlwZSBvZiBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS50eXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3VycmVudCgpO1xuICAgICAgICByZXR1cm4gbm9kZS50eXBlIHx8IHRoaXMuX19jdXJyZW50LndyYXA7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyByZXR1cm4gYXJyYXkgb2YgcGFyZW50IGVsZW1lbnRzXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucGFyZW50cyA9IGZ1bmN0aW9uIHBhcmVudHMoKSB7XG4gICAgICAgIHZhciBpLCBpeiwgcmVzdWx0O1xuXG4gICAgICAgIC8vIGZpcnN0IG5vZGUgaXMgc2VudGluZWxcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDEsIGl6ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLl9fbGVhdmVsaXN0W2ldLm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24gY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19jdXJyZW50Lm5vZGU7XG4gICAgfTtcblxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9fZXhlY3V0ZSA9IGZ1bmN0aW9uIF9fZXhlY3V0ZShjYWxsYmFjaywgZWxlbWVudCkge1xuICAgICAgICB2YXIgcHJldmlvdXMsIHJlc3VsdDtcblxuICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcHJldmlvdXMgID0gdGhpcy5fX2N1cnJlbnQ7XG4gICAgICAgIHRoaXMuX19jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5fX3N0YXRlID0gbnVsbDtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjay5jYWxsKHRoaXMsIGVsZW1lbnQubm9kZSwgdGhpcy5fX2xlYXZlbGlzdFt0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aCAtIDFdLm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19jdXJyZW50ID0gcHJldmlvdXM7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIG5vdGlmeSBjb250cm9sIHNraXAgLyBicmVha1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShmbGFnKSB7XG4gICAgICAgIHRoaXMuX19zdGF0ZSA9IGZsYWc7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyBza2lwIGNoaWxkIG5vZGVzIG9mIGN1cnJlbnQgbm9kZVxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KFNLSVApO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gYnJlYWsgdHJhdmVyc2Fsc1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlWydicmVhayddID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeShCUkVBSyk7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyByZW1vdmUgbm9kZVxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoUkVNT1ZFKTtcbiAgICB9O1xuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuX19pbml0aWFsaXplID0gZnVuY3Rpb24ocm9vdCwgdmlzaXRvcikge1xuICAgICAgICB0aGlzLnZpc2l0b3IgPSB2aXNpdG9yO1xuICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgICB0aGlzLl9fd29ya2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5fX2xlYXZlbGlzdCA9IFtdO1xuICAgICAgICB0aGlzLl9fY3VycmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX19mYWxsYmFjayA9IHZpc2l0b3IuZmFsbGJhY2sgPT09ICdpdGVyYXRpb24nO1xuICAgICAgICB0aGlzLl9fa2V5cyA9IFZpc2l0b3JLZXlzO1xuICAgICAgICBpZiAodmlzaXRvci5rZXlzKSB7XG4gICAgICAgICAgICB0aGlzLl9fa2V5cyA9IGV4dGVuZChvYmplY3RDcmVhdGUodGhpcy5fX2tleXMpLCB2aXNpdG9yLmtleXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGlzTm9kZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBub2RlLnR5cGUgPT09ICdzdHJpbmcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUHJvcGVydHkobm9kZVR5cGUsIGtleSkge1xuICAgICAgICByZXR1cm4gKG5vZGVUeXBlID09PSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbiB8fCBub2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdFBhdHRlcm4pICYmICdwcm9wZXJ0aWVzJyA9PT0ga2V5O1xuICAgIH1cblxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVyc2Uocm9vdCwgdmlzaXRvcikge1xuICAgICAgICB2YXIgd29ya2xpc3QsXG4gICAgICAgICAgICBsZWF2ZWxpc3QsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG5vZGVUeXBlLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGN1cnJlbnQyLFxuICAgICAgICAgICAgY2FuZGlkYXRlcyxcbiAgICAgICAgICAgIGNhbmRpZGF0ZSxcbiAgICAgICAgICAgIHNlbnRpbmVsO1xuXG4gICAgICAgIHRoaXMuX19pbml0aWFsaXplKHJvb3QsIHZpc2l0b3IpO1xuXG4gICAgICAgIHNlbnRpbmVsID0ge307XG5cbiAgICAgICAgLy8gcmVmZXJlbmNlXG4gICAgICAgIHdvcmtsaXN0ID0gdGhpcy5fX3dvcmtsaXN0O1xuICAgICAgICBsZWF2ZWxpc3QgPSB0aGlzLl9fbGVhdmVsaXN0O1xuXG4gICAgICAgIC8vIGluaXRpYWxpemVcbiAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChyb290LCBudWxsLCBudWxsLCBudWxsKSk7XG4gICAgICAgIGxlYXZlbGlzdC5wdXNoKG5ldyBFbGVtZW50KG51bGwsIG51bGwsIG51bGwsIG51bGwpKTtcblxuICAgICAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3QucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBzZW50aW5lbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsZWF2ZWxpc3QucG9wKCk7XG5cbiAgICAgICAgICAgICAgICByZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmxlYXZlLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHJldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZSkge1xuXG4gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5lbnRlciwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHNlbnRpbmVsKTtcbiAgICAgICAgICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFNLSVAgfHwgcmV0ID09PSBTS0lQKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtZW50Lm5vZGU7XG4gICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBlbGVtZW50LndyYXAgfHwgbm9kZS50eXBlO1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSB0aGlzLl9fa2V5c1tub2RlVHlwZV07XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fZmFsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBvYmplY3RLZXlzKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vZGUgdHlwZSAnICsgbm9kZVR5cGUgKyAnLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGNhbmRpZGF0ZXNbY3VycmVudF07XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG5vZGVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudDIgPSBjYW5kaWRhdGUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50MiAtPSAxKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVbY3VycmVudDJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eShub2RlVHlwZSwgY2FuZGlkYXRlc1tjdXJyZW50XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgJ1Byb3BlcnR5JywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGUoY2FuZGlkYXRlW2N1cnJlbnQyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVsbCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQoY2FuZGlkYXRlLCBrZXksIG51bGwsIG51bGwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShyb290LCB2aXNpdG9yKSB7XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUVsZW0oZWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIG5leHRFbGVtLFxuICAgICAgICAgICAgICAgIHBhcmVudDtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVmLnJlbW92ZSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgcmVmZXJlbmNlIGlzIGFuIGVsZW1lbnQgb2YgYW4gYXJyYXkuXG4gICAgICAgICAgICAgICAga2V5ID0gZWxlbWVudC5yZWYua2V5O1xuICAgICAgICAgICAgICAgIHBhcmVudCA9IGVsZW1lbnQucmVmLnBhcmVudDtcblxuICAgICAgICAgICAgICAgIC8vIElmIHJlbW92ZWQgZnJvbSBhcnJheSwgdGhlbiBkZWNyZWFzZSBmb2xsb3dpbmcgaXRlbXMnIGtleXMuXG4gICAgICAgICAgICAgICAgaSA9IHdvcmtsaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRFbGVtID0gd29ya2xpc3RbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RWxlbS5yZWYgJiYgbmV4dEVsZW0ucmVmLnBhcmVudCA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAgKG5leHRFbGVtLnJlZi5rZXkgPCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC0tbmV4dEVsZW0ucmVmLmtleTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrbGlzdCxcbiAgICAgICAgICAgIGxlYXZlbGlzdCxcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgY3VycmVudDIsXG4gICAgICAgICAgICBjYW5kaWRhdGVzLFxuICAgICAgICAgICAgY2FuZGlkYXRlLFxuICAgICAgICAgICAgc2VudGluZWwsXG4gICAgICAgICAgICBvdXRlcixcbiAgICAgICAgICAgIGtleTtcblxuICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTtcblxuICAgICAgICBzZW50aW5lbCA9IHt9O1xuXG4gICAgICAgIC8vIHJlZmVyZW5jZVxuICAgICAgICB3b3JrbGlzdCA9IHRoaXMuX193b3JrbGlzdDtcbiAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDtcblxuICAgICAgICAvLyBpbml0aWFsaXplXG4gICAgICAgIG91dGVyID0ge1xuICAgICAgICAgICAgcm9vdDogcm9vdFxuICAgICAgICB9O1xuICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQocm9vdCwgbnVsbCwgbnVsbCwgbmV3IFJlZmVyZW5jZShvdXRlciwgJ3Jvb3QnKSk7XG4gICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgIGxlYXZlbGlzdC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgICAgIHdoaWxlICh3b3JrbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB3b3JrbGlzdC5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHNlbnRpbmVsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IGxlYXZlbGlzdC5wb3AoKTtcblxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IubGVhdmUsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgLy8gbm9kZSBtYXkgYmUgcmVwbGFjZWQgd2l0aCBudWxsLFxuICAgICAgICAgICAgICAgIC8vIHNvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdW5kZWZpbmVkIGFuZCBudWxsIGluIHRoaXMgcGxhY2VcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0ICE9PSBCUkVBSyAmJiB0YXJnZXQgIT09IFNLSVAgJiYgdGFyZ2V0ICE9PSBSRU1PVkUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlZi5yZXBsYWNlKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gUkVNT1ZFIHx8IHRhcmdldCA9PT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUVsZW0oZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgdGFyZ2V0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0ZXIucm9vdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAvLyBub2RlIG1heSBiZSByZXBsYWNlZCB3aXRoIG51bGwsXG4gICAgICAgICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuZGVmaW5lZCBhbmQgbnVsbCBpbiB0aGlzIHBsYWNlXG4gICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0ICE9PSBCUkVBSyAmJiB0YXJnZXQgIT09IFNLSVAgJiYgdGFyZ2V0ICE9PSBSRU1PVkUpIHtcbiAgICAgICAgICAgICAgICAvLyByZXBsYWNlXG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZWYucmVwbGFjZSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQubm9kZSA9IHRhcmdldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gUkVNT1ZFIHx8IHRhcmdldCA9PT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlRWxlbShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5vZGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIG51bGxcbiAgICAgICAgICAgIG5vZGUgPSBlbGVtZW50Lm5vZGU7XG4gICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7XG4gICAgICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gU0tJUCB8fCB0YXJnZXQgPT09IFNLSVApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZVR5cGUgPSBlbGVtZW50LndyYXAgfHwgbm9kZS50eXBlO1xuICAgICAgICAgICAgY2FuZGlkYXRlcyA9IHRoaXMuX19rZXlzW25vZGVUeXBlXTtcbiAgICAgICAgICAgIGlmICghY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fZmFsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IG9iamVjdEtleXMobm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vZGUgdHlwZSAnICsgbm9kZVR5cGUgKyAnLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50IC09IDEpID49IDApIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBjYW5kaWRhdGVzW2N1cnJlbnRdO1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG5vZGVba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQyID0gY2FuZGlkYXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50MiAtPSAxKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZVtjdXJyZW50Ml0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb3BlcnR5KG5vZGVUeXBlLCBjYW5kaWRhdGVzW2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sICdQcm9wZXJ0eScsIG5ldyBSZWZlcmVuY2UoY2FuZGlkYXRlLCBjdXJyZW50MikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGUoY2FuZGlkYXRlW2N1cnJlbnQyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCBudWxsLCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGUoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBuZXcgUmVmZXJlbmNlKG5vZGUsIGtleSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3V0ZXIucm9vdDtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gdHJhdmVyc2Uocm9vdCwgdmlzaXRvcikge1xuICAgICAgICB2YXIgY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyKCk7XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLnRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uocm9vdCwgdmlzaXRvcikge1xuICAgICAgICB2YXIgY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyKCk7XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLnJlcGxhY2Uocm9vdCwgdmlzaXRvcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kQ29tbWVudFJhbmdlKGNvbW1lbnQsIHRva2Vucykge1xuICAgICAgICB2YXIgdGFyZ2V0O1xuXG4gICAgICAgIHRhcmdldCA9IHVwcGVyQm91bmQodG9rZW5zLCBmdW5jdGlvbiBzZWFyY2godG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbi5yYW5nZVswXSA+IGNvbW1lbnQucmFuZ2VbMF07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbW1lbnQuZXh0ZW5kZWRSYW5nZSA9IFtjb21tZW50LnJhbmdlWzBdLCBjb21tZW50LnJhbmdlWzFdXTtcblxuICAgICAgICBpZiAodGFyZ2V0ICE9PSB0b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMV0gPSB0b2tlbnNbdGFyZ2V0XS5yYW5nZVswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldCAtPSAxO1xuICAgICAgICBpZiAodGFyZ2V0ID49IDApIHtcbiAgICAgICAgICAgIGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSA9IHRva2Vuc1t0YXJnZXRdLnJhbmdlWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbW1lbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXR0YWNoQ29tbWVudHModHJlZSwgcHJvdmlkZWRDb21tZW50cywgdG9rZW5zKSB7XG4gICAgICAgIC8vIEF0IGZpcnN0LCB3ZSBzaG91bGQgY2FsY3VsYXRlIGV4dGVuZGVkIGNvbW1lbnQgcmFuZ2VzLlxuICAgICAgICB2YXIgY29tbWVudHMgPSBbXSwgY29tbWVudCwgbGVuLCBpLCBjdXJzb3I7XG5cbiAgICAgICAgaWYgKCF0cmVlLnJhbmdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGFjaENvbW1lbnRzIG5lZWRzIHJhbmdlIGluZm9ybWF0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0b2tlbnMgYXJyYXkgaXMgZW1wdHksIHdlIGF0dGFjaCBjb21tZW50cyB0byB0cmVlIGFzICdsZWFkaW5nQ29tbWVudHMnXG4gICAgICAgIGlmICghdG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcHJvdmlkZWRDb21tZW50cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZGVlcENvcHkocHJvdmlkZWRDb21tZW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQuZXh0ZW5kZWRSYW5nZSA9IFswLCB0cmVlLnJhbmdlWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJlZS5sZWFkaW5nQ29tbWVudHMgPSBjb21tZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cmVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcHJvdmlkZWRDb21tZW50cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgY29tbWVudHMucHVzaChleHRlbmRDb21tZW50UmFuZ2UoZGVlcENvcHkocHJvdmlkZWRDb21tZW50c1tpXSksIHRva2VucykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcyBpcyBiYXNlZCBvbiBKb2huIEZyZWVtYW4ncyBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgY3Vyc29yID0gMDtcbiAgICAgICAgdHJhdmVyc2UodHJlZSwge1xuICAgICAgICAgICAgZW50ZXI6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQ7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAoY3Vyc29yIDwgY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50c1tjdXJzb3JdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID4gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID09PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUubGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5zcGxpY2UoY3Vyc29yLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBvdXQgb2Ygb3duZWQgbm9kZVxuICAgICAgICAgICAgICAgIGlmIChjdXJzb3IgPT09IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaXRvck9wdGlvbi5CcmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tbWVudHNbY3Vyc29yXS5leHRlbmRlZFJhbmdlWzBdID4gbm9kZS5yYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaXRvck9wdGlvbi5Ta2lwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3Vyc29yID0gMDtcbiAgICAgICAgdHJhdmVyc2UodHJlZSwge1xuICAgICAgICAgICAgbGVhdmU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQ7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAoY3Vyc29yIDwgY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50c1tjdXJzb3JdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5yYW5nZVsxXSA8IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5yYW5nZVsxXSA9PT0gY29tbWVudC5leHRlbmRlZFJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUudHJhaWxpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5zcGxpY2UoY3Vyc29yLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBvdXQgb2Ygb3duZWQgbm9kZVxuICAgICAgICAgICAgICAgIGlmIChjdXJzb3IgPT09IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaXRvck9wdGlvbi5CcmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tbWVudHNbY3Vyc29yXS5leHRlbmRlZFJhbmdlWzBdID4gbm9kZS5yYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaXRvck9wdGlvbi5Ta2lwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRyZWU7XG4gICAgfVxuXG4gICAgZXhwb3J0cy52ZXJzaW9uID0gcmVxdWlyZSgnLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuICAgIGV4cG9ydHMuU3ludGF4ID0gU3ludGF4O1xuICAgIGV4cG9ydHMudHJhdmVyc2UgPSB0cmF2ZXJzZTtcbiAgICBleHBvcnRzLnJlcGxhY2UgPSByZXBsYWNlO1xuICAgIGV4cG9ydHMuYXR0YWNoQ29tbWVudHMgPSBhdHRhY2hDb21tZW50cztcbiAgICBleHBvcnRzLlZpc2l0b3JLZXlzID0gVmlzaXRvcktleXM7XG4gICAgZXhwb3J0cy5WaXNpdG9yT3B0aW9uID0gVmlzaXRvck9wdGlvbjtcbiAgICBleHBvcnRzLkNvbnRyb2xsZXIgPSBDb250cm9sbGVyO1xuICAgIGV4cG9ydHMuY2xvbmVFbnZpcm9ubWVudCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsb25lKHt9KTsgfTtcblxuICAgIHJldHVybiBleHBvcnRzO1xufShleHBvcnRzKSk7XG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJlc3RyYXZlcnNlXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJFQ01BU2NyaXB0IEpTIEFTVCB0cmF2ZXJzYWwgZnVuY3Rpb25zXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwczovL2dpdGh1Yi5jb20vZXN0b29scy9lc3RyYXZlcnNlXCIsXG4gIFwibWFpblwiOiBcImVzdHJhdmVyc2UuanNcIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMy4xLjBcIixcbiAgXCJlbmdpbmVzXCI6IHtcbiAgICBcIm5vZGVcIjogXCI+PTAuMTAuMFwiXG4gIH0sXG4gIFwibWFpbnRhaW5lcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcImNvbnN0ZWxsYXRpb25cIixcbiAgICAgIFwiZW1haWxcIjogXCJ1dGF0YW5lLnRlYUBnbWFpbC5jb21cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwibWljaGFlbGZpY2FycmFcIixcbiAgICAgIFwiZW1haWxcIjogXCJucG1AbWljaGFlbC5maWNhcnJhLm1lXCJcbiAgICB9XG4gIF0sXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vZXN0b29scy9lc3RyYXZlcnNlLmdpdFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImNoYWlcIjogXCJeMi4xLjFcIixcbiAgICBcImNvZmZlZS1zY3JpcHRcIjogXCJeMS44LjBcIixcbiAgICBcImVzcHJlZVwiOiBcIl4xLjExLjBcIixcbiAgICBcImd1bHBcIjogXCJeMy44LjEwXCIsXG4gICAgXCJndWxwLWJ1bXBcIjogXCJeMC4yLjJcIixcbiAgICBcImd1bHAtZmlsdGVyXCI6IFwiXjIuMC4wXCIsXG4gICAgXCJndWxwLWdpdFwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC10YWctdmVyc2lvblwiOiBcIl4xLjIuMVwiLFxuICAgIFwianNoaW50XCI6IFwiXjIuNS42XCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjEuMFwiXG4gIH0sXG4gIFwibGljZW5zZXNcIjogW1xuICAgIHtcbiAgICAgIFwidHlwZVwiOiBcIkJTRFwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9lc3Rvb2xzL2VzdHJhdmVyc2UvcmF3L21hc3Rlci9MSUNFTlNFLkJTRFwiXG4gICAgfVxuICBdLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwidGVzdFwiOiBcIm5wbSBydW4tc2NyaXB0IGxpbnQgJiYgbnBtIHJ1bi1zY3JpcHQgdW5pdC10ZXN0XCIsXG4gICAgXCJsaW50XCI6IFwianNoaW50IGVzdHJhdmVyc2UuanNcIixcbiAgICBcInVuaXQtdGVzdFwiOiBcIm1vY2hhIC0tY29tcGlsZXJzIGNvZmZlZTpjb2ZmZWUtc2NyaXB0L3JlZ2lzdGVyXCJcbiAgfSxcbiAgXCJnaXRIZWFkXCI6IFwiMTY2ZWJiZTBhOGQ0NWNlYjIzOTFiNmY1ZWY1ZDFiYWI2YmZiMjY3YVwiLFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZS9pc3N1ZXNcIlxuICB9LFxuICBcIl9pZFwiOiBcImVzdHJhdmVyc2VAMy4xLjBcIixcbiAgXCJfc2hhc3VtXCI6IFwiMTVlMjhhNDQ2YjhiODJiYzcwMGNjYzhiOTZjNzhhZjRkYTBkNmNiYVwiLFxuICBcIl9mcm9tXCI6IFwiZXN0cmF2ZXJzZUA+PTMuMS4wIDw0LjAuMFwiLFxuICBcIl9ucG1WZXJzaW9uXCI6IFwiMi4wLjAtYWxwaGEtNVwiLFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJjb25zdGVsbGF0aW9uXCIsXG4gICAgXCJlbWFpbFwiOiBcInV0YXRhbmUudGVhQGdtYWlsLmNvbVwiXG4gIH0sXG4gIFwiZGlzdFwiOiB7XG4gICAgXCJzaGFzdW1cIjogXCIxNWUyOGE0NDZiOGI4MmJjNzAwY2NjOGI5NmM3OGFmNGRhMGQ2Y2JhXCIsXG4gICAgXCJ0YXJiYWxsXCI6IFwiaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS0zLjEuMC50Z3pcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHt9LFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdHJhdmVyc2UvLS9lc3RyYXZlcnNlLTMuMS4wLnRnelwiLFxuICBcInJlYWRtZVwiOiBcIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCFcIlxufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgc2V0SW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gYWRkRnJvbVNldEltbWVkaWF0ZUFyZ3VtZW50cyhhcmdzKSB7XG4gICAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSBwYXJ0aWFsbHlBcHBsaWVkLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBzZXRJbW1lZGlhdGUsIGJ1dFxuICAgIC8vIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIG5vIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBwYXJ0aWFsbHlBcHBsaWVkKGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAobmV3IEZ1bmN0aW9uKFwiXCIgKyBoYW5kbGVyKSkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHBhcnRpYWxseUFwcGxpZWQocnVuSWZQcmVzZW50LCBoYW5kbGUpLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgc2V0SW1tZWRpYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gYWRkRnJvbVNldEltbWVkaWF0ZUFyZ3VtZW50cyhhcmd1bWVudHMpO1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhwYXJ0aWFsbHlBcHBsaWVkKHJ1bklmUHJlc2VudCwgaGFuZGxlKSk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRJbW1lZGlhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBhZGRGcm9tU2V0SW1tZWRpYXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRJbW1lZGlhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBhZGRGcm9tU2V0SW1tZWRpYXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgc2V0SW1tZWRpYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gYWRkRnJvbVNldEltbWVkaWF0ZUFyZ3VtZW50cyhhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGFkZEZyb21TZXRJbW1lZGlhdGVBcmd1bWVudHMoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocGFydGlhbGx5QXBwbGllZChydW5JZlByZXNlbnQsIGhhbmRsZSksIDApO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkpKTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuIC8qanNsaW50IG5vZGU6IHRydWUgKi9cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTdGF0aWMgYW5hbHlzaXMgZm9yIFBvbHltZXIuXG4gKiBAbmFtZXNwYWNlIGh5ZHJvbHlzaXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFuYWx5emVyOiAgICAgcmVxdWlyZSgnLi9saWIvYW5hbHl6ZXInKSxcbiAgZG9jczogICAgICAgICByZXF1aXJlKCcuL2xpYi9hc3QtdXRpbHMvZG9jcycpLFxuICBGU1Jlc29sdmVyOiAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci9mcy1yZXNvbHZlcicpLFxuICBqc2RvYzogICAgICAgIHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9qc2RvYycpLFxuICBMb2FkZXI6ICAgICAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci9maWxlLWxvYWRlcicpLFxuICBOb29wUmVzb2x2ZXI6IHJlcXVpcmUoJy4vbGliL2xvYWRlci9ub29wLXJlc29sdmVyJyksXG4gIFhIUlJlc29sdmVyOiAgcmVxdWlyZSgnLi9saWIvbG9hZGVyL3hoci1yZXNvbHZlcicpLFxuICBfanNQYXJzZTogICAgIHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9qcy1wYXJzZScpLFxuICBfaW1wb3J0UGFyc2U6IHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9pbXBvcnQtcGFyc2UnKSxcbn07XG4iXX0= diff --git a/lib/loader/fs-resolver.js b/lib/loader/fs-resolver.js index 4e95e0c5..4937a41d 100644 --- a/lib/loader/fs-resolver.js +++ b/lib/loader/fs-resolver.js @@ -68,7 +68,7 @@ FSResolver.prototype = { accept: function(uri, deferred) { var parsed = url.parse(uri); var host = this.config.host; - var base = this.config.basePath; + var base = this.config.basePath && decodeURIComponent(this.config.basePath); var root = this.config.root && path.normalize(this.config.root); var redirect = this.config.redirect; @@ -79,6 +79,9 @@ FSResolver.prototype = { } if (local) { + // un-escape HTML escapes + local = decodeURIComponent(local); + if (base) { local = path.relative(base, local); } diff --git a/package.json b/package.json index c7cd0d41..79dfa8fa 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "watch": "latest" }, "dependencies": { - "dom5": "^1.0.3", + "dom5": "^1.1.0", "es6-promise": "^2.1.0", "espree": "^2.0.1", "estraverse": "^3.1.0", diff --git a/test/static/spaces in request.txt b/test/static/spaces in request.txt new file mode 100644 index 00000000..c9c5b889 --- /dev/null +++ b/test/static/spaces in request.txt @@ -0,0 +1 @@ +Spaces! diff --git a/test/test.js b/test/test.js index 3e6a1b5f..120e6ed8 100644 --- a/test/test.js +++ b/test/test.js @@ -103,6 +103,27 @@ suite('Loader', function() { assert.equal(content.trim(), 'Hello!'); }).then(done, done); }); + + test('Spaces in Filepath', function(done) { + var fs = new fsResolver({ + root: path.join(__dirname, '..') + }); + l.addResolver(fs); + l.request('/test/static/spaces%20in%20request.txt').then(function(content) { + assert.equal(content.trim(), 'Spaces!'); + }).then(done, done); + }); + + test('Spaces in Filepath', function(done) { + var fs = new fsResolver({ + root: path.join(__dirname, '..'), + basePath: '/space%20in%20basePath' + }); + l.addResolver(fs); + l.request('/space%20in%20basePath/test/static/xhr-text.txt').then(function(content) { + assert.equal(content.trim(), 'Hello!'); + }).then(done, done); + }); }); suite('Noop Resolver', function() {